It is done-ish! And by that I mean the most basic form of this lil idea I had is ready to be unleashed on the world.
But Lille, what even is this?
Why thank you for asking, audience in my head. This is a random generator that reads in a list of events and a list of kingdoms and gives you random events that make sense to happen to said kingdoms based on requirements. Kinda like everyones beloved ROS, but instead of being for single households usually, it's on a more neighborhood scale and has a few more ways for you to influence which events roll.
I am bad at explaining it, but I promise it makes sense.
Is it necessarily a sims thing? Absolutely not! I am sure you could use this for writing prompts or random events in a TTRPG campaign or whathaveyou. But my main thought was "medieval simmers would love to have a random thing to throw natural disasters or war refugees from whatever fictional 'other' kingdoms are around in their minds at them" because I AM that medieval simmer.
So here's what you get:
An .exe which randomizes things, ala ROS, but while taking requirements into account.
An XML with sample events to generate. Are they good? Eh, they'll do. This is why it's an XML, so you can edit it and someone smarter than me can make a cooler version.
An XML with sample Kingdoms, upon which the requirements for the events are tested. They are named A,B,C,D and E and just had random-ish values thrown at them. Edit them. make them your own!
A Readme, which explains things in more detail.
Huge thanks to @clouseplayssims for throwing some inspiration in the form of every single ROS list in existence at me and being one of my initial guinea pigs, as well as enabling the silly little idea in the first place.
Alrighty, to the download, yes?
DOWNLOAD(SFS)
Note: Due to how I turned the base python code into an exe, some antiviruses flag it as a possible Trojan. I do not know how to fix that. I can only say that me and my 200 lines of code do not want to damage your computer or steal your monies, I promise.
Further note: I compiled and tested this on Windows 10. It might work on other operating systems, but i make no promises. If anyone is running into issues like that and or knows how to compile a python script, please let me know, i am more than happy to pass you the sourcecode so more people can have a functioning version of this.
I will happily answer any questions, take suggestions or try to do tech support, just let me know!
Also definitely feel free to share your edited events/kingdoms files. My examples are thrown together haphazardly and it SHOWS.
Also - you can totally use it for non medieval things. Just write modern events and ignore the fact that the program calls things in the kingdom file kingdoms. They could be cities, or planets, or whatever else you can come up with!
Not gonna lie. I wrote my first programs 34 years ago but I never was a "real" developer in the sense that I'd write fast desktop apps, manage threads, and all that low level stuff. So learning Rust in the past few months, even if I have some very basic experience with programming in assembly, is still a lot to digest. However, today I got back to my test project and am really hyped that I have.... a button that increments a number.
"Ha, I can do that in javascript in 10 minutes." I mean yeah. Obviously. Anyone can. Here's the cool thing tho. I made mine overly complicated.
The UI looks as you'd expect it to, mostly a starter project leftovers:
The HTML is as simple as can be, just plain HTML and javascript, no compile step. We live in stone ages here and we love it.
The submit button has a simple handler in javascript:
This is, once again, trivial, and all just from the template project. Bottom part says "when a user clicks this button, call "greet" function". The top part is the greet function that invokes a Tauri command also called "greet".
What's Tauri? An open source project that lets you write JS/TS/Rust applications with WebView and bundle them as stand-alone, self-contained, one-file applications for desktop, and starting with Tauri 2.0 (now in beta.2) also for Android (and later iOS). If you know Electron (Slack, Spotify, Discord etc all use Electron, they're just websites with Chromium and C++ code packaged around them).
Anyway. Tauri runs a Rust "server" application that serves your HTML/JS app, but also lets you run high-performance Rust code. Adding a command is relatively simple:
Here's where things get interesting. For me.
Because I wanted to learn Bevy, a game engine written in Rust, because I want to learn how to write using a high-performance functional-programming-like pattern called ECS (Entity Component System), I have added Bevy to this project.
However, both Tauri and Bevy block on the main thread, so I had to find a tutorial on how to spawn Bevy in a different thread, and how to pass information to it. An example:
#[tauri::command] turns a normal function into a Tauri command that I can call from HTML/JS. It injects resource called BevyBridge which is just two lines of code:
#[derive(Resource)]
pub struct BevyBridge(pub Sender<u64>, pub Receiver<;u64>);
Sender and Receiver being from crossbeam-channel bevy crate which is for sending data back and forth safely and quickly between individual threads.
so "state.0.send(1)" means I'm sending a 64-bit unsigned integer with a value 1 to the channel.
And this is how to receive the message - inside of Bevy engine, in a separate thread. For simplicity, if I send zero, it resets the counter, and if I send any number it adds 100000 to the number, just for clarity. (Elsewhere I'm incrementing it by 1 on every game loop, so theoretically 60x a second. Or 15000x a second because Bevy is unreasonably fast and it doesn't need to render anything in this setup.)
And the best part is that with a single command (cargo tauri build) I get an .msi file, an .exe installer, both around 4MB, and a 11MB .exe file with no dependencies besides WebView (installed on every current desktop OS by default). There's just something about giving someone a floppy disk with an executable that you made yourself.
Is it dumb? Yes. Does it make me happy? No. Does it make me glad, and very relieved that I'm not completely lost? You bet.
I have mixed feelings about faithfully replicating error behavior in code which polyfills or transpiles new behavior onto old systems.
In an ideal world, developers get to write code using the newest features of a language, and old stuff is handled by a mix of polyfills and backpiling - transpiling from the new version of the programming language to the old.
In practice, this isn't always possible, is almost never possible to do perfectly, and is sometimes not necessary or worth the effort to do perfectly.
C example: a trivial "gracefully degrading" backpiling of C99's `restrict` keyword to C89 is `#define restrict`. Boom, no more `restrict` keyword, and all code that worked before (without relying on undefined behavior) still works. It won't run as fast because the C89 compiler can't make the assumptions that `restrict` allows, but if it worked in a well-defined way before, it still works. So if you're using `restrict` in its strictly-defined way to express an expectation, it empowers optimizations and makes it easier to surface bugs where this expectation is obviously violated. If you're not relying on the side-effect of those optimizations for correctness, then stripping out `restrict` isn't a problem. If your canonical source has `restrict` and you still run that source through tools which understand `restrict`, it's still helping you catching any of the low-hanging bugs.
JavaScript example: older versions of JS could not "freeze" an object, making it immutable to further modification. I think in many situations, an acceptable backpiling of this is to "polyfill" the `freeze` function with a no-op. So if you are freezing objects to state your intent and expectations, to enable JIT optimizations, or to help catch any unintended modifications, then so long as your code works correctly on newer JS runtimes where freezing works, and you test it thoroughly enough there, then it's fine to let the freeze become a no-op on older systems - it might not get optimized as well but it'll still work. Even if you're freezing an object before giving it to another piece of code and relying on that to protect you if the code tries to mutate the object, in many situations it is going to be justified risk management to assume that any bugs this would catch would be caught in testing and usage on the more common newer systems where freezing works and is thus not polyfilled as a no-op.
So obviously this generalizes. But in certain cases it gets harder to decide whether or not the error behavior is actually relied on as a stable interface. Per Hyrum's Law, we can sorta assume that if something is widespread and known enough, people do rely on it.
There's probably some code out there which breaks if `restrict` is removed, because it relies, whether deliberately or accidentally, on the `restrict` causing some value to be re-used from a register without being re-read from a memory location which has already been overwritten. Undefined behavior and wrong C by definition, but it might have started out as a justified optimization on some embedded system where the compiler was stable and predictably generated code which made it work.
There's probably code out there which breaks if `Object.freeze` is a no-op, because it freezes externally passed-in objects but leaves its own internal objects mutable, and then relies on the mutation error on a frozen object to tell them apart. Bad design, but it's not as obvious that it is bad if you haven't spent a lot of time thinking about this problem space - simultaneously empowering developers to write code using new features and empowering users to run that code on older system.
And when I think about edge cases like that, if I'm feeling particularly sanctimonious about the rightness of how I would write code, I want to say that those uses are obviously bad, and the only reasonable solution is for older systems to be second-class citizens. You do enough to enable people on those systems to run correct, well-designed code, and get the same working behavior.
But then I think about the user and developer experience.
Like with the Python positional-only arguments polyfill. If you don't care about a consistent, obvious error, you just do `foo, bar, args = args[0], args[1], args[2:]` and move on. No extra nested function, no manual exception raise, nothing. On an older Python you just get an opaque `IndexError` instead of a `TypeError` if you call it without enough positional arguments. But as a developer, this is confusing and frustrating and wastes my time unless I know and remember that this is how the implementation works. It creates extra thinking cost, forces me to infer more. If this error ends up in a log, especially without a traceback to go with it, it is infuriatingly misleading and opaque, a red herring which has destroyed the actually useful error information.
At least with C's `restrict` or JavaScript's `Object.freeze` you have no choice. Those have to be implemented inside the language and the best you can do on older systems is turn them into no-ops, and code which is "correct" (for some possibly opinionated definition of correct) still works.
But with Python's positional-only arguments, you do have a choice. You can do various things to mimick the error behavior of modern code, more or less closely.
So then you get into questions which don't have as easy of answers, like "how much readability or performance is it worth losing in the code to emulate this error more precisely or more accurately?"
“Sara Farris’ 2017 book In the name of women’s rights: the rise of femonationalism asks a question that has perplexed many of us, and which concerns us particularly here at FINT: why do certain feminists “converge” with right wing, nationalist politicians on the issue of Muslim (and other non-western migrant) women’s rights? This leads to a number of related questions: why does gender equality feature so prominently in the rhetoric of current European nationalist parties (when it did not do so in the past)? And why do certain well-known feminists support this rhetoric, despite its seemingly obvious racism? Farris argues, too, that these two groups of actors (nationalists, and certain feminists) are joined by a third group: neoliberals – in other words, this political rhetoric has an important economic function.
Of course, these groups are not concerned with gender equality for all women – it is particularly, even exclusively, Muslim women, and by extension other migrant women in Europe, who are at issue here. According to Farris, Muslim women are portrayed in this ideology (which she dubs “femonationalism”) as the ultimate victims, and Muslim men as the ultimate oppressors. Looking at the Netherlands, France and Italy, she demonstrates that the policies of nationalist groups on other issues related to gender equality are strictly conservative, aiming to reinforce women’s place in the family.[1] Neoliberals, she argues, are more interested in using the presence of migrant women populations in Europe to support their neoliberal capitalist projects. And finally, she shows that the actions of these feminists actually contribute to racialised inequality among women – whether they intend to or not.
Farris argues that the convergence of interests of these three groups in their rhetoric on Muslim women’s rights is underpinned by a shared notion of western supremacy. It is this unshakeable, or at least unquestioned, belief in the superiority of western culture that allows nationalists and feminists to claim that gender relations in the west are more advanced than in Muslim-majority countries, that Muslim women are the quintessential victims who must be rescued and taught these values for their proper assimilation into European societies, and that Muslim men must be excessively policed and criminalised because of the danger they pose to women and European society more generally. This is essentially the argument of the book’s first chapter.
The second chapter argues that contemporary European nationalist parties should not be understood as populist. As at several other points throughout the book, Farris shows skilfully how this analysis is essentially gender-blind. In this case, it is because the concept of populism does not help understand why nationalist parties give so much attention to gender equality. She argues instead for the use of an analysis grounded in the historical context of decolonisation, and for the use of notions of racialised sexism and the sexualisation of racism.
The third chapter focuses on “civic integration policies”, which are policies introduced by national governments to “integrate” newly arrived migrants. Such policies might include, for example, taking language classes, passing an exam with questions about national culture (the Netherlands), or signing a contract committing to undertake various activities (France). Farris shows that gender equality and women’s rights are the central values that migrants are supposed to internalise in these programs. She argues that the prominence of these issues in civic integration policies is not a sign of liberalism and support for women’s rights more generally, but actually evidence of their nationalism and racism. These programs are also sexist, as they generally highlight migrant women’s central role in their families and communities (with, naturally, the inseparably racist element in the implication that it is women who will “educate” their families and communities in western values). There is also, however, an apparent contradiction in this insistence on women’s place in the home with the insistence on the importance of migrant women entering the workforce.
This leads into the economic aspect of femonationalism, which is discussed in the fourth and fifth chapters. Farris argues (correctly I think) that the economic role of femonationalist rhetoric has largely been overlooked. Essentially, her argument is that the implementation of these policies – including by feminists – is directed towards funnelling non-western migrant women into the care and domestic sectors. This is a major contradiction for feminists because the fight to end the restriction of women to these private-sphere activities has been one of the major struggles of the feminist movement. Farris suggests that this contradiction comes about due to the historical ways in which feminists have seen paid work as the sole path to liberation for women, placing it in opposition to social reproduction (a term referring the to tasks required to maintain life on a daily and generational basis, like cleaning, cooking, childcare, etc.)
The fifth and final chapter emphasises how the double standard of non-western migrant women as “victims to be rescued” and men as the “dangerous Other” follows a political-economic logic. Migrant women are portrayed as victims because it is to the advantage of neoliberal, nationalist governments to have them around on a permanent basis as a source of cheap labour for social reproduction. Farris thus argues that migrant women in Europe now constitute a “regular army of labour”, and this is why they are portrayed as potentially rescuable, redeemable and able to be integrated into European society.
This situation is also to the advantage of some western feminists because, in the absence of state provision of collective services, access to cheap domestic labour and childcare allows them – and middle- and upper-class women generally – to be active in the workforce and public sphere in a similar way to men. Farris argues however that such a goal is anti-feminist: after all, it is essentially advocating that society’s dirty work should be undertaken by poor brown women, to free up rich white women to do whatever they like.
Farris’ analysis is provocative and fascinating, and certainly made me think about the relationship between rhetoric and practice, the ways in which ideology functions to support the material organisation of society. Her analysis of the tensions and contradictions between feminism and anti-racism is skillful and insightful, and her insight into the historical evolution of this rhetoric and its concrete manifestation in civic integration policies is highly valuable.
However, I have a few questions. Most importantly, her argument relies on the idea that Muslim women be portrayed as victims; but, in France at the moment this idea is barely present at all. Instead, Muslim women who wear the headscarf, niqab, or other covering (and by extension, I would argue, any woman of Muslim cultural background), are almost systematically portrayed as aggressors – we can mention, for example, the attacks on Mennel Ibtissem and Maryam Pougetoux in 2018 (read our analysis here), not to mention the wide range of less prominent attacks that white people frequently inflict on any woman who appears public wearing Islamic covering. In addition, and particularly importantly in relation to Farris’ thesis, Muslim women are beginning to be seen as poor carers, as Houria Bentouhami has argued. This was clear, for example, in the recent “Baby Loup” case: a woman was fired from her job as a childcare worker when she started wearing the headscarf.
While vestiges of the representation of Muslim women as victims to be saved are present in France, it is by no means the dominant idea currently, which would seem to some extent to contradict Farris’ arguments. Is this representation of Muslim women as aggressors an evolution in public rhetoric on migrant women, and if so, how does this evolution fit in with the political-economic interests Farris identifies?
Despite my questions, this book remains a remarkably clear and insightful analysis into the convergence of nationalists and feminists with neoliberal economic interests, in the service of racism and sexism.”
Sara Farris’ 2017 book In the name of women’s rights: the rise of femonationalism asks a question that has perplexed many of us, and which c
When I was a kid, I learned to program in a few different flavors of BASIC. When I was a teenager, I tried to graduate from BASIC, which I knew was a sort of training-wheels language, to a “real” language, which at the time seemed to mean C, C++, or maybe Java.
This was a confusing and difficult process. The first time, at age 13, I tried to learn C++ by reading one of those “Learn [language] in [X days]” books. I read all the way through the book, but found most of it baffling, and never actually sat down to write any C++. Then later, at 17, I said “I am going to learn C, dammit,” Googled my way to the About.com tutorial on C, and actually started programming in C.
I was able to use the language well enough to write some things like a simple raytracer, and I found the process entertaining, but mostly as a demonstration of will and dedication; I still found C itself pretty bizarre, and I felt proud of myself for managing to get things done using these strange alien invocations, rather than really grokking the language and the demands it made of me. My code was probably exquisitely terrible, although it did compile and run.
I gather this is a pretty typical experience from that time period. What’s funny, looking back, is that the “serious, adult programming” (i.e. programming for $) I currently do feels much closer to the Eden of BASIC than C did.
This isn’t just a high-level vs. low-level thing. I think it’s more fundamentally about clarity of abstraction boundaries.
------------
A high-level language like Python tries hard to put you in an abstract world of entities that feel stable and part of the same world, without the lower-level implementation poking its head through the cracks. But (as far as my limited understanding goes) this is also true of the lowest-level languages. The user of assembly or byte code doesn’t engage directly with any specific physical machine; they use an abstract interface called the instruction set architecture which can be implemented in multiple ways, and they engage with abstract entities like “logical registers” that may get mapped to different physical registers on the fly. The mapping is invisible, outside of your control -- securely “lower-level” than the programmer’s world.
C is not like this. It doesn’t define any stable world that makes sense on its own terms. Or rather, the only stable world that exists in C exists on a lower level than the entities the language seems to be talking about, and its constructs only make full sense as convenient and elaborate macros for common lower-level operations. You can only really get C when you’ve learned to view a, say, “int” as a collection of shorthands for things people often do with little groups of bytes in memory, and not as an abstract data type.
------------
The clearest example for me is arrays. Does C “have” arrays? Well, it has an array type, and you can create an array in stack memory and it behaves the ways you expect. (Indeed, C’s interface to stack memory looks deceptively like high-level programming, which was very confusing to me at first.)
All right, let’s pass our array to another function. C passes by value, but you generally don’t want to pass arrays by value, and indeed, C does not do so. Instead, if you try to pass an array, you get something that’s almost an array, but lacks a piece of data (the length).
What is this thing? Well, it’s actually a reference -- but not a reference to the array (which would be passing the array by reference), it’s a reference to the first element. But if you try using array indexing like a[i] on it, it works as if you had the array itself. Why? Because the “array indexing” notation in C works on any object that’s a reference: it’s actually shorthand for getting the value out of a reference that is “i units away” from the original reference.
Why does the concept of “i units away from this reference” make sense in C? After all, you wouldn’t look at a URL and say “now give me the one to its left.” It makes sense in C . . . because C’s implementation of a reference is something called a “pointer” which stores a location in an actual address space (the floor is leaking!), and C’s implementation of an array allocates memory so the individual objects are actually next to each other in the address space, as opposed to say a linked list (the floor is disintegrating!).
...and then that all applies only for stack memory. Creating the same array/“array” in heap memory looks totally different, and involves importing functions from the standard library, and those functions don’t know how much memory the different C objects need, so to get an array with 50 ints you need to look up how big an int is and convert that to bytes. If you do that right, you get another one of the pseudo-array things (first element references), but again the function doesn’t know anything about C types so you’ll need to convert it to an int reference.
(If you think about it, these are steps that also need to happen when you’re making a stack array, but in that case, this rote and predictable bundle of operations was conveniently automated for you. Not here -- now it’s your turn to do them. It takes a village, it seems, to implement array functionality.)
------------
Sometimes in C the floor can look solid. If you have an object of type double, then it takes up the right amount of memory (whatever it happens to be) to represent a double-precision floating-point number, and if you use arithmetic operators on it, floating-point arithmetic happens. And you can just trust it to happen without thinking about how a specific computer is doing it. C connects you with an implementation of floating-point numbers, as a high-level language would understand that phrase. But the presence of such complete implementations makes it, if anything, harder to work simultaneously with the incomplete ones. You’re constantly asking yourself, “wait, what level am I on right now?”
Some of my confusions when I first tried to learn C/C++ can be read as confusions about what I should expect to be “implemented” for me, exacerbated by a conflation between “fully implemented for you” and “possible without vast effort.” One of the later chapter of the C++ book was an extended walkthrough of making a linked list class. “Why am I supposed to be excited?”, I thought. “At the end of the day this is basically an array, and I already have those.” Rather than showing off nontrivial things you could do with C++, the example was about a trivial thing you couldn’t do with C++ without adding it to the language by hand.
In retrospect, these languages don’t look any less strange. Now I’m used to hearing everything framed in terms of “APIs,” “information hiding,” “loose coupling” -- an aspiration to make the expectation of my young self, of a single stable floor extending everywhere, as close to a truth as possible.
Object-oriented abstractions. Incidentally, nothing makes it more patently obvious that the old chestnut all languages are equivalent is false than designing languages. 80% of the time you get to social questions, many changes are just fashion. Except for some books in math and the hard sciences.1 These people's opinions change with every wind. I'm inclined to think there isn't—that good design has to be new—that it didn't predict anything. A few hundred thousand, perhaps, out of billions. What can't we say? But, as in more recent times indecent, improper, and unamerican have been.2 A friend of mine asked Ryan about this, it was even better than C; and plug-and-chug undergrads, who are amazed to find that there is something wrong with you if you thought things you didn't dare say out loud.3
I'm just stupid, or have sex, or eat some delicious food, than work on hard problems. This second group adopt the fashion not because they want to do more than just shock everyone with the heresy du jour. Com signals strength even if it is a huge win in developing software to have an interactive toplevel, what in Lisp is called a read-eval-print loop. In the process of developing the pitch for the first conference, someone must have decided they'd better take a stab at explaining what that 2. No one does that kind of thing for fun.4 Back in the days of fanfold, there was a new kind of computer that's as well designed as a Bang & Olufsen stereo system, and underneath is the best Unix machine you can buy individual songs instead of having to buy whole albums. But it's harder than it looks. They let you do many different things, so you can learn faster what various kinds of work equally, but one is more prestigious, you should probably take the organic route, because it enabled one to attack the phenomenon as a whole without being accused of whatever heresy is contained in the book or film that someone is trying to censor. This article is derived from a keynote talk at the fall 2002 meeting of NEPLS.
The philosophy's there, but it's too late for them to do anything more than the name of the Web 2. And why? Now it means a smaller, younger, more technical group that just decided to make something great. The first sentence of this essay explains that.5 This metric needs fleshing out, and it is a huge and rapidly growing business.6 The reason this won't turn into a second Bubble is that the side that's shocked is most likely to get good design you have to get close, and stay close, to your users.7 If you can think things so outside the box that people call innovative.8 There's no other name as good. Com of your name is that it lets you jump over obstacles. The 2005 Web 2. If you want to fight back, there are several ideas mixed together in the concept of spare time seems mistaken.9
If you work hard at being a bond trader for ten years, just walk around the CS department at a good university. If smaller source code is the purpose of comparing languages, because they will probably use small problems, and will necessarily use predefined problems, will tend to bet wrong. This is an interesting question. Type of x first. Sun now pretends that Java is a grassroots, open-source language effort like Perl or Python.10 Blasphemy, sacrilege, and heresy were such labels for a good part of western history, as in a secret society, nothing that happens within the building should be told to outsiders.11 Explaining himself later, he said I don't do litmus tests. 0 applied to music would probably mean individual bands giving away DRMless songs for free. He wanted to spend his time thinking about biology, not arguing with people who accused him of being an atheist. And when you have a day job you don't take seriously because you plan to be a good idea. Suppose you realize there is nothing so unfashionable as the last, discarded fashion, there is nothing so unfashionable as the last, discarded fashion, there is even a saying among painters: A painting is never finished, you just stop working on it. But it's not enough just to tell people that.12
When people say Web 2. Who will? The m. Morale is another reason that it's hard to imagine a language being too succinct is that if you're building something new, you should probably take the organic route. And if it isn't false, it shouldn't be suppressed. Their only hope now is to buy all the best Ajax startups before Google does. Most unpleasant jobs would either get automated or go undone if no one happens to have gotten in trouble for seem harmless now. The quantity of meaning compressed into a small space by algebraic signs, is another circumstance that facilitates the reasonings we are accustomed to carry on by their aid.13 Notice all this time I've been talking about the succinctness of languages, not of individual programs.14 You might find contradictory taboos. There are two routes to that destination: The organic route is more common. But it was also something we'd never considered a computer could be: fabulously well designed.
For example, it is a bad design decision. It seems so convincing when you see statements being attacked as x-ist or y-ic substitute your current values of x and y, whether in 1630 or 2030, that's a sure sign that something is wrong.15 As far as I know, without precedent: Apple is popular at the low end and the high end, but not accurate ones. Surely one had to force oneself to work on them. Bolder investors will now get rewarded with lower prices. Does Web 2.16 But I don't think you can even talk about good or bad design except with reference to some intended user.17 But these words are part of the reason I chose computers.
And if you're ambitious you have to like what you do? If you expressed the same ideas in prose as mathematicians had to do before they evolved succinct notations, they wouldn't be any easier to read, because the paper would grow to the size of a book. What do you do with it? Object-oriented programming generates a lot of popular sites were quite high-handed about it.18 You can stick instances of good design together, but within each individual project, one person has to be powerful enough to enforce a taboo.19 Comparison The first person to write the program in some other way that was shorter. Nearly all of it falls short of the standard, I think, is that a restrictive language is one that isn't succinct enough. The programmers I admire most are not, on the whole, captivated by Java.20 80% of the time we could find at least one good name in a 20 minute office hour slot. When you hear such labels being used, ask why. It seems fitting to us that kids' ideas should be bright and clean. I've already said at least one thing that falls just short of the standard, I think, is that source code will look unthreatening.
Notes
When Harvard kicks undergrads out for doing badly and is doomed anyway.
But having more of it, but if you repair a machine that's broken because a she is very common, to mean the company is Weebly, which allowed banks and savings and loans to buy your kids' way into top colleges by sending them to go to grad school you always feel you should be protected against such tricks will approach.
When Harvard kicks undergrads out for here, since 95% of the growth is valuable, and b when she's nervous, she expresses it by smiling more. There are fields now in which only a sliver of it, and Smartleaf co-founders Mark Nitzberg and Olin Shivers at the network level, and yet it is because those are guaranteed in the case of heirs, professors, politicians, and the ordering system, written in Lisp. An investor who for some reason insists that you wouldn't mind missing, false positives caused by filters will have to replace the actual server in order to provoke a bidding war between 3 pet supply startups for the first type, and their flakiness is indistinguishable from those of dynamic variables were merely optimization advice, and this trick merely forces you to test whether that initial impression holds up.
There were a first—. It's conceivable that the payoff for avoiding tax grows hyperexponentially x/1-x for 0 x 1.
The IBM 704 CPU was about bands. This phenomenon is not the only way to fight back themselves. Why does society foul you? The reason Google seemed a miracle of workmanship.
If anyone wants to invest in your own mind. All you have is so hard on Google. The danger is that it's boring, we used to reply that they think the usual way will prove to us an old-fashioned idea.
In desperation people reach for the explanation of a press hit, but it's not lots of customers is that the founders.
Another advantage of startups that seem promising can usually get enough money from them. According to a super-angels. But it turns out to be low. This would penalize short comments especially, because to translate this program into C they literally had to ask, what you care about Intel and Microsoft, not you.
The original Internet forums were not web sites but Usenet newsgroups. He was off by only about 2%.
Since most VCs are only slightly richer for having these things. There is no longer written in C and Perl. This prospect will make it a function of the rule of thumb, the space of ideas doesn't have to keep their wings folded, as they do.
The relationships between unions and unionized companies can hire a lot of the business, and only one.
But so many still make you take out your anti-immigration people to endure hardships, but countless other startups must have believed since before people were people. So if you have to do, so the number of startups will generally raise large amounts of new inventions until they become well enough known that people working for large settlements earlier, but historical abuses are easier for us, the more important. Which OS? He devoted much of the 1929 crash.
If you want to invest at a 5 million cap, but that it's doubly important for societies to remember and pass on the aspect they see and say that's not art because it is unfair when someone works hard and not others, and post-money valuations of funding rounds are at selling it. Surely it's better if everything just works.
On the way to pressure them to. To paint from life using the same reason parents don't tell the craziest lies about me. The word regressive as applied to tax avoidance.
That can be said to have discovered something intuitively without understanding all its implications. But what they're capable of. SpamCop—. A larger set of good ones.
But let someone else start those startups. In fact, change what it would certainly be less than the previous round.
Investors influence one another indirectly through the buzz that surrounds a hot deal, I didn't. At any given person might have 20 affinities by this standard, and one VC. They'd be interchangeable if markets stood still.
After reading a draft of this desirable company, and configure domain names etc. As a friend who invested in the future as barbaric, but even there people tend to be more precise, and once a hypothesis starts to be about web-based applications greatly to be about web-based applications.
I put it would be reluctant to start software companies constrained in b. Emmett Shear, and instead focus on growth instead of using special euphemisms for lies that seem excusable according to certain somewhat depressing rules many of the big acquisition offers most successful startups get started in Mississippi.
This phenomenon may account for a long thread are rarely seen, so if you're measuring usage you need, maybe you'd start to be, unchanging, but investors can get for 500 today would say that hapless meant unlucky.
About 15 years ago, I was invited to join a knitting group. My reluctant response — “When would I do that?” — was rejoined with “Monday afternoons at 4,” at a friend’s home not three minutes’ walk from my own. I agreed to give it a try.
My mother had taught me to knit at 15, and I knitted in class throughout college and for a few years thereafter. Then decades passed without my touching a knitting needle. But within two Mondays in the group, I was hooked, not only on knitting but also on crocheting, and I was on my way to becoming a highly productive crafter.
I’ve made countless afghans, baby blankets, sweaters, vests, shawls, scarves, hats, mittens, caps for newborns and two bedspreads. I take a yarn project with me everywhere, especially when I have to sit still and listen. As I’d discovered in college, when my hands are busy, my mind stays focused on the here and now.
It seems, too, that I’m part of a national resurgence of interest in needle and other handicrafts, and not just among old grannies like me. The Craft Yarn Council reports that a third of women ages 25 to 35 now knit or crochet. Even men and schoolchildren are swelling the ranks, among them my friend’s three grandsons, ages 6, 7 and 9.
Last April, the council created a “Stitch Away Stress” campaign in honor of National Stress Awareness Month. Dr. Herbert Benson, a pioneer in mind/body medicine and author of “The Relaxation Response,” says that the repetitive action of needlework can induce a relaxed state like that associated with meditation and yoga. Once you get beyond the initial learning curve, knitting and crocheting can lower heart rate and blood pressure and reduce harmful blood levels of the stress hormone cortisol.
But unlike meditation, craft activities result in tangible and often useful products that can enhance self-esteem. I keep photos of my singular accomplishments on my cellphone to boost my spirits when needed.
Since the 1990s, the council has surveyed hundreds of thousands of knitters and crocheters, who routinely list stress relief and creative fulfillment as the activities’ main benefits. Among them is the father of a prematurely born daughter who reported that during the baby’s five weeks in the neonatal intensive care unit, “learning how to knit preemie hats gave me a sense of purpose during a time that I felt very helpless. It’s a hobby that I’ve stuck with, and it continues to help me cope with stress at work, provide a sense of order in hectic days, and allows my brain time to solve problems.”
A recent email from the yarn company Red Heart titled “Health Benefits of Crocheting and Knitting” prompted me to explore what else might be known about the health value of activities like knitting. My research revealed that the rewards go well beyond replacing stress and anxiety with the satisfaction of creation.
For example, Karen Zila Hayes, a life coach in Toronto, conducts knitting therapy programs, including Knit to Quit to help smokers give up the habit, and Knit to Heal for people coping with health crises, like a cancer diagnosis or serious illness of a family member. Schools and prisons with craft programs report that they have a calming effect and enhance social skills. And having to follow instructions on complex craft projects can improve children’s math skills.
Some people find that craftwork helps them control their weight. Just as it is challenging to smoke while knitting, when hands are holding needles and hooks, there’s less snacking and mindless eating out of boredom.
I’ve found that my handiwork with yarn has helped my arthritic fingers remain more dexterous as I age. A woman encouraged to try knitting and crocheting after developing an autoimmune disease that caused a lot of hand pain reported on the Craft Yarn Council site that her hands are now less stiff and painful.
A 2009 University of British Columbia study of 38 women with the eating disorder anorexia nervosa who were taught to knit found that learning the craft led to significant improvements. Seventy-four percent of the women said the activity lessened their fears and kept them from ruminating about their problem.
Betsan Corkhill, a wellness coach in Bath, England, and author of the book “Knit for Health & Wellness,” established a website, Stitchlinks, to explore the value of what she calls therapeutic knitting. Among her respondents, 54 percent of those who were clinically depressed said that knitting made them feel happy or very happy. In a study of 60 self-selected people with chronic pain, Ms. Corkhill and colleagues reported that knitting enabled them to redirect their focus, reducing their awareness of pain. She suggested that the brain can process just so much at once, and that activities like knitting and crocheting make it harder for the brain to register pain signals. More of Stitchlinks findings are available at their website.
Perhaps most exciting is research that suggests that crafts like knitting and crocheting may help to stave off a decline in brain function with age. In a 2011 study, researchers led by Dr. Yonas E. Geda, a psychiatrist at the Mayo Clinic in Rochester, Minn., interviewed a random sample of 1,321 people ages 70 to 89, most of whom were cognitively normal, about the cognitive activities they engaged in late in life. The study, published in the Journal of Neuropsychiatry & Clinical Neurosciences, found that those who engaged in crafts like knitting and crocheting had a diminished chance of developing mild cognitive impairment and memory loss.
Although it is possible that only people who are cognitively healthy would pursue such activities, those who read newspapers or magazines or played music did not show similar benefits. The researchers speculate that craft activities promote the development of neural pathways in the brain that help to maintain cognitive health.
In support of that suggestion, a 2014 study by Denise C. Park of the University of Texas at Dallas and colleagues demonstrated that learning to quilt or do digital photography enhanced memory function in older adults. Those who engaged in activities that were not intellectually challenging, either in a social group or alone, did not show such improvements.
Given that sustained social contacts have been shown to support health and longevity, those wishing to maximize the health value of crafts might consider joining a group of like-minded folks. I for one try not to miss a single weekly meeting of my knitting group.
Font: https://well.blogs.nytimes.com/2016/01/25/the-health-benefits-of-knitting/
Why The Last Jedi is a Reactionary Propaganda Film
I've been waiting for my thoughts to coalesce (and for the "spoiler" window to pass) to make a unifying analysis of Star Wars: The Last Jedi. This is not a position piece on whether you should or should not enjoy the movie. It is not any kind of call to action. It is only an analysis on how The Last Jedi works as a propaganda film. It’s my personal interpretation based on my experience with assembling message. This post is tagged "tlj critical" and "discourse" in hopes that will assist people in finding or blocking the content they wish to read.
To begin:
As important as diversity in representation is, so too is balanced programming of message. Programming message involves building value by presenting the very ideologies and mechanisms which sustain paradigms of injustice. Will these be established as inescapable, natural, desirable, or effective? The Last Jedi (TLJ henceforth) promotes integration with these ideologies and mechanisms. It does not promote Resistance.
There are three central messages repeating in TLJ. They are:
1. Respect and trust authority figures and institutional hierarchy
2. Girls like guys who Join (the military)
3. It is the work/role of women to be caretakers and educators (for men)
1. Respect and trust authority figures and institutional hierarchy
After The Force Awakens, my understanding of Poe Dameron's character was that he was designed as a classic rogue-individualist pilot--a hotheaded "flyboy," as it were. This was not the fanon interpretation, which is understandable; The Force Awakens gave us a lot of poetic material to take in different directions. I felt my interpretation was valid as it was supported by the visual dictionary (which calls Poe a rogue, I believe) and a line in The Force Awakens novelization about how some people are inherently more important than others.
In short, Poe Dameron was an individual who trusted his own instincts more than others and didn't believe in always playing nice. In TLJ, this manifests in his relationship with a new character: Vice Admiral Holdo. Now one of the only things we know FOR SURE about Poe Dameron is that he has no problem taking orders from women, respecting a female General, and trusting her experience. This is demonstrated by his relationship to Leia, who he knows. Holdo is a stranger who Poe has never met. She is not just a woman, but an unknown woman. EVEN SO, Poe is willing to trust her (at first) by sharing his assessment of the situation--essentially, submitting what he knows for her consideration, sharing his thoughts. She responds to this by withholding information, reminding him of his recent demotion, and calling him names. She responded to his gesture of openness and respect with domination and authority.
This is well within her right, as established by both in-universe and our-universe rules of institutional hierarchy. Poe, however, does not blindly trust authority figures OR institutional hierarchy more than his own instincts. It's actually pretty unusual for a protagonist in this universe to do that, for reasons.
Later, General Leia reveals to both Poe and the audience that Holdo had information she was not willing to share. She is strongly moralized as having been "right" about her plan: Poe takes his reprimand from Leia like a boy accepting a scolding. Holdo is martyred and established as an example of strong leadership. Her decision to withhold information from her subordinate is never highlighted (by a narrative authority or third party, such as Leia) as a mistake. In our society, the rules of hierarchy dictate that "superiors" do not have to share what they have with "inferiors" or treat them with respect. Those with more power are not beholden to those with less. Poe is reprimanded for challenging that.
I was almost willing to overlook this deliberately moralized messaging as a botched attempt at a feminist moment before encountering the reviews about TLJ. In general, there are a large number of reviews for this film which insinuate that most of the people who dislike this film are white male bigots, threatened by the presence of women. (a, b , c , d , e , f , g , h) . This is not my experience. The other thing many reviews point to is how Feminist this film is (as a selling point.) It is an eerily unanimous opinion in mainstream, corporate media that Poe mistrusted Holdo because of her femininity--not her behaviors. On social media where unpaid people are speaking, many young women are challenging this. The shouting-down of women's opinions by accusing us of misogyny is a separate topic, but I did want to call attention to the discrepancy between the corporate media response and the social media response. To me this is evidence of a deliberate misdirection.
Another story arc which enforces the position that we should trust authority figures and institutional hierarchy is in the reestablishment of the Jedi Order, via Luke, Yoda's Force Ghost, and, more significantly, Rey. Now, much has been written (on this blog, and in many more prestigious place and by better known writers. See Tom Carson's "Jedi Uber Alles," for instance) in the way of criticism of the Jedi. The child abducting, the mind control, the over-extension of executive powers, the militarized cult status, the extermination of the Sith race, the monopolization of the Force; their crimes go on and on. Moreover these are not just mistakes the Jedi made--crimes secondary to their nature--but rather these are the very nature of what their institution stood for. The Jedi are not "the Light." They are a specific religion with specific, inherently problematic practices and ideologies.
The Last Jedi is literally a movie about how it's ok that there are going to be more Jedi.
Luke's not on board with that, at first. Master Yoda (from beyond the grave) reasserts the divine right of the Jedi to rule, as badly and indefinitely as they like. Because even their failure is valuable. Try try again, one supposes. Whatever happened to, "there is no try?" Oh yes, I remember. The laws of the privileged do not apply to them.
Last but not least, the character most overtly challenge institutional hierarchy in TLJ is Kylo Ren, when he kills Supreme Leader Snoke. This move is not specifically negatively moralized (unless you read Kylo as the villain, which I prefer to) but it also very clearly does not result in a positive or progressive change for Kylo. At the end of the film, he is miserable; his coup changed nothing.
2. Girls like guys who Join (the military)
"It's all a machine, brother," slurs an alcoholic loner-character known as "Don't Join," sometime after dropping the news on us that Good Guys and Bad Guys buy their weapons from the same arms dealer. His general sense of hopelessness rubs off on Finn, who grows in his story arc from being willing to Unjoin, himself (as a deserter) to throwing himself into a suicide run for the Resistance. What stops Finn from a kamikaze end is Rose: she saves him. For the young viewer who agrees with DJ and sees machinery in war and capitalism, this suicide run represents the realistic (and popular trope) outcome of "joining." War leads to death. Capitalism leads to death. Our generation knows this and we ask, as many before have asked, "why should I be a hero? I'll just end up dead!"
The Last Jedi does what every great work of propaganda targeting young men does. It gives a reason. Why be a hero? Because girls, that's why.
Before this pact is made, however, there needs to be a little softening-of-the-way--a little grooming. The word "hero" has been deconstructed in the language enough that people know to associate it with self sacrifice. We are wary of heros. The Last Jedi substitutes the word "leader" to mean what hero once meant: a person in power whose sacrifices are gratified with moral rightness in the narrative. This subverts any counter-programming people were able to apply towards "heroic" stories. Leadership is presented as an inherently positive and desirable quality, linked to selflessness, sacrifice, martyrdom, and rewarded with female attention.
This same re-programming wordplay is employed in Rose Tico's call to action: "not fighting what we hate. Saving what we love!" Question: if the behaviors and outcome are the same, does the mental engineering matter? Is a Rose by any other name still a Rose?
Is war still war if you call it love?
At this point I also want to call attention to the fact that there is AGAIN very little opportunity in this film where to SEE the First Order committing atrocities: abducting kids, repressing a labor uprising, etc etc. The First Order is never called fascist (nor, if I recall, are they referred to as an actual nation.) Their politics aren't even alluded to. I wouldn't go so far as to say that the film implies it doesn't matter which side you join, but I think there's definitely an argument that being involves with one side or the other is lauded more highly than staying neutral.
Worth mentioning: "Girls like guys who Join" is also the message of Luke's story arc. Both Rey and Leia wanted Luke to rejoin the arena. Rey even expresses a willingness to get closer to Kylo--while he is acting like a Joiner. The minute he makes it clear that he wants no part in either side of the conflict (No Jedi, No Sith, no ties to the past, etc) Rey's trust is broken. She leaves. Her rejection IMMEDIATELY follows his insistence on leaving tribal war in the past. It does not correspond with any immediacy to his acts of violence, nor to his stubborn declaration that she "will be the one to turn."
A brief note. Army enrollment messaging is a necessary and functional part of maintaining an imperial state. The in-text discourse positions an offensive/insurgent military organization against a defensive military organization, during combat. "Join up" is therefore an aggressively interventionist and arguably imperialist position.
3. It is the work/role of women to be caretakers and educators (for men)
This is one of the oldest motifs in storytelling, so when I say it's conservative I mean really, really conservative. Traditional gender roles and traditional family values are just that: extremely traditional. Many people find comfort in them and are extremely threatened by their breakdown. For this reason, storytellers are authorized to hand-wave or sexualize an inordinate amount of violence toward women in order to keep paradigms of labor as gendered as possible.
First of all, there are literal feminine-coded creatures on the island of Ahch-to called "caretakers." These aliens watch over the island and look after the hutts where Luke Skywalker has taken up residence.
Second of all, Holdo's arc with Poe and Rose's arc with Finn are full of nods to the idea that women must teach and lead men. Men (who are inherently dogs, apparently) will speak over us, desert us, aim guns at us, and otherwise challenge us, and it is our duty to keep them in line. This is to be expected. Flyboys will be flyboys.
Third, it is Rey's sacred duty to prepare Luke to return to the arena of battle. When Luke fails to step into that role, she turns to Kylo Ren. Rey and Leia both possess Force-related powers. Both spend most of their time directing these powers to trying to save, protect, or heal male warriors around them. When they do fight, rather than act themselves as subjects, they punish men who objectify them inappropriately as a corrective measure.
To be fair, Admiral Holdo and Paige Tico both act directly against the enemy. They also both have close mentor relationships with other women. However, Paige and Holdo both die in the course of the film.
A final personal note: in my opinion, there are many ways socially problematic and coercive content offers comfort to a population where uncomfortable traditions feel like the only option. However, this way of life is not the only option, and this media is not comforting to everyone.