#*writes my entire code back to me in the error message (or what will fit of it)*
Explore tagged Tumblr posts
girls-and-honey · 1 year ago
Text
error messages i DARE you to be less helpful
2 notes · View notes
fetish4juggalos · 8 months ago
Note
Pretty please make a Jerome x reader and the reader is punk ‼‼
Jerome Valeska and a punk reader headcanons
sooo i’m back?? sorry this request was from like last year but i haven’t posted since last year and thought this would be a good way to start back my possible return. I have 2 actual fics in the drafts so if you’re interested in actual fic ideas submit a request or more head canons to hold me over pls.
Not my best work but i have been gone for nearly a year so i thought it would be good to get something out
I apologize in advance for spelling and grammatical errors.
Tumblr media
Jerome’s entire following is a large majority alternative people so you being punk isn’t really new territory for him
Jerome doesn’t really fit into a subculture himself. He doesn’t know or cares to fall under any titles but you being immersed in your subculture fascinates him
Punk is a subculture that completely goes against the ideals of being rich and following authority’s expectations which he can resinate with being a rebel and growing up a poor circus boy
Watching you diy things out of the unexpected is one of his favorite parts of you being punk. He loves watching you turn things from old technology or clothes/ materials and scraps into clothing, weapons, and accessories
Another one of his favorite parts is your hair and makeup. Watching you do your liberty spikes or even any of your less extravagant hairstyles always intrigues him as well as your messy makeup
He’s asked you to do his makeup like yours taking a small liking to the smudged smoked out eyeliner and even asking for you to do liberty spikes on his hair when it was a little longer
He’s not really thrown off by the idea of crust pants or a crust jacket. Let’s be honest Jerome doesn’t scream amazing hygiene and he probably doesn’t even notice you do this on purpose
He’ll listen to you talk all day about lace code, and punk culture and background, and music
Obviously he’s very fuck the police so that being one of your life mottos and beliefs is a big win for him
He’s seen you steal stuff from Jervis but never says anything and it drives Jervis crazy. You also steal stuff from him but he doesn’t care when he’s seen you turn it into something cool
If you do any kind of spray paint or graffiti work he thinks it’s the best shit he’s ever seen and loves to see either your tag somewhere when he’s out doing god knows what or messages that he knows is you
Had you spray paint Jermone was here on different buildings throughout Gotham and it ended up on the news
Because alot of punk clubs in gotham were Jerome followers and you’re close to him he’s appeared or come with you to some of your underground clubs to make guest appearances
He’s made you some patches and pins by taking material and writing on it with markers and attaching it to safety pins or letting you sew it on
Instead of calling you doll he calls you rag doll because of the way you dress and present
53 notes · View notes
diversetolkien · 5 years ago
Text
Hey yal! Below is a submissions I received regarding my Eol and Maeglin post. My responses are indented with the grey line! OPs are not!
——————————————————————————————————
First of all, it is absolutely necessary to draw attention to the things you’re drawing attention to. Whether you are “right” or “wrong,” or whether anyone is “right” or “wrong” is beside the point of the argument in my opinion: these issues simply need to be addressed! We need discussion and different points of view and they all need to be considered and we need them now more than ever. There are clear examples that are sketchy to say the very least: good guys are fair-skinned but the evil men ((, Haradrim) are not; orcs, clearly bad guys, are “swarthy” and “slant-eyed”. However, I do believe your point about Eöl and Maeglin on June 10 are off the mark. I believe you get too carried away by the title “dark” and hang your entire argument up on that. As far as I know, there is no textual evidence that Eöl was a dark-skinned elf at all.
Hello there! Thank you for the message. I do want to emphasize that I’ve been incredibly reluctant to answer this. As of resharing my meta I received a terribly racist message from a user on the website, and will tread cautiously with addressing any messages regarding Eol and Maeglin due to that. I completely agree that we do need discussion, and I’m open for it. This is the only way we can progress. But I won’t tolerate blatant racism.
I’m not accusing you of doing such, but for future references I want to make this clear.
While you believe I may get carried away on the aspect of dark or ‘swarth’, I think it may be important to explain what racial coding is, and also to remind you of Tolkien’s history with coding and with people of color. I talked about coding on my twitter, but in short coding is ascribing real world traits to fictional characters.
This includes attributing the historical and social context to the text to prove a point.
We’ve discussed how Tolkien has borrowed from cultures aside from his own, and with The Silmarillion published in the late 70’s, it’s not impossible to see how influence from America and racial influence there have played a role in his writings.
I also wouldn’t call it being ‘carried away’, when, as we both agree, Tolkien has a history of racism directed at people of color.
And at the same time, I think it’s important to note that while you dismiss the possibility of Tolkien considering Eol dark despite the use of swarth, you ascribe swarth to the orcs and their skin tone in the same breath. I don’t see why it’s impossible for the two to mean the same thing. Not when we do have a racist author who grew up in a very racist society already using dark skin to describe evil characers. Not when Eol’s narrative of the brute mirrors that of the orcs (ie: Celebrian and the Orcs).
And regardless if it is explicit or not, Eol is still coded. Again, we know this because we have canon stories that mirror his completely. This being, again, Celebrian and the Orcs.
We can also accept that Tolkien’s constant use of “dark” to describe evil things, and “light” to describe good things comes from a place of racism. So why is there such push back when we analyze that further?
Tolkien was known to ponder about problems, such as missing words in the Germanic languages. The term asterisk-word is coined by August Schleicher for exactly this purpose: words that should have existed in a (dead) language but aren’t recorded and needed therefore to be reconstructed. For example, Tolkien doesn’t have a recollection of how he came upon the word “hobbit” but to make it fit his Legendarium he made the asterisk-word *holbytlan, supposedly an old English word meaning “hole-builders” because hobbit language was akin to Old English. This word doesn’t exist in old English but could (and maybe should) have. Tolkien also wrote a long argument about a particular difficult passage in the Beowulf-poem which you can read in “Finn and Hengest.” Now normally I would never try to talk straight what’s curved, but Tolkien is a bit of a different case as I hope the above examples show.
The case of Eöl is a trick(s)y problem that stems from the “Prose Edda” written by Snorri Sturluson, an Icelandic poet who lived in the 12th century. This is thoroughly explained by Tom Shippey in his essay “Light-elves, Dark-elves, and Others: Tolkien Elvish Problem”. A quick summary is (but one really ought to read Shippey’s essay to understand it) that there are light-elves, dark-elves, dwarves and black-elves in the “Prose Edda.” Germanic scholars such as Nikolas Grundtvig and Jacob Grimm bent themselves in all kinds of shapes to explain the “error” that Snorri made. Are the black-elves the same as the dark-elves? Are both black-elves and dark-elves dwarves? What about twilight-elves? Tolkien pulls all the different strands of this one problem together and called it Eöl the Dark Elf. He could never have done this in an academic work if he wanted to be taken seriously, so his fiction seemed a great outlet to deal with this. Maybe it was all a private amusement because Tolkien never mentioned it as far as I know.
I personally can’t recall Eöl ever being called dark-skinned. He is considered “black” due to the armour he’s wearing made out of the metal galvorn that he made himself after coming into contact with dwarves (which also ties in masterfully with the whole elf-problem, again, see Shippey’s essay), but it’s not skin colour. Eöl was called the Dark Elf because he lived in a place where the sun never came. It was called Nan Almoth, the valley of the star pool, and he loved the stars, and loved to live in the twilight. The twilight-part is important in the above discussion as well.
I understand you are trying to be informative but please don’t be patronizing. Please do not explain to me what I already know. In the future, I will not be answering messages like this again. This is incredibly rude. You are assuming I don’t know about what I made a meta about, and that’s an insult to what I’ve written.
Please read my blog fully before you attempt to whitesplain something I already know. I understand debate, but there is a clear different between wanting to have a healthy discourse, and flat out patronizing me and treating me like a child.
Back the the point; The same, again, can be applied to the orcs. The orcs wear dark armor, were tortured by a creature who is often described as dark, reside in dark areas—but we know clearly that they are coded off of people given the description of them being swarthy.
The same attribute that’s given to Eol. And again, we have a clear historical context and in-canon context. And we know that Tolkien borrows from American history, and that England itself had a huge role to play in that history.
Finally, the citation from the Book of Lost Tales (BLT) where Maeglin is called swart is problematic to me. I think it’s as much proof against your point as it is in favour of it. Many, many things have changed since the BLT was written and turned into The Silmarillion (I mean Sauron was a giant cat at first!). The BLT version of Maeglin being “swart” is a discarded  version and in The Silmarillion, a way later revision, “his skin was white”. I think it would be wrong to conclude Tolkien discarded the swart skin of Maeglin as he realised it was racist. I think he simply hadn’t figured out the elf problem of the Edda when he wrote the BLT.
I think this is all negated by the fact that Tolkien has canonical characters of color, and that they have been coded. I’m having an incredibly hard time wrapping my head around why that’s accepted, yet when it comes to Eol and Maeglin it isn’t. We can accept that Tolkien has a history of racism with people of color, based on evidence far less than what I’ve provided. Maeglin’s light skin can be attributed to the fact that his mother was light. It’s possible to have a dark parent and be born light.  
And regardless if it was changed or not, it’s incredibly important to discuss it due to the fact that it was racist, and deserves to be brought to light.
I want to stress, again, that I think your work and thoughts are important, no matter if I or anyone else agrees or disagrees. It is of the utmost importance to address issues of racism, genderism and any other kinds of ism that is out there. Discussion is what matters!
18 notes · View notes
misscrawfords · 5 years ago
Text
The Rise of Skywalker: Part Two
Read Part One here.
One of the many things I’ve been grappling with over the 2 weeks since TROS came out is the validity and cause of my upset and anger. And it centres round the question: if Reylo had ended differently, if they’d had a happy ending, if Ben Solo had lived, would I still hate the film? Would I still be angry? Or would I forgive and overlook its other myriad flaws? And connected to those central questions is another that pressed upon me, namely: am I angry and upset because it is a bad film on multiple levels that insults its audience and breaks its own mythology in a way that is deeply distressing to female viewers and is fundamentally a poorly written film or do I only feel like that because I am a disappointed shipper? Am I only upset because I have got so attached to my HEA fluffy fanfic that I’ve lost sight of the story that canon is actually telling?
There’s a wider issue contained in these questions that I’ve been asking myself which is that there is a judgement implicit that responding to a film purely as a shipper is a bad thing, that it invalidates my criticism and my feelings if, in fact, I am simply an upset and disappointed shipper who wanted a happy ending. That’s an issue that is definitely worth pursuing but elsewhere.
It’s been two weeks. I’ve read multiple twitter threads, listened to bits of WTForce podcast (it’s very long... and was making me cry...), many reviews of the film, and today I finally started reading Valerie Estelle Frankel’s From Girl to Goddess: The Heroine’s Journey through Myth and Legend which is blowing my mind and giving me the confidence to say what I’ve known for a while:
My feeling that TROS is a terrible film on multiple levels - all of them actually - is valid. You may disagree and that’s fine. It’s only an opinion. But it’s my opinion and I stand by it. And, returning to the initial question that has been perplexing me - in fact I cannot separate the way the characters of Rey and Kylo/Ben were treated from the film’s other flaws. If Ben had lived, if Reylo had had a happy ending, if their relationship had played out differently, even if they had both died, yes, I would have been more inclined to forgive the film its many other flaws and misjudgements, but the fact is, if Reylo had been written in a satisfactory way then it would have been a very different film. Reylo is only one - one massive, egregious error - thing that contributes to the mess that this films. It is not the only thing that is enraging and upsetting but it is probably the biggest. I’ll talk about these other things in yet another post, but for now...
Let’s talk about Reylo.
tl;dr: Reylo is canon and the movie still sucked. Here’s a 5000+ word dissertation on why. Maybe don’t read if my opinions on this are going to make you sad/angry.
I’m going to break down my problems with Reylo in this film logically and honestly, I’m not sure I’m going to say anything that hasn’t already been said, but perhaps reading another perspective will help others who feel similarly? I’m guessing it’s going to help me if I write about it. We’ll see.
There are three problems. There’s the problem of the fate of Ben Solo. In a way, that’s the easiest and simplest one to deal with. Death was always on the cards as a possible ending for him. A tragic hero who commits terrible acts is redeemed in death by saving the world. The death of this character is... not a surprise and has always been an ending I worried about because I’m a shipper and I like happy endings over sad ones. And I’ve been very convinced by the meta and arguments of shippers who have argued passionately that Ben had to live. However, arguably the problem is not the death in itself but the circumstances and the context. So I’ll come back to that.
The second problem is that of Rey. Rey’s development (or lack of it) and especially her ending. Yep. This is a big problem. Far bigger IMO than the death of Ben which, while tragic, could have been beautiful and fitting.
Thirdly, is Ben and Rey together. Reylo. Their relationship and the way it plays out and the way, ultimately, all of this breaks the mythology being established in previous films.
So three very interlinked problems.
To summarise. In TROS Kylo regresses to being the Supreme Leader and trying to source dark power. This is not terribly surprising considering the ending of TLJ. Rey also regresses to someone who is training and who does not believe she is worthy of Luke’s lightsaber. This is surprising because Rey has already accepted her destiny and her role as a Jedi at the end of TLJ. There is no reason for her to feel insecure about it a year later in TROS.
Rey and Kylo connect through their Force Bond and fight. Their anger is understandable but these fights continuously rehash exactly the same material as what was covered in TLJ, leaving me feeling, well, not very much. Kylo is trying to tell Rey something about who she is (a question that was resolved in TLJ) and Rey is angry at him because of reasons. 
There are some good parts here. Unlike a lot of people, I really liked the fight at Pasaana. I felt it took something from TLJ and added something else. It was a rehash of the throne room fight over the lightsaber but while that conflict was entirely personal over an object that meant something to them but not the wider population (beyond what it could do as a weapon), the same conflict here was over a transport ship containing real people and Chewie (apparently), a character of importance to both. So what happened is that their inability to reconcile with each other and meet half way is manifested in a completely balanced conflict which has a living cost. Chewie dies! Rey kills someone dear to her - accidentally, sure - but she now has a body count showing how truly destructive her fight with Kylo is. It is a symbol of how necessary it is they work together and find balance. Daisy Ridley’s acting here was great and I felt genuinely shocked. Shocked that Rey plunged so immediately into a kind of darkness that put her on a level with Kylo and shocked that Chewie was killed off so casually without warning or build-up - a real casualty of war and the raised stakes in this film. I thought it was a great way to build on TLJ and extend it.
So you can imagine how I felt when Chewie’s death was retconned.
Pretty similar to how I felt when C-3PO got his memory back.
I will probably talk more about this in Part Three, which is my wider issues with the film, but it’s sort of unavoidable mentioning them here because of course the way the film invalidates serious emotion by showing in so many ways that Death Is Not The End and is consequently meaningless impacts on Reylo and the fact that Ben dies.
Another nice moment was the snatching of the beads through the Force Bond. I mean, Kylo literally stole some fertility-coded beads from Rey’s neck!? Uh, this subtext is rapidly becoming text, as they say. Pasaana was weird though, right? Rey talks to children, is at a festival of life, she is fulfilling her role of becoming a symbolic mother which she started in TLJ and which fits the child Jedi at the end of that film (who was never seen again but we’ll deal with that later) and Kylo receives a gift of a necklace (a feminine symbol) from her immediately afterwards... This is pretty hot and heavy symbolism. Of their union and a future involving children, real or metaphorical.
And Rey learns how to heal with the Force, trying it on a giant worm as practice. This fits with her heroine’s journey - she is not using the lightsaber (a symbol of masculine power) but is using her power to preserve and save, which is feminine power. So far so good. I mean, it’s a shame they are wasting all these Force Bond sessions backtracking on TLJ to the extent that instead of enjoying their interactions, I’m going “Yeah yeah yeah okay but we’ve already done this but better”. But there’s still development so it’s okay and sometimes it’s even kind of hot.
Rey Palpatine. 
Oh dear.
Look, it’s not the thing itself. The union of a Skywalker and a Palpatine, the balance coming from the union of two great families on either side of the Force, is honestly not a bad idea at all. Ben as the Skywalker with a bit of darkness in him balanced by Rey the Palpatine with a bit of light in her. BALANCE. It could be beautiful. 
Unfortunately it isn’t. Rey’s lineage was resolved really well in TLJ. Rey Nobody is a great idea for all the reasons everyone already says - opening up the Force to everyone instead of keeping it as a kind of aristocratic lineage etc. Retconning this is really unnecessary and also sends a terrible message to the audience, especially women, as everyone has already discussed to death. Rey is literally told her power comes from a creepy old man who won’t stay dead instead of something innate within her. Instead of letting the past die, we are digging it up like an overzealous and ignorant 19th century British aristocrat let loose in Egypt with a pick-axe and period-applicable racism. Rey is then told that her parents sold her and abandoned her… to protect her. Another great message. And apparently Luke, Han and Leia all knew this?????? Honestly, I was confused by all this when I was watching the film but from what I’ve read afterwards it seems this is the case and in which case not only does that not make literally any sense at all in terms of what happened in TFA and TLJ but also has pretty awful implications for the OT characters and how they related to Ben. 
As I mentioned, it is also unnecessary for the plot for Rey to be a Palpatine. If Palpatine has to come back (which he doesn’t but okay whatever) then surely it’s enough that Rey is extremely strong in the Force for him to either want to kill her or want to control her? Like, literally that’s what he did to Anakin. Why does she have to be related to him unless the film is making some very unfortunate conclusions about blood. Good blood, bad blood… yeeeaaaaaah, this isn’t great as a message. It could be but that’s not the story the first two films have told. Also does Palpatine want to kill her or control her? Like, I’m genuinely not clear on that. I’m not sure he is. I’m not sure the film is. What is actually going on? Also if Palpatine has been controlling Ben his entire life why the hell didn’t he control Rey? Surely it’s easier to invade and control the mind of his own flesh and blood than that of another random Force child he isn’t related to? Who is surrounded by other powerful Force users? When Rey is all alone? Like if Palpatine is able to build up an insanely massive army that nobody has noticed across the Galaxy while still being kind of dead, surely he can access the mind of Rey on Jakku? Also, how did he manage to impregnate a human woman while being sort of dead and old? On both a mythical level and on the level of a question of taste and plausibility, HOW??? 
THIS PLOT MAKES LITERALLY NO SENSE WHAT IS GOING ON AAAARGGGHHH 
And breathe. 
So anyway, Rey Palpatine. Rey and Kylo fight and Rey kills Kylo. It didn’t really work for me though I’d have to watch again to figure out precisely why. This epic, wet fight just… wasn’t quite as epic as I expected it to be. Maybe it was because Finn was randomly there. Maybe it was because it didn’t have the dialogue from the trailer. Maybe it was because I was just tired of watching them fight and not seeing their relationship progress during the film when it had already progressed beyond this in TLJ. And she kills him like it’s a calculated thing when his guard is down and this whole thing is a mess. Now, it’s coming back to me! The order of events don’t make sense. The characterisation doesn’t make sense. 
Kylo and Rey are fighting. Leia gives her life force to communicate something to her son and dies in the process. I don’t quite understand what she’s doing and why this means she has to die. She’s not force projecting like Luke did. How is this different from in TLJ when she says “Ben” then and he waivers about killing her? She was fine after that! I get that they’re working with what they could for Leia but nevertheless, if you’re going to include it in an actual film, it’s still got to have internal consistency. Not that this film cares. Anyway, Leia dies to make Kylo pause and then Rey kills him which seems very rushed and kind of mean but whatever. Then Rey immediately uses Chekov’s healing to bring him back to life and when she does he’s Ben without a scar. So this is all confusing to me. Did Leia redeam him by saying “Ben”? Did she do anything else that makes sense of her dying? Did Rey killing Kylo bring Ben back? Was it Han’s memory? A combination of all these factors?
But the order strikes me as off. The death of Kylo Ren to allow Ben Solo to live is good. Excellent content. But all that is needed to do this is for Kylo to die – meaningfully (which being randomly stabbed by his lover at the moment when he was changing does not quite feel to me) and be brought back to life – meaningfully. I’m not saying what Rey did wasn’t impressive but I don’t remember being overawed by the music and the cinematography here. This is in many ways, or should be, the turning point in the entire ST: the moment when Ben Solo is reborn. And the exact moment of it happening is uncertain. And does he need the moment with Han’s memory afterwards? I’m not saying it wasn’t very touching to see Han and to have their moment together but it nevertheless didn’t quite gell. Like so many things in this film, it’s a nice moment that is over too quickly and doesn’t quite hang together with coherent plotting and characterisation. The entire sequence is rushed with too much happening – fight, Leia, death, healing, Han, lightsaber, RANDOM FINN etc. etc. And in fact, this moment that should be climactic is then later overshadowed by later Ben healing Rey in the same way, a completely narratalogically meaningless act. But more on that later. 
And I realise that in my hurry to get to this fight, I’ve forgotten Dark!Rey. Dark!Rey, like Rey Palpatine, is an idea that could and should be amazing and, apart from the cool graphics and a moment of gasp for effect, isn’t and fundamentally doesn’t work. Rey is struggling with her inner darkness throughout this film, something that was suggested in both TFA and TLJ, so I’m very much on board with it, and I think it’s important to see women on screen be angry and especially angry in a wild, ugly way. I think Daisy Ridley did a great job with that. But TROS attributed this anger and darkness to Palpatine rather that all the myriad and understandable reasons that Rey had for being angry. Perhaps that could work in some contexts as a metaphorical way of showing her anger but Palpatine is too present physically for that to stick. Instead, her characterisation is given wholesale to her genes and a male influence. This is… not great.
Confronting the dark part of one’s self is vitally important in the heroine’s journey. Only when the heroine has reconciled the dark parts of her psyche can the heroine be whole. TROS has worked out that this important but then hasn’t really known how to execute it. The physical manifestation of Dark!Rey for Light!Rey to fight is hellishly unsubtle and is also over so quick you quickly forget that she’s there. (Again, momentary effect is prioritised over anything that actually makes sense in terms of storytelling.) As a manifestation of Rey’s inner anger, she’s completely pointless. Rey fights her quickly but fighting Dark!Rey doesn’t result in Rey unifiying her dark impulses with her heroic self. She still has dark impulses throughout the film! In fact, she never succeeds in fully reconciling them. If defeating Dark!Rey had been a striking and climactic moment then that would work, but it doesn’t. She continues to fight Kylo straight afterwards and Kylo himself is in some respects (certainly in TLJ) a physical manifestation of what Rey fears and needs in herself. It is Kylo who is truly Rey’s dark double in TFA and TLJ. He tells her what she knows and cannot admit, forcing her to confront that in herself. He attracts her yet repels her. According to what is set up in TFA and TLJ, until Rey can both kill Kylo and reconcile with him, she is not conquering and reconciling with that part of herself. After all, they are two halves of one protagonist. But in TROS Kylo no longer seems to take that role, or not coherently. For example, he delivers information (“Rey, yer a Palpatine lol”) that she doesn’t in fact know. So it doesn’t work. And yet it also doesn’t work that Rey fights Dark!Rey and then immediately goes off and fights Kylo! One of those fights is redundant, perhaps both. If Dark!Rey had been a real character who does stuff, who tempts Kylo, who replaces Rey (Odile/Odette-like) then this would be meaningful. But she doesn’t. I know that some people are arguing that Rey in the subsequent fights is possessed by Dark!Rey but honestly? I did not see that in the film and I just do not think the film is sufficiently coherent to be that subtle about something that is such a major plot point! So she continues to struggle with darkness even after supposedly defeating Dark!Rey which is just nonsense in terms of mythology. She struggles all the way up to her confrontation with Palpatine. 
So let’s get to that. Look, I’m going to be completely honest here: I have no idea what was going on. Palpatine was rigged up on a crane on creepy evil villain life support, there was a giant jam jar filled with pickled Snoke heads, Rey was there, Ben showed up having thrown away one lightsaber but then found another two lightsabers (there were a lot of lightsabers, I couldn’t keep track of which was which and why they were significant), the Knights of Ren were there to do a soundcheck for their upcoming gig IDEK, Finn wasn’t there which made a change and Palpatine wanted Rey to kill him so she would become super powerful until he didn’t want her to kill him. He was tempting her and used the standard threat of “I’m going to destroy the universe unless you take on these super dangerous powers to stop me but if you do then you’ll be evil yourself mwhahaha”. I’m not sure really how that benefits him. Was his end-game plan to build up a massive Sith Empire for his darling granddaughter to rule, ignore her for years in favour of corrupting Ben Solo via some dude called Snoke and then reappear from nowhere in order to die again so she could rule? Because that’s a really, really flawed plan. Like, my cullender is less holey than that plan. I may have got this wrong. But before anyone jumps in to “Well, actually” me, my point is valid: I’m an intelligent viewer who spends plenty of time thinking about SW. If I couldn’t follow the main reveal plan in the climactic film of the ST, then… that is a flaw in the writing and conception. It shouldn’t be that difficult!
 Anyway, back to Rey. She is being tempted yet again (which she shouldn’t be by this point in the film or trilogy) and, briefly (though I’ve mostly given up on hope for this film by this point) I am engaged by her quandery. I think it would be really interested if she takes the power offered and fully embraces her Palpatine heritage – she becomes a Sith in order to save the lives of her friends! Perhaps Dark!Rey was just a warm up to seeing the real Rey transform into Dark!Rey. Then Ben has to save her! As she has saved him from being Kylo Ren, he will save her from being Dark!Rey! Balance. So I think that could be interesting and it raises some interesting moral questions about whether doing something bad for good reasons is ever justifiable. But of course Rey resists! Rey is not allowed to actually do anything bad in this movie! It’s infuriating! Rey is completely good. I think the message the film thinks it’s giving out is that Rey is more than her ancestry – that she is good despite being a Palpatine, that everyone has the power to move beyond their background. Unfortunately, that message was already there when she was Rey Nobody! And the actual message is that Rey is a static, pure character who despite apparently containing darkness is never in any way truly tempted by it or gives into it. Any narrative tension over whether she will succumb or do something interesting is very rapidly dismissed. Just as Chewie’s death is retconned and C-3PO gets his memory back. 
Anyway Ben arrives and they somehow have two lightsabers (???? whatever) and stand and face Palpatine and I think at this point we need to talk about how this is just waaaaay less impressive on every level than them facing Snoke in TLJ. There was tension there and uncertainty and when they fought together it was genuinely breathtaking and surprising. There was no surprise about Ben and Rey facing Palpatine together, but there was a tired feeling of “Oh look, we’ve got to face off against another creepy old man who wants to hold onto power for evil after his time is well over. Oh well, I guess if we have to…” If nothing else, this sums up the Millenial experience very well! Ultimately, not only is Palpatine a confusing final villain, he’s also a boring one. The Chancellor in the PT was interesting on a political level, the Emperor was truly creepy as a foil to Darth Vader in the OT, but this fossil on life-support is neither scary nor original nor even particularly threatening.
That’s the thing with escalating the threats continuously – it becomes meaningless. Making the Boss bigger and badder and threatening the Universe instead of the Galaxy doesn’t make the drama more exciting, it just makes it less believable. It looks very impressive to have the entire sky filled with ships and the threat of Palpatine destroying everything but it’s also ultimately meaningless. A massive threat just means a massive reset button or deus ex force lightning. Superhero movies are very guilty of this terrible storytelling, so is Doctor Who. First London faces an alien threat, then England, then the planet, then the Galaxy, then the Universe… and where do you go from there? The audience doesn’t care about the world at large, they only care about our plucky little heroes and their lives. If Palpatine had said “I have Finn and Poe and if you don’t take on these Sith powers I’m going to murder them” the effect would have been the same, maybe even better because Rey’s dilemma would have been even more personal. Hey, another interesting idea: “I have Ben. Only way to save him is to adopt Sith powers!” Anyway.
So this confrontation is yet another less impressive copy of the throne room scene in TLJ. The lore also gets confusing here. Ben and Rey are tortured which makes no sense because doesn’t Palpatine want Rey alive? Not sure what he’s trying to achieve here except it makes our heroes look powerless. Then Rey takes on the force lightning and does some snazzy special effects to win the war very easily. So easily that you feel no emotion whatsoever at how easily this massive army of ships is instantly wiped out. (Side point, but I’m guessing there were lots of people on those ships and Rey’s just killed them all? And considering we’ve just got an admittedly half-baked but still a plot about the defection of storm troopers, isn’t this just a bit concerning? But Rey can do no wrong and it’s all for the greater good because this is the Light Side of the Force and she is All The Jedi so I guess we’ll just pass over this casual genocide on the part of our heroine.) This seems to kill Rey despite Palpatine telling her to do it to get more power a few minutes earlier. No seriously, isn’t this what happens? I’m so confused. At which point Ben force heals her as she force heals him and whereas she was fine and dandy after doing it, it kills him.
Which… okay. Is a thing that happens. It’s hella inconsistent. And makes no sense. But okay, I mean, okay. I wasn’t even sad. I was just like “…right.” And fortunately the film immediately moves on and completely fails to acknowledge Ben’s existence while triumphant music plays. So that’s a thing.
Remember how I said at the beginning of this meandering dissertation that I was always aware of Ben dying being a possible ending but it was the execution that failed here? Right! Well, the thing is that every time a death happens in the context of a hero’s journey, it’s got to mean something. In a world where people can be resurrected and, uh, SW is very much that world (or it is in TROS), then you can’t just die for no reason! And neither Rey nor Ben’s deaths made sense. Rey absolutely needs an underworld journey as part of her heroine’s journey but her death near the end of the film does not fulfil that criterion. An underworld journey is a way for a heroine to shed part of her behind, to learn something, and to confront herself. The cave scene was Rey’s journey to the underworld. Arguably, the scene on Pasaana where she learned force healing was another type of katabasis. Heck, you can argue that when she finds the lightsaber in TFA it’s a katabasis or when she ships herself to Ben in a coffin it’s another. Like. Rey has lots of metaphorical underworld journeys. But when she dies at the end of TROS she has already reunited with Ben, she has no darkness in her that needs to be purged because she never waivered from the light and when she is brought back she is the same person she was before. Unlike Ben who comes back from the dead literally a different person. So Rey’s death makes no sense either in terms of the magical world and powers in play but also for her heroine’s journey. Maybe she could have collapsed. Maybe the effort should have drained her and Ben of their Force powers – a sacrifice for using powers they shouldn’t have touched. That would have made sense and would have been entirely fitting. But death? Nope.
And Ben’s death consequently makes no sense. Force healing has been established within the very same movie to have no real consequences on the user (also similarly established in The Mandalorian) so Ben’s death makes less sense than anything else in the entire film. The internal logic of the film says that there are no consequences for force healing. And then it kills off someone who does it. Sadness is not the reaction to that; confusion is. And then on a mythological level, Ben shouldn’t die. Kylo has already died. And Ben has been reborn!  I know it’s a meme, but Ben has done nothing wrong. Kylo has been punished for his actions and what is left is Ben. This is very, very clearly spelled out within the film. This makes Ben’s death a senseless tragedy that makes no sense, a final death in a film that has continually shown that death is not real or an ending. Except for Ben Solo. Because… I don’t know? I’ve managed to go 4812 words without mentioning redemption but I guess I can’t avoid it now. I’m actually not a big fan of redemption because it gets all thorny and becomes about morality and specifically Christian morality and I’m just… I’m tired of that. I’m a classicist and stories of classical mythology and classical heroism have nothing to do with redemption and being good and evil and I really see the Skywalkers as a kind of Greek tragedy lineage rather than people who have to be redeemed. I know Vader died changing his mind and killing the Emperor for his son but I don’t see that as redemption. That was a man who had done many awful things making a choice out of love at the very end of his life. And again, Ben saved Rey – this was an act of personal love and had nothing to do with the Galaxy. Redemption seems to be an active, ongoing thing that is about more than the purely personal. Vader wasn’t redeemed and neither was Ben – because he didn’t have a chance. And it all gets confused because, as I keep saying, Kylo Ren died!!!! On a mythical level, that’s all that’s needed! Ben Solo, on a mythic level, has nothing to prove, nothing to atone for, nothing for which he requires redemption. On the level that SW is also a story of politics, if Ben had lived, he would have had to reconcile his past actions as Kylo Ren with his present experience as Ben Solo – and it would have been fair if he had to pay a penalty in the human world. But not the death penalty. Because he has already paid that. Ben succeeds in reconciling and facing off his inner darkness in the way that Rey does not in this film. But he is then punished again and dies needlessly and shockingly in order to save Rey, who also shouldn’t have died.
It’s very unsatisfactory. On a mythic level, it really doesn’t make sense.
And I haven’t even mentioned the whole thing about if they are dyad (lol I keep reading this as dryad and getting a very weird set of mental images) or two halves of a protagonist or soulmates or whatever you want to call it where if one dies the bond just remains as a wound. This is a scenario where Rey and Ben have been very clearly set up as a pair animus/anima hero/heroine who belong together whether that is in life or death. I’ve just been reading about Brunnhild and Siegfried from the Nibelung Ring Saga – they both die at the end when they’ve finally been reunited but they are united in death. It’s sad but their death is inevitable after what’s happened to them and it’s sort of uplifting because they are together. This could definitely have worked for Rey and Ben. And considering death doesn’t stop you appearing multiple times and even doing cool stuff like lifting ships out of the sea, it wouldn’t even have been very sad. The mystical hero/heroine who cannot remain in society once their journey is complete is not uncommon. Look at Frodo going off with the Elves in a metaphor for death at the end of LotR where the more down-to-earth Sam is able to stay and rebuild. It would make total sense for Ben and Rey to be unable to integrate with society at the end of TROS whether that means simply exile or death. So long as they are together.
Anyway, they’re not together which makes the whole thing horribly unbalanced and unnervingly wrong on a profound level. The myth is broken! It simply does. not. work.
But if the ending for Ben and Reylo as a whole was disturbing, false, internally inconsistent and emotionally empty, that’s nothing to the ending Rey gets. Lots of people have already written about this so I’ll try to be brief. Rey has no connection to Tatooine. Rey is not allowed to grieve. Rey regresses to a childhood state, her very definite, spelled out future as a symbolic mother being absolutely aborted. Rey takes as a family name one that she has no personal connection. Rey is left with absent friends and nobody but the ghosts of Luke (who she didn’t like) and Leia to talk to in the role of weirdly incestuous sterile parents. So I guess this is a win for the Luke/Leia shippers?
Okay, I just need to rant a moment. (Yes, this is 5556 words of ranting but you’ve got this far – indulge me?) I’ve seen several takes from people I follow who aren’t Reylos saying that this is a great ending for Rey because she has a family and I’m just like ARE YOU EFFING SERIOUS?????? Are you ACTUALLY trying to tell me that living alone on a barren, desert planet reminiscent of where she lived as a child before she heard the call to adventure, where she was symbolically asleep with nobody but the GHOSTS OF SIBLINGS for company and ABSENT FRIENDS is FINDING A FAMILY???????????? JUST KILL HER ALREADY – she’s ALREADY DEAD!!!!! You want to make me feel Rey at the end even if Ben is dead? Show her surrounded by her found family in the Resistance and show her WORKING WITH CHILDREN?????????????? IT. WOULD. NOT. BE. HARD. TO. DO. THAT. AND. MAKE. IT. UPLIFTING. But this -this is just painful, truly painful and insulting. And don’t give me this crap that she’s not living there, she’s just there temporarily to bury the lightsabers and leave and go back to her friends. WHAT ABSOLUTE BULLSHIT. This is the ENDING of a NINE MOVIE SAGA. The ending matters???? And the ending is of Rey alone with the droid she rescued two movies back staring at some binary suns that only matter to the audience and not to her. THE FILM DOES NOT TELL US THAT SHE IS GOING TO LEAVE AND MEET HER FRIENDS. THE FILM DOES NOT TELL US THAT. IT DOES NOT IMPLY THAT. So this is a bloody stupid argument.
Yeah, I cracked. I don’t regret it. This is so infuriating I actually have literally nothing to say about “Rey Skywalker”. Like, whatever. The film’s already done its worse. Just… whatever. Who cares at this point? It’s meaningless. I laughed in despair at the cinema screen and was glad it was over.
 The fact is, according to the heroine’s journey, this isn’t the end of the story. It makes sense that within 24 hours of the film premiering, AO3 was filling up with “fix-it fics” where Rey goes to the World Between Worlds to get Ben back. Because that’s what heroines do. They save their loved ones. They do it patiently and through endurance. And they always succeed. And unlike heroes who go to the underworld to save their wives (cf Orpheus), heroines who go to get their man succeed. This story needs Rey, like Psyche, to go save Ben. She hasn’t finished her heroine’s journey. In fact, she is in many ways back where she started. Her attempts to integrate and confront her darkness have been confused and ultimately meaningless. She has not unified permanently with her lover yet. She has not become either a literal or symbolic mother. There is a stage in the heroine’s journey where she retreats to where she comes from for reflection and growth. That is acceptable. But that is not the ending!!!
And to place this ending of the film, with Rey smiling and saying “Rey Skywalker” as if this means something and some triumphant music over the top alongside what so many viewers feel instinctively, namely that the myth is incomplete and broken, leaves the audience – or at least it left me – feeling cheated and empty and bemused about why it feels so wrong. Ultimately Ben dead and Rey pregnant would make more narrative sense than the sterile and barren and infantilised ending we were given. And that was just about the worst case scenario of bad writing that we ever thought could happen. 
The myth is broken. Good night.
(Tune in soon to the much shorter Part Three where I discuss everything else that isn’t Reylo related that is wrong with this movie.)
39 notes · View notes
jeremy-ken-anderson · 5 years ago
Text
Fixing a bug
After a while banging my head against a bug - the dreaded NullReferenceException - I went back to best practices:
1) Think about what the bug means.
NullReferenceException means something in the program is trying to get/present info from somewhere else and the place it’s talking about straight-up has no info in it or doesn’t exist.
The most common place where this comes up in Unity is when you’re using their convenient drag-and-drop system to make references to gameObjects and you miss one of the “slots” you’ve made for yourself and leave it empty. Now your code is trying to manipulate a gameObject but nothing’s there.
Sadly, this bit didn’t solve my problem. I couldn’t find any empty slots and it really did look like the variables the system was calling bad were set up properly.
2) See whether the bug tagging was accurate.
For errors involving not having your {} lined up or not having a ; somewhere, the error messages can be wildly inaccurate about where the mistake actually happened. So I commented out the bit it was complaining about and ran the program again.
For those who don’t know coding stuff, if you type // before a line of code that bit won’t be part of the actual code the computer tries to compile. Programmers use this to leave themselves/each other comments about what bits of their code do. You can also use them to temporarily turn a line of code into a comment instead of deleting it, so that you can put it back in (delete the //) easily. When you’re changing a bunch of code you can “comment out” entire blocks of your code to keep them preserved as an easy backup if your new plan falls apart. That’s what “commenting out” means.
The error message disappeared. Okay. So it really was throwing a fit about that specific line of code.
3) Get More Specific.
My code was saying “thingOne = thingTwo” and it was throwing an error. So was the problem in thingOne, in thingTwo, or somehow in the relationship between the two of them?
For this I used Debug.Log, which lets you write little messages to yourself. With the line of code still commented out, I wrote a line of “Debug.Log(thingOne);” and tested that. It worked fine. I wrote a line of “Debug.Log(thingTwo);” and tested that. It broke.
So thingTwo was the problem. (Obviously these weren’t actually named thingOne and thingTwo. The variable names have been changed to protect the innocent)
4) Finally, I changed how I was getting access to thingTwo. Honestly I still don’t see why the way I had it before was a problem, but the new way is more direct so it’s probably more stable going forward anyway. I tested the Debug.Log again and it worked, so I uncommented the line I’d commented out, changing the language for how I was getting to thingTwo to match what I’d fixed, and at long last that got rid of the bug.
As huge as all the description is, once I got going on this “best practices” plan I bet the whole thing only took a couple minutes. And it got me out of a problem I’d been banging my head against for upwards of an hour. And that’s why they call ‘em Best Practices. Because they’re better than the other practices.
2 notes · View notes
marshmallowprotection · 5 years ago
Note
Have you decided what happens to assistant Lila if the MC that comes later does Sevens route? Does she get to stay with SE Saeran?
Oh, I do know what’s going to happen to Assistant Lila. I’ve had that planned for quite some time but I haven’t yet gotten the chance to write it out. Let me explain it out. 
It’s actually Assistant Lila (although, when I write this bad ending, her name will be coded just like Unknown is to the MC in the apartment, so it’ll be Wisteria to everyone) who suggests the idea that they pick someone specifically who could romance Seven. Her plan is to let that traitor get his guard down long enough to let himself like somebody, and the moment he thinks he can open himself up, Unknown can swoop in and steal the MC, and use her as leverage to utterly destroy the RFA and get his revenge on his enemy all at once. 
If the MC is in danger, he’ll give himself up to Unknown, and then Unknown can use him to learn everything possible about his life, and then it would be possible to infiltrate the RFA’s ranks and take them down from the inside.  
Basically, she incites and plans for an ending that would be a blend of Seven’s BE1 and BE3. She’s the one that goes out and looks for people that would fit the bill. She’s got more social skills than Saeran, and she uses her sweet disposition to lure people into a false state of security, which gives Unknown plenty of little openings to get all the information he needs on their targets. I mean, whoever is going to think a sweet lolita wants to steal their information? She plays her part to a T. 
For some time, she and Unknown are actually making progress. Things feel… right. She likes to be at his side and he doesn’t mind what she brings to the table with him. She’s the only person he’s ever shown his vulnerable side to, and even as bratty as she’s become since taking the elixir, she’s still gentle and caring towards him. It’s just everyone else that is a problem. That’s her sole motivation, and it’s what the Savior used to trap her in the first place. Her love for Unknown is what keeps her body going. 
It takes time to find the one, months even, but they do eventually find the right candidate and the Savior approves of this.  
It would have gone perfectly if it hadn’t been for the fact that Seven burst into the apartment and sent Unknown into a downward spiral that stopped this mission from becoming complete. Unknown leaves emptyhanded and distraught. Lila is crushed, and she cannot console him. He is vindictive and he pushes her away from him, and for some reason, the reprogramming that had been pushed onto her after all this time just short-circuits. The inability to please Unknown and keep him happy causes her to lose it. Clearly, she lashes out at first at whoever tries to bother her, and there are quite a few rooms that don’t look that good anymore because of it. 
She starts to see mistakes and lies that she never saw before in her life at Mint Eye, and even though the thought of betraying this place hurts, she is shocked that the Savior would push Unknown even harder into the ground for small error at the apartment. Lila understood that he was scared and his trauma was hurting him, but the one person that was supposed to see that besides her did. not. care. whatsoever. 
Lila is sick to her stomach. She is twisted between all she’s come to know and what she knows she can’t believe for the sake of Unknown. Against her better judgment, she uses Unknown’s distraction in work to try and slip out a message to the MC. She’s by no means an expert at going undetected but she wants to protect Unknown, she loves him, and she would do anything for him, even if that meant doing something he might not like. 
The MC is surprisingly kind, and actually realized who Lila was after some talking, and even though there is a bit of mistrust, the fact that she pleaded with both the MC and Seven to rescue Unknown, no, rescue Saeran no matter the stakes. She doesn’t even care if she’s saved, she just wants him saved. She promises Seven that she’ll do whatever she can to help them get into Mint Eye, and manages to send them the building layout before she has to cut all contact with them. Unknown doesn’t check her devices but she’s not going to make any mistakes on this. 
It doesn’t go according to plan, either. She may have helped them get in but she couldn’t control Unknown’s actions. He gets overwhelmed and runs off before she can stop him. Seven and the MC offer to help get her out of this place, but she refuses to leave without Unknown. She promises to try and convince him to leave, but by the time they all follow his trail, Unknown was snatched up by Vanderwood. 
She stays behind while the MC and Seven give chase. She thinks that Unknown will make it out on his own. She just can’t bring herself to entirely trust these people after all she was told. She does spend that afternoon with V and he does open up about his mistakes to her when she inquires how much he knew about Saeran. Evidently, she had it very wrong. The Savior was the very one who was hurting others, not the other way around. 
She and V spend the time MC and Seven use to hunt down Vanderwood trying to figure out how to dismantle this place and fast. Unfortunately, by the time that Seven and MC did find Saeran, and V goes to them to have his little chat, Unknown double-crosses them and calls the Savior and Lila to let them know where he is. 
There’s no choice in the matter once the Savior is involved in the situation, and all of them are brought to the dungeons to await their fate. Lila is quiet and small as Unknown berates the brother he’s come to hate, but the Savior makes him leave, and with her parting words, she leaves not long after that. Lila waits till the coast is clear to apologize to them for what’s happening. She can’t offer much, but she does give Seven a phone to use but that’s all she can offer to them right now. 
He promises that they will get Saeran out of this place, and her as well. 
Lila goes after Unknown and tries to coax him out of his frenzied state, and her warm touches do ease some of his pain, but it’s not the fix he needs. He may be happy to see her again but he’s too caught up in destroying the traitors and he’s going to beg his Savior to let him get rid of Seven. She tries to tell him that that won’t fix the damage and he slaps her embrace away, angry that she would think differently than him. 
He leaves her like that and it hurts. It hurts too much. Unknown can’t even do that, the Savior orders him to stay away from it. 
Lila doesn’t give up on him. She knows it’s a matter of time and they just need to stall. The Savior seems to sense that and orders them to get taken up fast for a special ceremony in front of everyone. She watches, helplessly, as the people she thought she hated and then decided they weren’t so bad, are about to be punished like she was. 
Unknown bursts into the scene and he is determined to get rid of his brother once and for all, and we all know how the secret ends go from this point. It doesn’t work. She tries to have him restrained, Seven tries to protect him and it gets so tangled up. V shows up, and Unknown pulls out his gun—
Lila jumps in the last second to try and stop him from making the biggest mistake of his life and gets shot instead of V. Unknown is horrified by his own actions, shrieks, and nearly blacks out from the imagery of this sweet girl that loved him so much getting hurt by his own hand like this. Nobody moves, save for him, cursing and pleading nonsense at her for doing such a thing when she promised she would never leave him. 
“I’m sorry I couldn’t keep my promise, Saeran.”  She forgives him and apologizes for everything and then blacks out. 
……
……
…….
DID YOU THINK THAT WAS THE END?
Of course not, Lila wakes up a few days later in the hospital. Everything aches but she’s alive. The bullet had torn through her body with ease but hadn’t hit anything vital, but the blood loss had done its damage and made it seem like she was worse than what she was. 
Much to her surprise, the MC is at her bedside when she wakes up from her coma. She nearly passes back out again from the shock of seeing her but manages to stay calm. MC explains what happened to her, how Jumin and his team had arrived not long after she went under, how Mint Eye was taken down, and how Saeran nearly tried to get rid of himself when her eyes went dark, how Seven stopped him and how he just went limp after that. 
She’s numb to these words. Saeran couldn’t bear to live without her? After the fight they had, she thought he would never trust her again. 
Her recovery is… difficult. She has PTSD from the whole event, and she struggles to speak with people as she fears mistrust and judgment. She doesn’t know what to do with herself. The RFA is surprisingly nice. She always thought they were cruel. But they had open arms for even someone like her, that had fucked up. They all understood what she did and they all accepted her without warning for her actions. She had been tricked but broke out of that to save not only Saeran but V from losing his life. Everybody came out alive and so many were saved thanks to her actions. 
It isn’t until she leaves the hospital that Seven brings her back to his place since she’s got no place left to go, she’s from another country and she left her family on a bad note. Nobody rushes her to contact them, though. She’s worried about seeing Saeran, but MC and Seven both have told her that he’s doing a lot better since Seven snuck him out of the hospital to safety. But, they have to walk into this slowly, as both Saeran and Lila were so involved with one another in Mint Eye and it could trigger something. 
Lila holds her breath and walks into the room. Saeran has his back to her, not knowing she’s there, and he looks the same yet so different. Nobody says anything but she whispers his name, his real name, and he turns to look at her with his breath caught in his throat. Nobody moves. It’s just a silent game of communicating through looks. 
Then, she makes the first move. She walks in front of him and tentatively rests her hands against his own. She wants to embrace him but she knows better than to do that. “I thought… I thought I killed you back there,” he would whisper in a horrified daze. “Why would you come to see me after what I did?”
Her smile is weak and her eyes are filled with tears. “I made you a promise, dummy, remember? I said I wouldn’t leave you. I intend to keep that promise for the rest of my life if you’ll let me. Not even a death can keep me away from you, Saeran.” 
“You stubborn princess.” 
“Mhm. That won’t ever change.“
It’s going to be hard and it’s going to take a lot of recovery time to get to a place where they feel whole once again, but as long as they have each other to hold onto, then everything is okay. Lila and Saeran both have a lot to live for in this new chance, and they won’t let it pass them by. 
TL;DR: So, yes, Lila and Saeran do stay together after the secret ends. 
12 notes · View notes
giannisbct-blog · 7 years ago
Text
I “LIKE” programming
Well just like this blog, when it came to the like system, I wasn’t entirely sure where to start. I had started working on this before we had decided to go with AR built in Unity so I figured I would get the mechanics working and then be able to transfer them into Unity. Initially when we were thinking of building a physical model or projection mapping, I was going to have the like button on a webpage so that anyone could access it, an inherently thats where I started. I had the thought of using a python script to build the whole back end mechanic of the system and that data would be passed from the user via the webpage, and after quickly running this by Liam (who has done something similar before) he agreed that it would be the easiest way and we could have multiple users at once which is what we wanted. I built the most basic version of the “front end” part so that someone could input their name and then like it so the likes would be attributed to them, just like it is on social media.
Tumblr media
Liam recommended using the flask module for Python to host the server (and webpage for testing). Once I had installed that I managed to get a connection between the two and even by complete fluke was getting it to receive data from multiple devices and be able to register that it was from different devices. I personally was stoked about this because it was 90% of the like system working but then Liam pointed out, as we don’t know why it worked, if it stopped working we also wouldn’t be able to pick out why. I figured it was in my best interests to learn the best practice for this rather than get the minimum working version as it would be great reference material for the future. In these early stages, Liam helped me a lot by explaining why one way was better than another and generally guiding me through which was super helpful as I was almost coming from no coding background. The main think I am super grateful for is him introducing me to JSON, which I’ll be honest was an absolute pain at first but I now realise it was definitely the best way to go as it was far more reliable and actually made sense. So essentially what was happening is that the HTML page was passing the name that was submitted by the user, to the python script every time the like button was clicked. The script would then add a new value to its own defined variable “like” and count them like that. The bonus of doing it like this is that if someone played once and then after a while came back too have another go, their “score” would compound and keep increasing. On that note though the downside is that if two users input the same name they will have a super score rather than two separate scores. While this would be a downside for an actual game where the score would need to be counted from just one game at a time and not an overall total, for our project it sort of just adds to it. The idea is that the more people “like” the disaster that happens, the more it proves our point that social media is building a screen which separates people from reality and that they can simply click a button to show their support, and the more they do that, the more they are helping? Or at least thats the theory.
Tumblr media
In the past when it has come to doing small code projects I have looked up how to do something, found code that suited my need, copied it and then tweaked it to properly fit my programme. However, this doesn’t mean I necessarily understood it which is something I wanted to do differently this time. As this was basically my main role in the team, I wanted to make sure I would be able to explain to other people how it worked rather than have a piece that worked but just because it did. Which I guess relates to this whole degree itself, nothing is really taught to us (especially in studio) and its all self directed so we need to learn the skills ourselves and in this day in age when you don’t need a computer science degree to become a developer but simply be able to copy code from different places to suit your programme, I believe it is quite important to know what you are doing because I the future it will make me far more efficient. And its the learning by doing thing that works really well for me that I like. For example when it came to having to deal with GET requests from both the server and user side, I had done something similar before with the instagram location finder programme that I had had a play with earlier in the semester, and because I had used it before I sort of knew how it worked but then I had the code itself I could look through again and figure out why it worked and what parts I could omit for this different programme. I have to say, I think this semester I have learned more about programming from simply trial and error, Liam and online tutorials than I did in all of last year where I did both programming papers. It was also great to learn this in a group setting where the other team members also are not super coding savvy as trying to explain what I was doing or why I couldn’t do something that we wanted to do due to the nature of the system that I was writing in non technical terms helped clarify what I was doing for myself. I would certainly like to keep doing more programming projects in the future to further develop my skills and learn new things.
Transferring the user side to Unity was a whole different box of frogs though. First of all Unity is all scripted in C# which I have never used before (but luckily is similar to java which I had dabbled in with processing last year) but the whole mechanic of connecting to a server is made a lot more difficult as all requests need to be sent through a Coroutine. Which I’ll be honest, I had never heard of until I stumbled across a million Stack Overflow forums that explained that that is what you have to use. I think I have got my head around them mostly but there are still some things about them that elude me, for example everywhere (including the Unity manual) it says that they end when they hit a “return”, but I have coroutines that have functions or call new functions still enclosed in the coroutine but after the return type and it still calls them (see below).
Tumblr media
They also supposedly run for their specified length (of time) regardless where they are called, i.e will run for 6 seconds if told to after being called from the Update( ) function. However, I have found that in some of my code this works, in other parts it just sort of ignores that rule and sometimes it waits for a wee while longer than the instructed time. So its not totally something that I fully understand but I know it enough to be able to use it in the right places and the majority of the function of the Unity scene is run by coroutines so I am clearly doing something right. I like to think of it as a poorly trained animal, I know the commands and the animal knows what they mean but sometimes chooses to do its own thing.
Another major challenge I had was dealing with JSON, for starters sending the exact same data as I was from the webpage but through unity, it was as if it was parson the data into JSON and then parsing the JSON into more JSON even though the commands where almost the same, so on the python side I had to update it so that it decoded the incoming JSON properly so it was then actually processed logically. This brought in a whole world of problems in itself as then the data that was being sent back to the user was all jumbled and messed up which was less than ideal as it felt I had actually gone backwards rather than made progress. But as I have learned from this project, every new error you get means that you are making progress as you have made it past the previous error. After all of that though, I did get it working.
vimeo
Once I had done all of that, I realised that it was a perfectly functioning Like system that recorded multiple user’s scores and could compound them and it was perfect, but only once. There was no way to restart it without stopping the whole application and going again. So there was the next challenge which proved a lot more difficult that initially suspected mainly due to how referencing different Game Objects is from a script and even harder, referencing the scripts of those Game Objects which is what caused me many hours of strife. To make matters more difficult as well, Unity doesn’t appreciate all the things you could normally do in a C# script so you have to find ways around its very stubborn walls which in my case lead to many, many scripts. Doesn’t sound like such a terrible thing but to make sure each was working correctly I was logging things to the debug console from almost every script so then when I wanted to look for a specific message I was sending to try and get something working, it became a whole lot harder because there were 20+ scripts that were all printing to the console. But once again, I am a champion and figured it out.
vimeo
As I write this I realise that it doesn’t sound that difficult and didn’t take that long but the code for the like system has been haunting me at night and has been an ongoing saga for weeks . I certainly have learned heaps and am happy with my process that I undertook. However, if I was to do it again knowing what I know now, I would skip out the HTML part and just go straight for the C# scrips because I think that transition was the hardest part of this whole process. In HTML (with javascript) it is easy to do everything all in on document but with C#, you can’t send data and also receive it in the same script, you need to separate them into multiple scripts which is where confusion starts manifesting as you try and think across multiple scripts and have to remember what each one is referencing and how it will then affect the other one. The issue with backend systems as well is you don’t overtly see your mistake as you would with front end because either something happens or it doesn’t and if it doesn’t you then have to comb through your code to find the broken section and find out what is messing you up. Overall I think this is what I found the most frustrating as I have only really done mainly front end development rather than back end, but this project was certainly a great insight into it. Now as for this whole project once we got on a roll, I obviously stopped blogging as I got so engrossed in the work which I do understand is not the best practice but as we were pushed for time (having left it so late to start doing something) I focused solely on getting the work done and from an outsider’s perspective the final product doesn’t really show how much work went into the programming of it, so I have uploaded all my scripts to GitHub so you can have a look at them, and also see how things work if you are interested: https://github.com/JabronusMaximus/ARcde-Scripts
1 note · View note
chasholidays · 8 years ago
Note
Clarke and Bellamy write for different websites and accidentally end up in a competition of who can write/get away with the most ridiculous headlines.
Clarke understands why people hate clickbait headlines. She really does. They’re attention-grabbing in all the worst ways, and she hates when they make someone who’s doing good out to be an asshole, or imply that gluten murdered someone’s entire family or whatever.
But as a writer? They’re really fun to come up with. She loves figuring out the right angle to sell things, and given she ends up writing a lot of bullshit, filler articles, it’s nice to come up with a good lead.
There’s an argument to be made that she’s tricking people, but, honestly, clicking on an article in error really isn’t so bad, in a global sense. Anyone who’s seriously upset that they wasted two minutes of their lives reading something they didn’t want to probably would have clicked on an article with an accurate headline to complain about the content anyway.
Besides, ad revenue is ad revenue. She knows what her job is, and it’s not keeping people from leaving outraged comments about how she deceived them with her headlines.
In fact, that’s kind of a bonus.
She’s idly vanity-googling herself when she finds a twitter poll titled “Whose clickbait headlines are better/worse, Bellamy Blake or Clarke Griffin?” and that’s what really kicks the whole thing into high gear.
The poll is neck-in-neck, which is of course the biggest issue. If Clarke was winning handily, she could let it go, but there’s actual debate in the responses, people making cases for her versus this unknown person.
It doesn’t take much to bring out Clarke’s competitive spirit. Clarke has her competitive spirit on speed dial.
The first step is obviously figuring out who Bellamy Blake is and what headlines they’re writing, and that’s pretty easy. He writes for Arkadia Online, which is–unexpected. She’s heard of Arkadia Online, and they have a somewhat older demographic, one of those websites that talks a lot of shit about millennials, and judging from Bellamy’s twitter and articles, he is a millennial, and he doesn’t really fit in with the rest of the brand. He’s a good writer, just nothing like any of the other Arkadia Online staff.
And his headlines really are something else.
It’s not just that they’re clickbaity, it’s that they’re actually inaccurate. It started, from what she can tell, with an article he published after the 2016 election, titled World’s Best Brownies, written in the style of one of those recipe blogs that refuses to just get to the actual recipe. The vast majority of the post was a long diatribe about the political state of the country and how shitty everything was and then finally, at the end, So yeah, let’s eat some fucking brownies, and the recipe.
The response had been mixed, to say the least, and now Bellamy has a reputation as the guy who injects politics into everything, and Clarke can’t say he doesn’t deserve it. An article called Top Five Cutest Kittens includes five adorable kittens, but they’re used as palate cleaners between examples of police brutality. It does seem like a bit of a cruel trick to Clarke, but as soon as anyone clicks in, he’ll have a subtitle with the actual content of the article, for anyone who bothers to read it.
Still, when Clarke wants cute kittens, it’s because she knows she needs a break from the garbage fire that is the world, so she wouldn’t really appreciate getting baited and switched like that.
Even if he does have excellent taste in kitten pictures.
Emailing Bellamy happens without her really meaning it to, clicking on his address at the end of the post and writing the subject line: is what you do actually clickbait? before she’s actually come up with any kind of follow-up message.
She stares at the body of the message for a second, then finds the link for the Twitter poll and pastes it in, adding, Asking for the internet.
It’s one of those emails she sends without really expecting to get a response. Obviously, she wouldn’t mind getting one, but the email is out in the ether. The ball is in Bellamy Blake’s court, and he might just file it away as spam or hate mail or something. If she got a message from an unknown person with that subject line, she’d probably assume it was someone yelling at her and delete it.
Maybe she could have thought that one through a little more.
In fact, though, it’s only about half an hour before he responds, and suddenly they’re corresponding, which she should have recognized as the warning sign it was almost immediately. But she’s always been a little slow with these things.
From: Bellamy Blake ([email protected])To: Clarke Griffin ([email protected])Subject: Re: is what you do actually clickbait?
Merriam Webster defines clickbait as “something (such as a headline) designed to make readers want to click on a hyperlink especially when the link leads to content of dubious value or interest,” so after some consideration I’ve decided that what I do is actually reverse clickbait. The headline is designed to make people click, but the content isn’t of dubious value. Hope that clears everything up.
From: Clarke Griffin ([email protected])To: Bellamy Blake ([email protected])Subject: Re: is what you do actually clickbait?
Did you really start a response with “Merriam Webster defines”? Not doing that is like journalism 101.
From: Bellamy Blake ([email protected])To: Clarke Griffin ([email protected])Subject: Re: is what you do actually clickbait?
Punctuation goes inside the quotation marks, if we’re doing writing critique over email.
From: Clarke Griffin ([email protected])To: Bellamy Blake ([email protected])Subject: Re: is what you do actually clickbait?
According to Purdue University, question marks and exclamation points go outside of quotation marks when the punctuation applies to the whole sentence.
Hope that clears everything up
*
She’s expecting that to be the end of it, less because they were both kind of assholes and more because there isn’t really anything else to say. They had a conversation, and that conversation is now over. She follows him on Twitter, because he does seem decently cool, and she’s a little curious what else he’s going to write. Friends don’t let friends miss out on weird headlines.
He follows her back, and two days later DMs her, which she’s maybe unreasonably excited about.
bellamyblake1: So if you were writing an article about getting rid of the electoral college, which fall fashion trend would you reference in the headline?Asking for a friend
edenclarke: What are the fall fashion trends I’m picking from?
bellamyblake1: ShitI was hoping you’d know someScarves? I feel like I don’t understand when/why people wear scarves nowThat probably makes them a fashion trend
edenclarke: WowYou really thought this one through
bellamyblake1: “Five Scarves You Need This Holiday Season”That works, right?
edenclarke: You know, I’ve looked at the rest of your websiteIt’s very normalHow do you possibly get away with this?
bellamyblake1: I write very normal articlesThey love themI’m hitting a demographic they don’t know how to reachThey feel my puff pieces appeal to women and millennials
edenclarke: So no one actually reads what you write
bellamyblake1: Not for a whileMy best friend is our tech guyHe does all the coding, checks the email, etc etcEveryone else on staff is a technophobeAnd coming from me that’s saying a lot because I’m still scared of twitter
edenclarke: That’s not technophobia, that’s survival instinctEveryone should be scared of twitterSo you get away with those headlines because no one’s paying attention?That makes me feel better
bellamyblake1: What’s that supposed to mean?
edenclarke: I actually have editors reading my stuffI couldn’t get away with the stuff you get away with
bellamyblake1: Oh yeah that makes senseI figured you weren’t really committed to the whole thing
Clarke frowns at the screen. It’s a trap. She knows it’s a trap. He’s obviously fucking with her, and she deserves it, since she was kind of fucking with him. She can let this go and be a smarter, more mature person.
edenclarke: Not really committed?
bellamyblake1: You’re just in it for the clicks
edenclarke: As opposed to you, with your higher moral calling
bellamyblake1: Hey, I’m convincing people to read stuff that’s good for themI’m okay with considering that a higher moral calling
edenclarke: Sometimes people might actually want to see a bunch of cat picturesIt’s not actually fair to make them read about politics when they’re trying to take a break
bellamyblake1: TrueBut in my defense, I do show them the cat picturesI found five scarf pictures on my own, by the waySo thanks for nothing
edenclarke: No problemAny time
*
That’s basically how it goes, for the next couple months. The two of them will chat every few days about the next ridiculous headline they’re planning to use, each of them egging the other on to new heights, and Clarke’s always expecting someone with some kind of authority to protest to what they’re doing, but some of the weirdos on twitter have taken notice of the escalation and are talking about it a lot, so her bosses are happy, and Bellamy’s paper seems to genuinely have no idea what he does. They still think he’s writing lifestyle articles instead of attempting to incite revolution.
It’s kind of cool, but a little–unsatisfying. Clarke likes Bellamy, in a fairly limited sense, but her internet stalking hasn’t really turned up much about him. Pictures from college show an attractive, smiling boy with messy hair and white teeth, but she hasn’t found further records of him. He’s a few years older than her, apparently single, with a younger sister who likes to make fun of him on twitter.
She thinks she might like him, but it feels like she needs more information to really make up her mind about it. And she’d like to get it, so she can stop having these fluttery feelings every time she sees his name. Those can’t be right.
Still, when he DMs her, it still makes her heart skip every time. And when she sees the message, Hey you’re in Seattle, right?, it goes into overdrive.
edenclarke: StalkerYeahWhy?
bellamyblake1: I’m going to be in town next weekInterview
edenclarke: Interview?You’re leaving behind the exciting world of online journalism?
bellamyblake1: Even betterI might get hired as an actual political writerInstead of lifestyleNot that I mind lifestyle, but
edenclarke: Yeah, your heart seems to be somewhere elseSo you might be relocating?
bellamyblake1: MaybeIt’s mostly online so they don’t require movingBut they prefer it and my lease is up in a month or so and I kind of hate LA
edenclarke: Wow, yeahI can’t imagine you living there
bellamyblake1: I grew up hereBut I’m thinking it might be time for a changeAnyway, I was hoping you’d be willing to meet upShow me around town a littleSell me on the placeOr not, I guess, depending on how you feel about me moving there
edenclarke: I can probably pencil you in, yeahSend me your flight detailsAnd scheduleWe’ll see when we’re both free
The next few days feel endless. Bellamy’s coming in on Saturday afternoon and staying until Wednesday, to get the best deal on flights. When she offers to grab drinks with him after he lands, he agrees, and asks if she would have time on Sunday to do some sightseeing.
She agrees to that too, and can’t help hoping they won’t actually have to meet up on Sunday, because she will have just brought him home with her. He’s got an Air BnB, but she can’t help thinking she’s a better prospect.
Saturday afternoon she throws up an article while he’s on the plane, goes for a run in an attempt to calm her nerves, and heads over to the bar once Bellamy texts that he’s on the ground. She arrives way too early, given he still has to deplane and get out of the airport, but it’s not like obsessing at her apartment is helping. She might as well obsess at the bar.
Ten minutes after he tells her he’s on his way, he sits down next to her, offering a sheepish smile that probably would have won her over even if she hadn’t already been mostly won.
“Hey, Clarke.”
His voice is rich and smooth and he has glasses sliding down his nose and the entire effect is just way too much. “Hi. Nice to meet you.”
“Yeah, nice to meet you too.” He looks her up and down, worrying his lip a little. “Just to get it out of the way, uh–can I buy you a drink?”
“You don’t have to buy me a drink,” she says, feeling her own smile start to grow. “You can just flirt with me.”
His grin is honestly one of the best things she’s ever seen in her life. “I was already doing that. I figured I should step it up in person.”
“Feel free,” she says, and he slides his stool closer, smiling.
He cancels the Air BnB the next day.
*
Bellamy Blake @bellamyblake1New article up, Fifteen Outrageous Reasons to Get Married (You Won’t Believe #7)! Please R&R.
Clarke Griffin @edenclarkeReplying to @bellamyblake1Are you sure that’s where the exclamation point goes? I think we should consult Purdue University
Bellamy Blake @bellamyblake1Replying to @bellamyblake1 @edenclarkeThat’s seriously your question?
Clarke Griffin @edenclarkeReplying to @bellamyblake1 @edenclarkeDefinitely my question, yeah
Clarke Griffin @edenclarkeReplying to @bellamyblake1 @edenclarkeMy answer is yes
95 notes · View notes
onidephor · 7 years ago
Text
The Bull
The door to the company workshop quietly swung open on recently greased hinges. It made no sound until the wooden frame tapped the wall on its other side with a dull thud. Oni walked inside, adding to the usual ambiance of pumps rushing and mechanisms clattering by a slow, steady beat of boots drumming on metal grates. He had just finished speaking with Aimee and Oz, this new stranger from supposedly another time, one who continued to show him things he recognized, but failed to understand. He had tried asking question, but he felt more confused than before knowing she only answered one or two, and left him to mystery with the rest. He sighed.
His path brought him beyond the fabrication station to a small desk kept tucked in the back. His previous engineers had put it here. It was constructed of a large crate and some basic stools for chairs. It was simply meant to be a flat surface for writing and late-night napping, not really for aesthetic. Most of the devices he kept from previous engineers were kept here. He walked to the nearby shelving that had some screwdrivers and boxes of nuts and bolts, shifting those aside to pick up a hand-held device with some wires spilling from its top. A small screen looked back at him when he turned it over. This was a diagnostic reader an old friend and engineer of his, Chloe, left behind. He used it a few times before with people present to help. It showed him some basic text and statuses of his own system. It was just a piece of technology, but he wanted to try something.
Speaking with Oz, she had said the beast he had once seen was something he had “come to terms with” in her time. As far as he knew, this horned monster was something that haunted his dreams in the early hours of the morning. It was something that creeped around in his aether just out of sight, unless Aimee was there to observe it. A sickly looking, shaggy-maned minotaur of a creature if he could conjure up the image again in his mind. Bull-like, with its hooves extended out more like talons than cloven toes. Its chest composed near entirely of devices and haphazard tubing that extended out all over its limbs and neck. Its mouth always hung open. He wondered if it was because the tusks on the bottom jaw had grown too large for it to actually shut it. It always appeared malnourished, or at least left to thrive on synthetic chemicals which offered the body no real benefit except uncontrolled strength and growth.
Raiden was the only person he knew shared aether with him. The elezen spirit always claimed he could never see this creature no matter how many times Aimee and Oni said otherwise. He didn’t feel like he had a second thing swimming about his aether, but at times, he could almost argue that there was. He thought to times when both him and Raiden would black out, fall into a state where they wouldn’t remember how they got there, but they could remember what they were doing as they both acted on their own as one. He wondered if that’s when his eyes would cloud over. If that’s when codes took hold.
He found the connection wire on the device to hold between two fingers while the others opened the panel on his right arm. He had himself a seat on the desk so he could set it down and free up a hand while his right arm was plugged in. It gave him that moment to look at what was inside that arm. A number of magitek tubing spilled out naturally without the casing to close it up. Each of these had a prong on the end as if to be plugged into something else, but nowadays, he used them only as a conduit for his electricity, and one of them, for gathering up fluids like ceruleum or otherwise. He remembered back to when these became a part of him. It was when the tribune, Theius, got ahold of him, removed his old design, and fitted him with these. That’s when he got the collar he wore until this day, too. Looking at the magitek tubing now, he felt an odd familiarity with them.
The tubing that snaked all over that minotaur’s body had the exact same line pattern.
He recoiled slightly by leaning back in his seat upon putting that together. He knew these weren’t here when he first got the augmentations. Did Theius add another device? Maybe it was coincidental. Why would Theius put in more parts to this creature when for all Oni knew, Theius had always been opposed to the project for a number of reasons.
The reader warmed up and displayed the main screen for him.
[Logging in... ... ...] "Welcome user: [unknown_user]." "System status: "Subject ID: #0168LS. [Operational]. Current command: [none] [Retrieving data... ... ...] "Current owner: [4f 4e 49 20 44 45 50 48 4f 52 20 48 59 55 52 20 4d 41 4c 45]
"Performing system repair ...” "System repair could not be completed. [Enter command]: /
Each time someone used this in the past, the commands often failed. The best he could do was view the status before it glitched out. He used the small keypad to type in a command for the device. “Talk to me”, he wrote out, hitting enter afterward.
[Processing command... ... ...] "System error." [Enter command]: / |
[Set default]  [Return to menu]
He grimaced a bit. The same error as always, he thought. Again he typed in something. “Can you talk?”
The same error message.
He continued entering strings for a little while, all ranging from questions to statements, to eventually outright talking into the device to something or someone who may not even be receiving the information.
“Look, I’m not sure if you’re actually in there or not, but there’s something in there. I want to think my dreams aren’t just that.”
[Processing command... ... ...] [“System Error”]
“Someone told me that I could grow stronger if I understood better. I just want to understand, and I was told I had to do it on my own. Give me anything. Say anything.”
[Processing command... ... ...] [“System Error”]
He sat back on his chair again and wondered if technology even spoke common Eorzean, and it wasn’t like he knew how to speak via code or Allagan. He glanced back to the main screen when it came up and looked at the string of numbers under “current owner”, reminding himself that another had told him what it said. It was his name written out in code, his race, and his gender. “ Oni de phor hyur male” He wondered if he could use what few letters were there to say anything. He returned to the command screen, and thought of the letters available. On a small piece of scrap paper, he wrote down the code and the letters they matched with, then entered “ a r e  u  m e”  in the same number code.
[Processing command... ... ...] "Current owner: [4f 4e 49 20 44 45 50 48 4f 52 20 48 59 55 52 20 4d 41 4c 45]
His eyebrows tipped upward in slight surprise. He honestly expected an error again. He looked to his cypher and thought of something else to ask it with what he had available. “y o u r n a m e”
[Processing command... ... ...] "Current owner: [4f 4e 49 20 44 45 50 48 4f 52]
The man tilted his head when he noticed it showed less letters this time. Now that he knew these few as part of the cipher, he was able to tell all the device told him in return was his own name. “I don’t understand”, he whispered to himself. At that point, the device started to display new text as the reader logged him out. It immediately logged him back in, leaving him with a furrowed brow and watching with concern as the last time this happened, it logged back in glitching. He feared he had ruined his chance.
[Logging in... ... ...] "Welcome user: [4f 4e 49 20 44 45 50 48 4f 52 20 48 59 55 52 20 4d 41 4c 45]. "Sy7ftem sta2aus: "Subject ID: #0168LS. [Operati6fnal]. Current command: [43 4f 4e 46 55 53 45 44] [R65trieving d61ta... ... ...] "Current owner: [4f 4e 49 20 44 45 50 48 4f 52 20 48 59 55 52 20 4d 41 4c 45] []:/ |
Oni looked up at the numbers displayed in the command slot. He had a sudden drop of his heart when he feared something had activated, but he felt no different, and a few of these pairs looked familiar. He glanced at his cipher, then the command. He began to find similar pairs and write them out. “43 o n 46 u 53 e d” It took him a moment while he puzzled it out, until it hit him, “Confused?” Well, that was definitely true. He was confused, but was that a status of his current emotion? He spoke instead of typing into the device, “You and me both… I’m not sure what this all means, but if you have any form of consciousness, I want to share that power with you.” Somewhat defeated, he leaned an elbow on the table and looked at the device without entering anything more into it. He had himself completely stumped.
[ … … …] ["S79ste4fm 45rr6fr."]
[ ] [Return]
Oni blinked when the screen changed, though at this point, it was so glitched out he could barely read what it said anyway. He turned the device over to check the cords, then looked back at the screen to observe. “What are you trying to tell me…”
["S79ste4fm 45rr6fr."]
[…]
["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."] ["S79ste4fm 45rr6fr."]
The entire screen became covered by this. That was likely the end of it. He sighed and reached over to unplug the arm from the reader. “Take a break”, he told the reader, “I’ll be back.” When the wire snapped free of its port, the screen returned to normal with a basic [Connect Device] instruction. He carefully set aside the device and put his left hand to his forehead. He spent at least another hour contemplating the other side of his right palm, turning the hand over occasionally.
8 notes · View notes
blazehedgehog · 7 years ago
Note
How did you learn to code?
I ramble for a while, so rather than have people scroll past a novel on their Tumblr dash, I’m hiding the full story behind a “Read More” tag.
The short answer is: I taught myself.
I took some computer science stuff toward the end of middle school where I learned TURTLE or whatever it was called, on the old Mac II’s they had. Then, I can’t remember if a computer science class in my Freshman year did some light programming or if I actually saw another kid doing it (making basically a “Hello World” equivalent) in BASIC, but I understood the rough idea of what was going on there.
From there, my Mom had taken a computer correspondence course back in 1988 or so -- she wanted to become a legal secretary. She got a computer and a bunch of software with it, this big Hyundai PC. No hard disk, not even support for color graphics. But it came with GWBASIC. Around high school I ended up getting a 33mhz Windows 3.11 machine (the first computer that was purely my own) with QBASIC, so I used my Mom’s GWBASIC manuals to goof around in QBASIC, since they were so similar. the first program I tried to write was a Pokedex, but I got stuck trying to figure out how to get it to draw graphics. Displaying text was easy, displaying simple geometric shapes (circles, etc.) was easy, but I wanted to have it draw, like, PokeBalls and stuff, but couldn’t figure it out.
High school meant we had to get graphing calculators, usually of the Texas Instruments variety, many of which come with their own programming language called TIBASIC. Most of my friends had TI-83s, I had a TI-82. So most of their games wouldn’t work on my calculator because the software was incompatible. With what I knew of GWBASIC and QBASIC, I ended up figuring out enough TIBASIC to start making simple text adventures. I called them “MovieGames” and usually it was a choose-your-own-adventure short story based on whatever I was thinking about at the time; Men in Black, Jurassic Park, Independence Day, etc. So you’d get a scene, like
A dinosaur is chasing you! Where do you go?
> Jungle> Plain
Perhaps for teachers doing tests, TIBASIC actually had a whole system built in for these kinds of multiple choice questions, so it was really as simple as making it print text, bringing up a multiple choice, and then branching the story from there. I did 4 or 5 of those.
Finally, I found another kid who had a TI-82, and had games he could share with me over the link cable, so I ended up with INDY500 and DRUGWARS. Both were my first real experiences with game logic. DRUGWARS (sometimes known as “Dope Wars”) was mostly a text-based game, and probably one of the most famous games out there, given how it’s been ported to everything under the sun. It even formed the basis of the drug minigame in GTA Chinatown Wars. The idea is that you buy drugs from one place, resell them at another, and make money by traveling around dealing to the right people and dodging the police.
The second game, INDY500, was a “real” game. It had scrolling and very basic graphics -- it used ASCII text to represent cars on a race track. So you’d drive down the course, going from left to right, avoiding cars down a straightaway as things got faster, and faster, and faster, trying to go as far as you could. Simple stuff, but a TI-82 didn’t have a lot to work with.
The TI-82 came with a massive instruction manual, most of which was a very detailed glossary for all of the TIBASIC programming functions. So basically, what I ended up doing with these two games, is go through them, line by line, looking up every single function in the instruction manual’s glossary. I’d mess with their parameters, see what they did, and basically ended up deconstructing both games and putting them back together again -- that was literally the case with INDY500, where once I understood how the game worked, I essentially re-wrote the entire game from scratch by memory.
With DRUGWARS, I ended up taking what I learned about the multiple choice selector in my “MovieGames” and turned it in to a sprawling text-based RPG based on Final Fantasy. It had a very basic story (loosely based on Final Fantasy VII), you could travel between towns, you’d get in to random battles while traveling, level up, learn spells, fight bosses, and even equip Materia for summons. It was so big and complex, if you played it for too long, the TI-82 would actually crash with an “OUT OF MEMORY” error because I’d used up all the system RAM -- with a text adventure.
At that point, I hit kind of a crossroads. I started making a real, actual, complex game on the TI-82 -- a side scrolling shooter that was based on Star Fox, but held more in common with Gradius. The TI-82 had a “graphing” mode that let you use a smaller font so if you were using ASCII graphics, you could fit more on screen, and using per-pixel precision (as opposed to per-row precision). Around this time, I also discovered Corel Click & Create, aka The Games Factory, aka Multimedia Fusion, aka Clickteam Fusion.
The problem with coding on a TI-82 is this was before the days of rechargeable batteries being in everything, so if the two AA’s inside the thing went dead, you lost all of your programs and everything else on it. Even just changing batteries, if you weren’t fast enough, the memory would eventually be erased. Three or four times over the course of a year or two, I lost everything I’d written on my TI-82, and by that point, I was learning enough about Click & Create that the TI-82 was looking less appealing by the day. CnC was simply more flexible, and faster to work with, and I had access to full-color graphics.
So I almost exclusively switched over to Click & Create from then on.
I did still keep up with programming a little bit here and there; I taught myself mIRC scripting, which at one point, I used to make an IRC-based MUD. That was, and maybe still is, the most complex thing I’ve ever programmed, and couldn’t even really be run because it’d spit out so much text it’d trip the flood protection on most servers.
Something else I started coding with mIRC scripting was a chat bot. For some reason I got it in my head that it’d be funny to prank my friends by writing a bot to detect when I’d been AFK and chat for me like I was still at the keyboard (I was a weird highschooler.) It started by spitting out pre-programmed messages, sort of like Eliza, but eventually I started to think about what would happen if I could record text from the chat, break it down in to individual parts, and then reassemble it back in to a coherent sentence. As it turns out, I had, completely by accident, stumbled upon the concept of a Markov Chain. (For the record, I also had never heard of Eliza, either).
So let’s say you’d submit a message to the chat that was like “Hello, everyone! How are you doing today?”
My mIRC script would break that down in to a bunch of separate pieces:
“Hello, everyone! How”“How are you”“you doing today?”“today?”
The script would take the last word of any given piece and try to match it to the first word of any other piece. In theory, this would correctly reassemble the sentence “Hello, everyone! How are you doing today?” -- but what it actually ended up doing was creating hilarious nonsense like
“Hello, everyone! How is it possible to be like Turtles in Time!”
The code was simple enough that many years later, I figured I could use this chat bot (which I called Gilliam, after the robot in Outlaw Star) and port it over to C++. Friends had been telling me for weeks how easy it was to make games in C++ using Allegro, so I figured it’d be a good way to get back in to “real” programming and get away from Click & Create.
Unfortunately, even just getting text to render in Allegro proved to be massively difficult for me as any given sentence longer than a certain length would cause huge memory overflow errors. I banged my head against it for a week, got nowhere, and eventually got so depressed and frustrated at my inability to grasp C++ and Allegro as easily as I did BASIC that I deleted the whole thing and have never touched “real” coding ever again. I’ve stuck to Clickteam Fusion almost exclusively, because it’s what I’m good at.
23 notes · View notes
highschoolessaytopics803 · 5 years ago
Video
youtube
Tumblr media
write my essay
About me
Pay Someone To Write My Essay
Pay Someone To Write My Essay We ought to confess that utilizing our service is the most effective determination if you want to overlook about your writing duties. EssayShark.com is the largest writing service to supply help with any writing assignment. Our website is SSL encrypted and licensed by McAfee. You pays in your essay using Visa, Mastercard, and PayPal. We sincerely appreciate our prospects and firmly consider that you've got a right to pay for the paper only if it meets your whole necessities. Therefore, your funds shall be released to the author if the provided paper fully satisfies you. Paper format.Since each college has its personal necessities relating to a format, don’t overlook to say them in the pointers so our writers could use them while writing. This info helps us discover an experienced essay author for every order. The essay author conducts analysis after he finds credible sources to base his work on. Such a turnaround is maybe one of the best amongst all the essay companies thus far. We respect your deadlines, all the time ready to stroll the additional mile that will help you fit in the schedule. To score seventy five% and above, we give you an academic paper author with expertise, credentials, diploma, and a strong command of English. Nothing gives your professor incentive to fail you want a paper that isn’t well-researched or one which doesn’t even show any stage of understanding on the essay or analysis subject. You want to give yourself ample time to know the subject earlier than you can even start the writing. All these problems may be easily solved if you place an order on our web site. Our writing service has gained reputation amongst college students, so let’s find out what the explanations are. We supply lower costs for orders with a normal and extended deadline. For every new buyer, we provide 15% off their first order. Use the promo code “first15” at the order web page to activate the discount. Many prospects ask, “Can I pay you to write my essay online anonymously? Yes, you can, since we highly worth the safety and privateness of your information. For this, we apply dependable safety measures to keep up our surroundings entirely secure for payments. Your financial knowledge is processed privately, so no third get together will ever have access to it. Every writer responds to the customer’s messages promptly in a lenient and cheerful fashion. Our aim is to be sure to get the exact sort of paper you initially needed! It implies prime quality, swift delivery, and full confidentiality. More than 96% or orders arrive on time or beforehand. When you ask us, “write an essay for me,” you should have an excellent alternative to communicate with a author utilizing the chat option. If you all of a sudden have new directions for your order or wish to verify the writing progress, simply contact the author in chat. Writers play a great function in our writing company, as they supply customers with quality papers. They work fast and are prepared to satisfy any of your necessities. All of our writers are skilled and possess academic levels. Once you place an order within our website, we assign knowledgeable essay writer to work on it. We don’t settle for any funds until you’re confident that we will meet your expectations and write an honest paper inside the agreed timeframe. In case you’re not satisfied with the order, you possibly can at all times get a full refund. Even though such cases occur not often in our apply, we still assure a stable refund coverage. Also, if you want to cancel the order within an hour after a writer has been assigned, you may be given the whole sum back. Besides writers, we also have a team of proofreaders and editors who're in a position to notice even essentially the most minor errors within the textual content. They will simply right a written paper so it won't include any mistakes. They know grammatical, syntactical, punctuation, and different guidelines, and can implement them whereas editing the ultimate paper.
0 notes
suzanneshannon · 5 years ago
Text
React Integration Testing: Greater Coverage, Fewer Tests
Integration tests are a natural fit for interactive websites, like ones you might build with React. They validate how a user interacts with your app without the overhead of end-to-end testing. 
This article follows an exercise that starts with a simple website, validates behavior with unit and integration tests, and demonstrates how integration testing delivers greater value from fewer lines of code. The content assumes a familiarity with React and testing in JavaScript. Experience with Jest and React Testing Library is helpful but not required.
There are three types of tests:
Unit tests verify one piece of code in isolation. They are easy to write, but can miss the big picture.
End-to-end tests (E2E) use an automation framework — such as Cypress or Selenium — to interact with your site like a user: loading pages, filling out forms, clicking buttons, etc. They are generally slower to write and run, but closely match the real user experience.
Integration tests fall somewhere in between. They validate how multiple units of your application work together but are more lightweight than E2E tests. Jest, for example, comes with a few built-in utilities to facilitate integration testing; Jest uses jsdom under the hood to emulate common browser APIs with less overhead than automation, and its robust mocking tools can stub out external API calls.
Another wrinkle: In React apps, unit and integration are written the same way, with the same tools. 
Getting started with React tests
I created a simple React app (available on GitHub) with a login form. I wired this up to reqres.in, a handy API I found for testing front-end projects.
You can log in successfully:
Tumblr media
…or encounter an error message from the API:
Tumblr media
The code is structured like this:
LoginModule/ ├── components/ ⎪ ├── Login.js // renders LoginForm, error messages, and login confirmation ⎪ └── LoginForm.js // renders login form fields and button ├── hooks/ ⎪ └── useLogin.js // connects to API and manages state └── index.js // stitches everything together
Option 1: Unit tests
If you’re like me, and like writing tests — perhaps with your headphones on and something good on Spotify — then you might be tempted to knock out a unit test for every file. 
Even if you’re not a testing aficionado, you might be working on a project that’s “trying to be good with testing” without a clear strategy and a testing approach of “I guess each file should have its own test?”
That would look something like this (where I’ve added unit to test file names for clarity):
LoginModule/ ├── components/ ⎪   ├── Login.js ⎪   ├── Login.unit.test.js ⎪   ├── LoginForm.js ⎪   └── LoginForm.unit.test.js ├── hooks/ ⎪   ├── useLogin.js  ⎪   └── useLogin.unit.test.js ├── index.js └── index.unit.test.js
I went through the exercise of adding each of these unit tests on on GitHub, and created a test:coverage:unit  script to generate a coverage report (a built-in feature of Jest). We can get to 100% coverage with the four unit test files:
Tumblr media
100% coverage is usually overkill, but it’s achievable for such a simple codebase.
Let’s dig into one of the unit tests created for the onLogin React hook. Don’t worry if you’re not well-versed in React hooks or how to test them.
test('successful login flow', async () => {   // mock a successful API response   jest     .spyOn(window, 'fetch')     .mockResolvedValue({ json: () => ({ token: '123' }) }); 
   const { result, waitForNextUpdate } = renderHook(() => useLogin()); 
   act(() => {     result.current.onSubmit({       email: '[email protected]',       password: 'password',     });   }); 
   // sets state to pending   expect(result.current.state).toEqual({     status: 'pending',     user: null,     error: null,   }); 
   await waitForNextUpdate(); 
   // sets state to resolved, stores email address   expect(result.current.state).toEqual({     status: 'resolved',     user: {       email: '[email protected]',     },     error: null,   }); });
This test was fun to write (because React Hooks Testing Library makes testing hooks a breeze), but it has a few problems. 
First, the test validates that a piece of internal state changes from 'pending' to 'resolved'; this implementation detail is not exposed to the user, and therefore, probably not a good thing to be testing. If we refactor the app, we’ll have to update this test, even if nothing changes from the user’s perspective.
Additionally, as a unit test, this is just part of the picture. If we want to validate other features of the login flow, such as the submit button text changing to “Loading,” we’ll have to do so in a different test file.
Option 2: Integration tests
Let’s consider the alternative approach of adding one integration test to validate this flow:
LoginModule/ ├── components/ ⎪   ├─ Login.js ⎪   └── LoginForm.js ├── hooks/ ⎪  └── useLogin.js  ├── index.js └── index.integration.test.js
I implemented this test and a test:coverage:integration script to generate a coverage report. Just like the unit tests, we can get to 100% coverage, but this time it’s all in one file and requires fewer lines of code.
Tumblr media
Here’s the integration test covering a successful login flow:
test('successful login', async () => {   // mock a successful API response   jest     .spyOn(window, 'fetch')     .mockResolvedValue({ json: () => ({ token: '123' }) }); 
   const { getByLabelText, getByText, getByRole } = render(<LoginModule />); 
   const emailField = getByLabelText('Email');   const passwordField = getByLabelText('Password');   const button = getByRole('button'); 
   // fill out and submit form   fireEvent.change(emailField, { target: { value: '[email protected]' } });   fireEvent.change(passwordField, { target: { value: 'password' } });   fireEvent.click(button); 
   // it sets loading state   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     // it hides form elements     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     // it displays success text and email address     const loggedInText = getByText('Logged in as');     expect(loggedInText).toBeInTheDocument();     const emailAddressText = getByText('[email protected]');     expect(emailAddressText).toBeInTheDocument();   }); });
I really like this test, because it validates the entire login flow from the user’s perspective: the form, the loading state, and the success confirmation message. Integration tests work really well for React apps for precisely this use case; the user experience is the thing we want to test, and that almost always involves several different pieces of code working together.
This test has no specific knowledge of the components or hook that makes the expected behavior work, and that’s good. We should be able to rewrite and restructure such implementation details without breaking the tests, so long as the user experience remains the same.
I’m not going to dig into the other integration tests for the login flow’s initial state and error handling, but I encourage you to check them out on GitHub.
So, what does need a unit test?
Rather than thinking about unit vs. integration tests, let’s back up and think about how we decide what needs to be tested in the first place. LoginModule needs to be tested because it’s an entity we want consumers (other files in the app) to be able to use with confidence.
The onLogin hook, on the other hand, does not need to be tested because it’s only an implementation detail of LoginModule. If our needs change, however, and onLogin has use cases elsewhere, then we would want to add our own (unit) tests to validate its functionality as a reusable utility. (We’d also want to move the file because it wouldn’t be specific to LoginModule anymore.)
There are still plenty of use cases for unit tests, such as the need to validate reusable selectors, hooks, and plain functions. When developing your code, you might also find it helpful to practice test-driven development with a unit test, even if you later move that logic higher up to an integration test.
Additionally, unit tests do a great job of exhaustively testing against multiple inputs and use cases. For example, if my form needed to show inline validations for various scenarios (e.g. invalid email, missing password, short password), I would cover one representative case in an integration test, then dig into the specific cases in a unit test.
Other goodies
While we’re here, I want to touch on few syntactic tricks that helped my integration tests stay clear and organized.
Big waitFor Blocks
Our test needs to account for the delay between the loading and success states of LoginModule:
const button = getByRole('button'); fireEvent.click(button); 
 expect(button).not.toBeInTheDocument(); // too soon, the button is still there!
We can do this with DOM Testing Library’s waitFor helper:
const button = getByRole('button'); fireEvent.click(button); 
 await waitFor(() => {   expect(button).not.toBeInTheDocument(); // ahh, that's better });
But, what if we want to test some other items too? There aren’t a lot of good examples of how to handle this online, and in past projects, I’ve dropped additional items outside of the waitFor:
// wait for the button await waitFor(() => {   expect(button).not.toBeInTheDocument(); }); 
 // then test the confirmation message const confirmationText = getByText('Logged in as [email protected]'); expect(confirmationText).toBeInTheDocument();
This works, but I don’t like it because it makes the button condition look special, even though we could just as easily switch the order of these statements:
// wait for the confirmation message await waitFor(() => {   const confirmationText = getByText('Logged in as [email protected]');   expect(confirmationText).toBeInTheDocument(); }); 
 // then test the button expect(button).not.toBeInTheDocument();
It’s much better, in my opinion, to group everything related to the same update together inside the waitFor callback:
await waitFor(() => {   expect(button).not.toBeInTheDocument();      const confirmationText = getByText('Logged in as [email protected]');   expect(confirmationText).toBeInTheDocument(); });
Interestingly, an empty waitFor will also get the job done, because waitFor has a default timeout of 50ms. I find this slightly less declarative than putting your expectations inside of the waitFor, but some indentation-averse developers may prefer it: 
await waitFor(() => {}); // or maybe a custom util, `await waitForRerender()` 
 expect(button).not.toBeInTheDocument(); // I pass!
For tests with a few steps, we can have multiple waitFor blocks in row:
const button = getByRole('button'); const emailField = getByLabelText('Email'); 
 // fill out form fireEvent.change(emailField, { target: { value: '[email protected]' } }); 
 await waitFor(() => {   // check button is enabled   expect(button.disabled).toBe(false); }); 
 // submit form fireEvent.click(button); 
 await waitFor(() => {   // check button is no longer present   expect(button).not.toBeInTheDocument(); });
Inline it comments
Another testing best practice is to write fewer, longer tests; this allows you to correlate your test cases to significant user flows while keeping tests isolated to avoid unexpected behavior. I subscribe to this approach, but it can present challenges in keeping code organized and documenting desired behavior. We need future developers to be able to return to a test and understand what it’s doing, why it’s failing, etc.
For example, let’s say one of these expectations starts to fail:
it('handles a successful login flow', async () => {   // beginning of test hidden for clarity 
   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     const confirmationText = getByText('Logged in as [email protected]');     expect(confirmationText).toBeInTheDocument();   }); });
A developer looking into this can’t easily determine what is being tested and might have trouble deciding whether the failure is a bug (meaning we should fix the code) or a change in behavior (meaning we should fix the test).
My favorite solution to this problem is using the lesser-known test syntax for each test, and adding inline it-style comments describing each key behavior being tested:
test('successful login', async () => {   // beginning of test hidden for clarity 
   // it sets loading state   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     // it hides form elements     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     // it displays success text and email address     const confirmationText = getByText('Logged in as [email protected]');     expect(confirmationText).toBeInTheDocument();   }); });
These comments don’t magically integrate with Jest, so if you get a failure, the failing test name will correspond to the argument you passed to your test tag, in this case 'successful login'. However, Jest’s error messages contain surrounding code, so these it comments still help identify the failing behavior. Here’s the error message I got when I removed the not from one of my expectations:
Tumblr media
For even more explicit errors, there’s package called jest-expect-message that allows you to define error messages for each expectation:
expect(button, 'button is still in document').not.toBeInTheDocument();
Some developers prefer this approach, but I find it a little too granular in most situations, since a single it often involves multiple expectations.
Next steps for teams
Sometimes I wish we could make linter rules for humans. If so, we could set up a prefer-integration-tests rule for our teams and call it a day.
But alas, we need to find a more analog solution to encourage developers to opt for integration tests in a situation, like the LoginModule example we covered earlier. Like most things, this comes down to discussing your testing strategy as a team, agreeing on something that makes sense for the project, and — hopefully — documenting it in an ADR.
When coming up with a testing plan, we should avoid a culture that pressures developers to write a test for every file. Developers need to feel empowered to make smart testing decisions, without worrying that they’re “not testing enough.” Jest’s coverage reports can help with this by providing a sanity check that you’re achieving good coverage, even if the tests are consolidated that the integration level.
I still don’t consider myself an expert on integration tests, but going through this exercise helped me break down a use case where integration testing delivered greater value than unit testing. I hope that sharing this with your team, or going through a similar exercise on your codebase, will help guide you in incorporating integration tests into your workflow.
The post React Integration Testing: Greater Coverage, Fewer Tests appeared first on CSS-Tricks.
React Integration Testing: Greater Coverage, Fewer Tests published first on https://deskbysnafu.tumblr.com/
0 notes
recruitmentdubai · 5 years ago
Text
React Integration Testing: Greater Coverage, Fewer Tests
Integration tests are a natural fit for interactive websites, like ones you might build with React. They validate how a user interacts with your app without the overhead of end-to-end testing. 
This article follows an exercise that starts with a simple website, validates behavior with unit and integration tests, and demonstrates how integration testing delivers greater value from fewer lines of code. The content assumes a familiarity with React and testing in JavaScript. Experience with Jest and React Testing Library is helpful but not required.
There are three types of tests:
Unit tests verify one piece of code in isolation. They are easy to write, but can miss the big picture.
End-to-end tests (E2E) use an automation framework — such as Cypress or Selenium — to interact with your site like a user: loading pages, filling out forms, clicking buttons, etc. They are generally slower to write and run, but closely match the real user experience.
Integration tests fall somewhere in between. They validate how multiple units of your application work together but are more lightweight than E2E tests. Jest, for example, comes with a few built-in utilities to facilitate integration testing; Jest uses jsdom under the hood to emulate common browser APIs with less overhead than automation, and its robust mocking tools can stub out external API calls.
Another wrinkle: In React apps, unit and integration are written the same way, with the same tools. 
Getting started with React tests
I created a simple React app (available on GitHub) with a login form. I wired this up to reqres.in, a handy API I found for testing front-end projects.
You can log in successfully:
Tumblr media
…or encounter an error message from the API:
Tumblr media
The code is structured like this:
LoginModule/ ├── components/ ⎪ ├── Login.js // renders LoginForm, error messages, and login confirmation ⎪ └── LoginForm.js // renders login form fields and button ├── hooks/ ⎪ └── useLogin.js // connects to API and manages state └── index.js // stitches everything together
Option 1: Unit tests
If you’re like me, and like writing tests — perhaps with your headphones on and something good on Spotify — then you might be tempted to knock out a unit test for every file. 
Even if you’re not a testing aficionado, you might be working on a project that’s “trying to be good with testing” without a clear strategy and a testing approach of “I guess each file should have its own test?”
That would look something like this (where I’ve added unit to test file names for clarity):
LoginModule/ ├── components/ ⎪   ├── Login.js ⎪   ├── Login.unit.test.js ⎪   ├── LoginForm.js ⎪   └── LoginForm.unit.test.js ├── hooks/ ⎪   ├── useLogin.js  ⎪   └── useLogin.unit.test.js ├── index.js └── index.unit.test.js
I went through the exercise of adding each of these unit tests on on GitHub, and created a test:coverage:unit  script to generate a coverage report (a built-in feature of Jest). We can get to 100% coverage with the four unit test files:
Tumblr media
100% coverage is usually overkill, but it’s achievable for such a simple codebase.
Let’s dig into one of the unit tests created for the onLogin React hook. Don’t worry if you’re not well-versed in React hooks or how to test them.
test('successful login flow', async () => {   // mock a successful API response   jest     .spyOn(window, 'fetch')     .mockResolvedValue({ json: () => ({ token: '123' }) }); 
   const { result, waitForNextUpdate } = renderHook(() => useLogin()); 
   act(() => {     result.current.onSubmit({       email: '[email protected]',       password: 'password',     });   }); 
   // sets state to pending   expect(result.current.state).toEqual({     status: 'pending',     user: null,     error: null,   }); 
   await waitForNextUpdate(); 
   // sets state to resolved, stores email address   expect(result.current.state).toEqual({     status: 'resolved',     user: {       email: '[email protected]',     },     error: null,   }); });
This test was fun to write (because React Hooks Testing Library makes testing hooks a breeze), but it has a few problems. 
First, the test validates that a piece of internal state changes from 'pending' to 'resolved'; this implementation detail is not exposed to the user, and therefore, probably not a good thing to be testing. If we refactor the app, we’ll have to update this test, even if nothing changes from the user’s perspective.
Additionally, as a unit test, this is just part of the picture. If we want to validate other features of the login flow, such as the submit button text changing to “Loading,” we’ll have to do so in a different test file.
Option 2: Integration tests
Let’s consider the alternative approach of adding one integration test to validate this flow:
LoginModule/ ├── components/ ⎪   ├─ Login.js ⎪   └── LoginForm.js ├── hooks/ ⎪  └── useLogin.js  ├── index.js └── index.integration.test.js
I implemented this test and a test:coverage:integration script to generate a coverage report. Just like the unit tests, we can get to 100% coverage, but this time it’s all in one file and requires fewer lines of code.
Tumblr media
Here’s the integration test covering a successful login flow:
test('successful login', async () => {   // mock a successful API response   jest     .spyOn(window, 'fetch')     .mockResolvedValue({ json: () => ({ token: '123' }) }); 
   const { getByLabelText, getByText, getByRole } = render(<LoginModule />); 
   const emailField = getByLabelText('Email');   const passwordField = getByLabelText('Password');   const button = getByRole('button'); 
   // fill out and submit form   fireEvent.change(emailField, { target: { value: '[email protected]' } });   fireEvent.change(passwordField, { target: { value: 'password' } });   fireEvent.click(button); 
   // it sets loading state   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     // it hides form elements     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     // it displays success text and email address     const loggedInText = getByText('Logged in as');     expect(loggedInText).toBeInTheDocument();     const emailAddressText = getByText('[email protected]');     expect(emailAddressText).toBeInTheDocument();   }); });
I really like this test, because it validates the entire login flow from the user’s perspective: the form, the loading state, and the success confirmation message. Integration tests work really well for React apps for precisely this use case; the user experience is the thing we want to test, and that almost always involves several different pieces of code working together.
This test has no specific knowledge of the components or hook that makes the expected behavior work, and that’s good. We should be able to rewrite and restructure such implementation details without breaking the tests, so long as the user experience remains the same.
I’m not going to dig into the other integration tests for the login flow’s initial state and error handling, but I encourage you to check them out on GitHub.
So, what does need a unit test?
Rather than thinking about unit vs. integration tests, let’s back up and think about how we decide what needs to be tested in the first place. LoginModule needs to be tested because it’s an entity we want consumers (other files in the app) to be able to use with confidence.
The onLogin hook, on the other hand, does not need to be tested because it’s only an implementation detail of LoginModule. If our needs change, however, and onLogin has use cases elsewhere, then we would want to add our own (unit) tests to validate its functionality as a reusable utility. (We’d also want to move the file because it wouldn’t be specific to LoginModule anymore.)
There are still plenty of use cases for unit tests, such as the need to validate reusable selectors, hooks, and plain functions. When developing your code, you might also find it helpful to practice test-driven development with a unit test, even if you later move that logic higher up to an integration test.
Additionally, unit tests do a great job of exhaustively testing against multiple inputs and use cases. For example, if my form needed to show inline validations for various scenarios (e.g. invalid email, missing password, short password), I would cover one representative case in an integration test, then dig into the specific cases in a unit test.
Other goodies
While we’re here, I want to touch on few syntactic tricks that helped my integration tests stay clear and organized.
Big waitFor Blocks
Our test needs to account for the delay between the loading and success states of LoginModule:
const button = getByRole('button'); fireEvent.click(button); 
 expect(button).not.toBeInTheDocument(); // too soon, the button is still there!
We can do this with DOM Testing Library’s waitFor helper:
const button = getByRole('button'); fireEvent.click(button); 
 await waitFor(() => {   expect(button).not.toBeInTheDocument(); // ahh, that's better });
But, what if we want to test some other items too? There aren’t a lot of good examples of how to handle this online, and in past projects, I’ve dropped additional items outside of the waitFor:
// wait for the button await waitFor(() => {   expect(button).not.toBeInTheDocument(); }); 
 // then test the confirmation message const confirmationText = getByText('Logged in as [email protected]'); expect(confirmationText).toBeInTheDocument();
This works, but I don’t like it because it makes the button condition look special, even though we could just as easily switch the order of these statements:
// wait for the confirmation message await waitFor(() => {   const confirmationText = getByText('Logged in as [email protected]');   expect(confirmationText).toBeInTheDocument(); }); 
 // then test the button expect(button).not.toBeInTheDocument();
It’s much better, in my opinion, to group everything related to the same update together inside the waitFor callback:
await waitFor(() => {   expect(button).not.toBeInTheDocument();      const confirmationText = getByText('Logged in as [email protected]');   expect(confirmationText).toBeInTheDocument(); });
Interestingly, an empty waitFor will also get the job done, because waitFor has a default timeout of 50ms. I find this slightly less declarative than putting your expectations inside of the waitFor, but some indentation-averse developers may prefer it: 
await waitFor(() => {}); // or maybe a custom util, `await waitForRerender()` 
 expect(button).not.toBeInTheDocument(); // I pass!
For tests with a few steps, we can have multiple waitFor blocks in row:
const button = getByRole('button'); const emailField = getByLabelText('Email'); 
 // fill out form fireEvent.change(emailField, { target: { value: '[email protected]' } }); 
 await waitFor(() => {   // check button is enabled   expect(button.disabled).toBe(false); }); 
 // submit form fireEvent.click(button); 
 await waitFor(() => {   // check button is no longer present   expect(button).not.toBeInTheDocument(); });
Inline it comments
Another testing best practice is to write fewer, longer tests; this allows you to correlate your test cases to significant user flows while keeping tests isolated to avoid unexpected behavior. I subscribe to this approach, but it can present challenges in keeping code organized and documenting desired behavior. We need future developers to be able to return to a test and understand what it’s doing, why it’s failing, etc.
For example, let’s say one of these expectations starts to fail:
it('handles a successful login flow', async () => {   // beginning of test hidden for clarity 
   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     const confirmationText = getByText('Logged in as [email protected]');     expect(confirmationText).toBeInTheDocument();   }); });
A developer looking into this can’t easily determine what is being tested and might have trouble deciding whether the failure is a bug (meaning we should fix the code) or a change in behavior (meaning we should fix the test).
My favorite solution to this problem is using the lesser-known test syntax for each test, and adding inline it-style comments describing each key behavior being tested:
test('successful login', async () => {   // beginning of test hidden for clarity 
   // it sets loading state   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     // it hides form elements     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     // it displays success text and email address     const confirmationText = getByText('Logged in as [email protected]');     expect(confirmationText).toBeInTheDocument();   }); });
These comments don’t magically integrate with Jest, so if you get a failure, the failing test name will correspond to the argument you passed to your test tag, in this case 'successful login'. However, Jest’s error messages contain surrounding code, so these it comments still help identify the failing behavior. Here’s the error message I got when I removed the not from one of my expectations:
Tumblr media
For even more explicit errors, there’s package called jest-expect-message that allows you to define error messages for each expectation:
expect(button, 'button is still in document').not.toBeInTheDocument();
Some developers prefer this approach, but I find it a little too granular in most situations, since a single it often involves multiple expectations.
Next steps for teams
Sometimes I wish we could make linter rules for humans. If so, we could set up a prefer-integration-tests rule for our teams and call it a day.
But alas, we need to find a more analog solution to encourage developers to opt for integration tests in a situation, like the LoginModule example we covered earlier. Like most things, this comes down to discussing your testing strategy as a team, agreeing on something that makes sense for the project, and — hopefully — documenting it in an ADR.
When coming up with a testing plan, we should avoid a culture that pressures developers to write a test for every file. Developers need to feel empowered to make smart testing decisions, without worrying that they’re “not testing enough.” Jest’s coverage reports can help with this by providing a sanity check that you’re achieving good coverage, even if the tests are consolidated that the integration level.
I still don’t consider myself an expert on integration tests, but going through this exercise helped me break down a use case where integration testing delivered greater value than unit testing. I hope that sharing this with your team, or going through a similar exercise on your codebase, will help guide you in incorporating integration tests into your workflow.
The post React Integration Testing: Greater Coverage, Fewer Tests appeared first on CSS-Tricks.
source https://css-tricks.com/react-integration-testing-greater-coverage-fewer-tests/
from WordPress https://ift.tt/2YnsycH via IFTTT
0 notes
holytheoristtastemaker · 5 years ago
Link
Integration tests are a natural fit for interactive websites, like ones you might build with React. They validate how a user interacts with your app without the overhead of end-to-end testing. 
This article follows an exercise that starts with a simple website, validates behavior with unit and integration tests, and demonstrates how integration testing delivers greater value from fewer lines of code. The content assumes a familiarity with React and testing in JavaScript. Experience with Jest and React Testing Library is helpful but not required.
There are three types of tests:
Unit tests verify one piece of code in isolation. They are easy to write, but can miss the big picture.
End-to-end tests (E2E) use an automation framework — such as Cypress or Selenium — to interact with your site like a user: loading pages, filling out forms, clicking buttons, etc. They are generally slower to write and run, but closely match the real user experience.
Integration tests fall somewhere in between. They validate how multiple units of your application work together but are more lightweight than E2E tests. Jest, for example, comes with a few built-in utilities to facilitate integration testing; Jest uses jsdom under the hood to emulate common browser APIs with less overhead than automation, and its robust mocking tools can stub out external API calls.
Another wrinkle: In React apps, unit and integration are written the same way, with the same tools. 
Getting started with React tests
I created a simple React app (available on GitHub) with a login form. I wired this up to reqres.in, a handy API I found for testing front-end projects.
You can log in successfully:
Tumblr media
…or encounter an error message from the API:
Tumblr media
The code is structured like this:
LoginModule/ ├── components/ ⎪ ├── Login.js // renders LoginForm, error messages, and login confirmation ⎪ └── LoginForm.js // renders login form fields and button ├── hooks/ ⎪ └── useLogin.js // connects to API and manages state └── index.js // stitches everything together
Option 1: Unit tests
If you’re like me, and like writing tests — perhaps with your headphones on and something good on Spotify — then you might be tempted to knock out a unit test for every file. 
Even if you’re not a testing aficionado, you might be working on a project that’s “trying to be good with testing” without a clear strategy and a testing approach of “I guess each file should have its own test?”
That would look something like this (where I’ve added unit to test file names for clarity):
LoginModule/ ├── components/ ⎪   ├── Login.js ⎪   ├── Login.unit.test.js ⎪   ├── LoginForm.js ⎪   └── LoginForm.unit.test.js ├── hooks/ ⎪   ├── useLogin.js  ⎪   └── useLogin.unit.test.js ├── index.js └── index.unit.test.js
I went through the exercise of adding each of these unit tests on on GitHub, and created a test:coverage:unit  script to generate a coverage report (a built-in feature of Jest). We can get to 100% coverage with the four unit test files:
Tumblr media
100% coverage is usually overkill, but it’s achievable for such a simple codebase.
Let’s dig into one of the unit tests created for the onLogin React hook. Don’t worry if you’re not well-versed in React hooks or how to test them.
test('successful login flow', async () => {   // mock a successful API response   jest     .spyOn(window, 'fetch')     .mockResolvedValue({ json: () => ({ token: '123' }) }); 
   const { result, waitForNextUpdate } = renderHook(() => useLogin()); 
   act(() => {     result.current.onSubmit({       email: '[email protected]',       password: 'password',     });   }); 
   // sets state to pending   expect(result.current.state).toEqual({     status: 'pending',     user: null,     error: null,   }); 
   await waitForNextUpdate(); 
   // sets state to resolved, stores email address   expect(result.current.state).toEqual({     status: 'resolved',     user: {       email: '[email protected]',     },     error: null,   }); });
This test was fun to write (because React Hooks Testing Library makes testing hooks a breeze), but it has a few problems. 
First, the test validates that a piece of internal state changes from 'pending' to 'resolved'; this implementation detail is not exposed to the user, and therefore, probably not a good thing to be testing. If we refactor the app, we’ll have to update this test, even if nothing changes from the user’s perspective.
Additionally, as a unit test, this is just part of the picture. If we want to validate other features of the login flow, such as the submit button text changing to “Loading,” we’ll have to do so in a different test file.
Option 2: Integration tests
Let’s consider the alternative approach of adding one integration test to validate this flow:
LoginModule/ ├── components/ ⎪   ├─ Login.js ⎪   └── LoginForm.js ├── hooks/ ⎪  └── useLogin.js  ├── index.js └── index.integration.test.js
I implemented this test and a test:coverage:integration script to generate a coverage report. Just like the unit tests, we can get to 100% coverage, but this time it’s all in one file and requires fewer lines of code.
Tumblr media
Here’s the integration test covering a successful login flow:
test('successful login', async () => {   // mock a successful API response   jest     .spyOn(window, 'fetch')     .mockResolvedValue({ json: () => ({ token: '123' }) }); 
   const { getByLabelText, getByText, getByRole } = render(<LoginModule />); 
   const emailField = getByLabelText('Email');   const passwordField = getByLabelText('Password');   const button = getByRole('button'); 
   // fill out and submit form   fireEvent.change(emailField, { target: { value: '[email protected]' } });   fireEvent.change(passwordField, { target: { value: 'password' } });   fireEvent.click(button); 
   // it sets loading state   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     // it hides form elements     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     // it displays success text and email address     const loggedInText = getByText('Logged in as');     expect(loggedInText).toBeInTheDocument();     const emailAddressText = getByText('[email protected]');     expect(emailAddressText).toBeInTheDocument();   }); });
I really like this test, because it validates the entire login flow from the user’s perspective: the form, the loading state, and the success confirmation message. Integration tests work really well for React apps for precisely this use case; the user experience is the thing we want to test, and that almost always involves several different pieces of code working together.
This test has no specific knowledge of the components or hook that makes the expected behavior work, and that’s good. We should be able to rewrite and restructure such implementation details without breaking the tests, so long as the user experience remains the same.
I’m not going to dig into the other integration tests for the login flow’s initial state and error handling, but I encourage you to check them out on GitHub.
So, what does need a unit test?
Rather than thinking about unit vs. integration tests, let’s back up and think about how we decide what needs to be tested in the first place. LoginModule needs to be tested because it’s an entity we want consumers (other files in the app) to be able to use with confidence.
The onLogin hook, on the other hand, does not need to be tested because it’s only an implementation detail of LoginModule. If our needs change, however, and onLogin has use cases elsewhere, then we would want to add our own (unit) tests to validate its functionality as a reusable utility. (We’d also want to move the file because it wouldn’t be specific to LoginModule anymore.)
There are still plenty of use cases for unit tests, such as the need to validate reusable selectors, hooks, and plain functions. When developing your code, you might also find it helpful to practice test-driven development with a unit test, even if you later move that logic higher up to an integration test.
Additionally, unit tests do a great job of exhaustively testing against multiple inputs and use cases. For example, if my form needed to show inline validations for various scenarios (e.g. invalid email, missing password, short password), I would cover one representative case in an integration test, then dig into the specific cases in a unit test.
Other goodies
While we’re here, I want to touch on few syntactic tricks that helped my integration tests stay clear and organized.
Big waitFor Blocks
Our test needs to account for the delay between the loading and success states of LoginModule:
const button = getByRole('button'); fireEvent.click(button); 
 expect(button).not.toBeInTheDocument(); // too soon, the button is still there!
We can do this with DOM Testing Library’s waitFor helper:
const button = getByRole('button'); fireEvent.click(button); 
 await waitFor(() => {   expect(button).not.toBeInTheDocument(); // ahh, that's better });
But, what if we want to test some other items too? There aren’t a lot of good examples of how to handle this online, and in past projects, I’ve dropped additional items outside of the waitFor:
// wait for the button await waitFor(() => {   expect(button).not.toBeInTheDocument(); }); 
 // then test the confirmation message const confirmationText = getByText('Logged in as [email protected]'); expect(confirmationText).toBeInTheDocument();
This works, but I don’t like it because it makes the button condition look special, even though we could just as easily switch the order of these statements:
// wait for the confirmation message await waitFor(() => {   const confirmationText = getByText('Logged in as [email protected]');   expect(confirmationText).toBeInTheDocument(); }); 
 // then test the button expect(button).not.toBeInTheDocument();
It’s much better, in my opinion, to group everything related to the same update together inside the waitFor callback:
await waitFor(() => {   expect(button).not.toBeInTheDocument();      const confirmationText = getByText('Logged in as [email protected]');   expect(confirmationText).toBeInTheDocument(); });
Interestingly, an empty waitFor will also get the job done, because waitFor has a default timeout of 50ms. I find this slightly less declarative than putting your expectations inside of the waitFor, but some indentation-averse developers may prefer it: 
await waitFor(() => {}); // or maybe a custom util, `await waitForRerender()` 
 expect(button).not.toBeInTheDocument(); // I pass!
For tests with a few steps, we can have multiple waitFor blocks in row:
const button = getByRole('button'); const emailField = getByLabelText('Email'); 
 // fill out form fireEvent.change(emailField, { target: { value: '[email protected]' } }); 
 await waitFor(() => {   // check button is enabled   expect(button.disabled).toBe(false); }); 
 // submit form fireEvent.click(button); 
 await waitFor(() => {   // check button is no longer present   expect(button).not.toBeInTheDocument(); });
Inline it comments
Another testing best practice is to write fewer, longer tests; this allows you to correlate your test cases to significant user flows while keeping tests isolated to avoid unexpected behavior. I subscribe to this approach, but it can present challenges in keeping code organized and documenting desired behavior. We need future developers to be able to return to a test and understand what it’s doing, why it’s failing, etc.
For example, let’s say one of these expectations starts to fail:
it('handles a successful login flow', async () => {   // beginning of test hidden for clarity 
   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     const confirmationText = getByText('Logged in as [email protected]');     expect(confirmationText).toBeInTheDocument();   }); });
A developer looking into this can’t easily determine what is being tested and might have trouble deciding whether the failure is a bug (meaning we should fix the code) or a change in behavior (meaning we should fix the test).
My favorite solution to this problem is using the lesser-known test syntax for each test, and adding inline it-style comments describing each key behavior being tested:
test('successful login', async () => {   // beginning of test hidden for clarity 
   // it sets loading state   expect(button.disabled).toBe(true);   expect(button.textContent).toBe('Loading...'); 
   await waitFor(() => {     // it hides form elements     expect(button).not.toBeInTheDocument();     expect(emailField).not.toBeInTheDocument();     expect(passwordField).not.toBeInTheDocument(); 
     // it displays success text and email address     const confirmationText = getByText('Logged in as [email protected]');     expect(confirmationText).toBeInTheDocument();   }); });
These comments don’t magically integrate with Jest, so if you get a failure, the failing test name will correspond to the argument you passed to your test tag, in this case 'successful login'. However, Jest’s error messages contain surrounding code, so these it comments still help identify the failing behavior. Here’s the error message I got when I removed the not from one of my expectations:
Tumblr media
For even more explicit errors, there’s package called jest-expect-message that allows you to define error messages for each expectation:
expect(button, 'button is still in document').not.toBeInTheDocument();
Some developers prefer this approach, but I find it a little too granular in most situations, since a single it often involves multiple expectations.
Next steps for teams
Sometimes I wish we could make linter rules for humans. If so, we could set up a prefer-integration-tests rule for our teams and call it a day.
But alas, we need to find a more analog solution to encourage developers to opt for integration tests in a situation, like the LoginModule example we covered earlier. Like most things, this comes down to discussing your testing strategy as a team, agreeing on something that makes sense for the project, and — hopefully — documenting it in an ADR.
When coming up with a testing plan, we should avoid a culture that pressures developers to write a test for every file. Developers need to feel empowered to make smart testing decisions, without worrying that they’re “not testing enough.” Jest’s coverage reports can help with this by providing a sanity check that you’re achieving good coverage, even if the tests are consolidated that the integration level.
I still don’t consider myself an expert on integration tests, but going through this exercise helped me break down a use case where integration testing delivered greater value than unit testing. I hope that sharing this with your team, or going through a similar exercise on your codebase, will help guide you in incorporating integration tests into your workflow.
0 notes
animator19 · 8 years ago
Text
Interview with Alex Hirsch from after he had finished Gravity Falls
https://www.themarysue.com/alex-hirsch-interview/ 
Alex Hirsch: My main goal after Gravity Falls was finished was to take a vacation a BIG one and I spent about a year doing everything I couldn’t do while I was serving solitary confinement at Disney. I visited Hawaii, Japan, Portland, Burning Man. I did conventions in New York, Russia, Rio. My goal was to say “yes” to anything that wasn’t work. Sort of like Grunkle Stan on his worldwide boat tour with Ford, I needed some time away from the shack. But GF is a weirdness magnet after all and I can’t resist its pull forever.  When Disney asked if I’d want to do Journal #3 I said yes immediately. It’s the number one thing I’d want to read if I was a fan, so I couldn’t pass up the opportunity.
Kaiser: Was the Journal done in stages? i.e. was the original draft for the black light version, or did you have to come back and do that once the sales proved viable?
Hirsch: Definitely stages, the very first thing I asked when they brought up the possibility of doing a journal was whether we could include the black light messages, but we were told that it would be way too expensive and to just try to forget about it. Then when the book came out and was topping the NYT bestseller list, Disney Publishing agreed to release a special edition for the superfans and give me my dream of black lights.
The challenge then was to try to fit the new messages over the old pages as though they always belonged. But these are fun challenges. Probably the hardest part was on the “Floating Eyeballs” page—there’s a spot where you see text coming from under a Polaroid. But in the Special Edition Journal, the polaroid is finally removable, so I needed to think of sentences that would credibly end with the words you’ve already seen
Kaiser: On that subject, Disney never seemed particularly keen on releasing much GF merch. Has the success of Journal 3 re-opened the conversation on things like the BluRay set?
Hirsch: The day that Disney bought Star Wars (AFTER buying Marvel) was the day I knew my merch dreams for Gravity Falls were basically toast. The company is too huge and we’re barely a blip on the radar to their consumer products division. Luckily the enduring popularity of the show has resulted in a few departments within the company sticking their neck out and trying cool experiments like journal 3. Everyone was surprised by the success of the journal except the fans. Their appetite for more continues to impress even this long after the end of the show. I’m hoping those numbers increase our likelihood of getting a DVD but I can’t make any promises.
Kaiser: Were you involved in getting The Mystery of Gravity Falls (@TheMysteryofGF) permission to do what is (according to them) small batches of sanctioned merch like the stone Bill figure and Grunkle Stan bobbleheads?
Hirsch: That guy is like my guardian angel. He’s some kind of brilliant, crazed super-fan who understands the show better than Disney ever did. Honestly, I don’t know how he contacted Disney and got the sanctioned merch—he’s some kind of wizard. I hope he runs the company one day.
[Note: I reached out to @TheMysteryofGF to check on this. Turns out I was slightly incorrect in my question. They have worked in conjunction with Disney on at least one occasion, but for the most part the merchandise they’ve made available has been of their own initiative, sometimes with help from an outside contractor. They also work with Bioworld, who provides the GF license to Hot Topic, in creating certain items.]
Kaiser: How did you approach fan interaction during the series? The codes are obviously built into the show from the get-go, but did you think it would catch on like it did? Did the response require you to adjust planned fan engagement on the fly?
Hirsch: The scope, size, influence and presence of fandom culture has gone through a complete and total revolution between now and when I first pitched Gravity Falls in 2011. Keep in mind- my first job was on Flapjack back in 2008-ish. Back then, you would release a cartoon into the ether, and it would basically disappear into a black void after airing. There’d be maybe two drawings on DeviantArt, maybe a message board with a few comments, and that was it.
That was the entirety of online feedback between cartoons and creators at the time. (And even those paltry scraps of feedback were still huge compared to fandoms when I was growing up. There was nobody in 1991 willing to die to make sure that their ship of Tommy Pickles and Reptar came to fruition. At least no one with a way of getting that opinion in front of Klasky-Csupo)
Tumblr’s rise happened just around the same time as Gravity Falls‘s premiere in 2012, so I was totally unprepared for the level of passion and engagement and fan art that would happen. I had to evolve along with all this in real time as it happened.
Kaiser: I always found it curious that you’d hold Twitter Q&As, but then delete the answers within a day.
Hirsch: Probably the best formats for answering questions were Reddit AMAs—I enjoyed doing two of those—and interviews. I occasionally answer questions on twitter when the mood strikes me, but Twitter is a TERRIBLE place for meaningful discourse.
Twitter has an ephemeral conversational glibness built into its core, but it ironically also has this incentive to cast every word said in bronze and isolate it from its context. It’s like if everything you said at a dinner party with every guest was carved into the wall and permanently became part of the house decorations. I’ll frequently prune my twitter posts to keep my feed clean from the residue of 100 little back and forths. Even if I tried to leave everything up, it disappears into the feed anyway. No matter how many times I say “There is no Season 3” people will never stop asking.
Kaiser: Obviously, that’s got to be a trial and error process. Any regrets?
Hirsch: I honestly don’t have many regrets from my engagement with fans, because everything that happens, positive and negative, is a learning experience and teaches me something about our world and the culture we live in. And overwhelmingly it has been positive. Back in the pre-fandom-culture days I never could have imagined I’d get such an overwhelming tidal wave of creative, kind, validating responses to my work. It’s every creator’s dream. It’s absolutely worth any weird prickly trolls or growing pains that come along with it and I’m insanely grateful.
Kaiser: The Cipher Hunt had to be an enormous undertaking to put together. How’d you go about organizing it? Did you ever take part in any ARGs (Augmented Reality Games) yourself that inspired you?
Kaiser: The Cipher Hunt was the most fun thing I’ve ever done.
I’ve never been part of any real-world treasure hunts, but as someone who grew up with games like MYST I love puzzles; the idea of doing one in the real world was too tempting to pass up.
The entire thing was organized by me and my buddy Ian Worrel, Gravity Falls‘ Emmy-winning art director. I’m a restless idea guy and he’s this master executor/craftsman—we were both totally in love with the idea of using our newfound free time to put something together totally for the fun of it, to build this strange Rube Goldberg Device and then watch how the fans would interact with it in real time.
Kaiser: Did you split up duties as far as where to put what? Who made the statue?
Hirsch: The statue was made by a brilliant props/effects fabricator in LA, Fon Davis of Fonco, a friend of a friend who was willing to make something weird for a price. Ian did most of the intellectual legwork in terms of figuring out which clues would lead to where, and I wrote all the actual codes. We took a road trip up to Oregon together to hide some of the final clues and had a lot of fun.
I hid the clue in Russia personally, which was a little terrifying. I knew if I got caught trying to hide a tiny magnetic capsule with a code scroll rolled up into it, Putin might not take to kindly to the optics of that. But Bill Cipher was smiling down on me that day and it went without a hitch.
Kaiser: Shifting a bit to the series itself: I recall you mentioning that the writing for season 2 had to be somewhat rethought because so many people had figured out the Author’s identity. Did that change how you wrote Ford’s arc? Were there other things you wanted to explore in general, given more time?
Hirsch: The truth is, no matter how many grand plans you have in your head, no matter what tentpole plot points or ideas you imagine, everything changes when you actually sit down to write. You discover what the show is as you make it through collaboration, trial and error, and what feels right.
In your question, you say season 2 had to be “rethought” but that implies that there was this already finished season 2 totally written out in our minds. But that’s not the case. All we knew after Season 1 was over was “Ford comes out of the portal. Bill probably creates the apocalypse. Dipper & Mabel complete their arcs. Fun stuff happens in the meantime.”
Figuring out how it all fits together in the writers’ room, discovering new things and surprising yourself—that’s the fun part of writing. We didn’t really know who Ford was, from a personality perspective, until we sat down to try to write him. The same is true of Dipper, Mabel, Grunkle Stan, and Bill. You learn as you go.
Kaiser: Fascinating! I suppose I must’ve heard about very early discussion, and extrapolated … as GF fans are wont to do. How embarrassing.
Hirsch: Casting also hugely affects a character. You have an idea of what a character is like in the writing room, but then when the actor comes in, everything can change. We cast JK Simmons as Ford late in the process. He was instantly perfect, but changed how we thought about the character. Regarding things I would love to explore if I could go back in time, I would definitely add a full episode about Wendy if I had the chance. We always wanted to give her more, but we never quite cracked a story that worked for us. But I do think she deserved more!
I deliberately tried to give her more of a role in Mabelcorn and Weirdmageddon Part 1 to make up for the lack of Wendy elsewhere. Linda Cardellini was amazing to work with. She gave the character such a grounded performance. Really was exciting to watch her work.
Kaiser: One of the issues around the show was representation/diversity, and there were a lot of rumors about what Disney would/wouldn’t allow—the little old ladies falling in love in “The Love God” is probably the most famous example. Any comment?
Hirsch: Definitely. If you’ve been following me for a while you’ll know I’ve never been shy about discussing my frustrations with Disney’s censors and this was one of the most frustrating incidents of all. Back on “Love God” there was a scene in the script that described a few random couples in a diner falling in love in through the power of cupid’s magic.
When one of our storyboard artists presented the scene to me, she’d made one of the couples two lovable old ladies. It was sweet and casual and I knew INSTANTLY that it was going to turn into a huge fight with Disney. So naturally I left it in. The note came back immediately “The scene of the two old ladies kissing in the diner is not appropriate for our audience. Please revise.” I responded with a one word answer: “Why?”
This basically broke the censors. The couldn’t think of a single way to phrase an answer to that question so they made me talk on the phone so there would be no paper trail. They were terrified of sounding like bigots—but I honestly don’t think they were bigots, I think they were cowards. They basically admitted that there was no good reason why I should change it, but that they get complaints about this stuff from various homophobic parents and would rather avoid the headache, and couldn’t I just drop it?
I said that if we did that we were basically just being held hostage by bigots and screw that, lets rise above this crap and just pull the trigger. The worst thing that can happen is that we get some letters. Who cares? Disney’s a giant company, we can survive some letters from some cranks. I don’t think they necessarily disagreed—but there’s no incentive in their job to say yes to things. But I kept going back to them.
We probably had 6 or so conversations about it. It’s one of the only times I had a face to face meeting with the censors. I didn’t want to go back to my board artist and tell her that I lost this fight. I wanted to win, and I wanted to set a precedent, and I argued that little things like this could mean the world to people and that anyone who was pissed off deserved to be pissed off. But despite my greatest efforts it finally came down to “change the scene or we’ll cut it out of the episode ourselves.”
I felt awful reporting to the artist that I’d lost this one. But I didn’t stop trying. In the last episode, I had the two police offers, Blubs and Durland, flat out say they loved each other, and I didn’t get a single note. I think the censors were finally less scared of complaining parents than they were of having to deal with how annoying I am again.
Since then, times have thankfully changed. I hear that Disney has allowed same-sex couples in Star Vs the Forces of Evil, and the Nickelodeon has done the same in Loud House. Both studios are way behind CN and what they’ve done with Steven Universe, but progress, slowly but surely, is being made. I would love to see a new Disney animated show have the guts to show a proper same-sex kiss on air. One of these networks is going to do it—I encourage Disney to keep growing and be the first.
[Note: We now enter the portion where I completely gave into my fannish id for a second. I hope you’ll all forgive me.]
Kaiser: Two things, purely to satisfy my curiosity as a fan: A) did Pacifica stay with her parents post-series? It seemed like a seriously bad situation, guardianship wise. B) what WOULD Bill have done if Ford had decided (that is, been dumb enough) to take him up on his offer?
Hirsch: I think a lot of fans read more than I meant into the awfulness of Pacifica’s parents. I never imagined them as being abusive, just very controlling—living vicariously through their daughter, treating her like a prize more than a person. I grew up in a town with some rich families and it was something I witnessed more than once—parents trying to make their kids extensions of their own reputation. Pacifica is still only a kid, so I think she’d continue to live with them, but I think she’d start to have a very needed rebellious phase to discover who she is outside of her family name.
I definitely imagined Pacifica getting a side job at Greasey’s Diner working with Lazy Susan after the family lost their mansion. I think learning the value of a dollar and having to interact with the town riff-raff would be good for her.
Re: What Bill might have done, like all things that happen off camera, that question has no true canon answer. But if I had to speculate, in my gut I think Bill would have incinerated Ford on the spot the moment he got the formula to shut down the barrier. I don’t see Bill as a romantic, sweet, or charitable character. He’s a psychopath who takes what he can get. He sees people as toys and when he gets bored of playing with them tosses them aside. I think at that point he was done playing.
Kaiser: Makes sense. There’s a decided inclination to read Bill as being sincerely impressed with Ford on some level because that’s the trope (i.e. Q in Star Trek), but it’s not quite in keeping with how things shook out, is it?
Hirsch: That’s not how I imagine Bill. I see him as a serial manipulator. While he’s “seducing” you with flattery his brain is somewhere else imagining playing ping-pong with a severed head. But people are free to imagine any headcanon they like! I’m genuinely excited by other people’s interpretation of the characters–but I never forget my own.
Kaiser: Is there a story behind that doodle you and Roiland (the creator of Rick & Morty) did of Rick and Stan? That’s a crossover that’s never coming, I’m sure, but I love the cross-show elements.
Hirsch: There’s been a lot of hay made out of the little winks about Gravity Falls in Rick & Morty, and vice versa, the truth is just that we’ve been friends since before we had TV shows, and enjoy messing with people. Although if we WERE planning something big we’d definitely deny it—so I guess you’ll never know!
Kaiser: You left one seriously huge plot thread open with Bill’s coded message in the finale and then the secret Axolotl page of the Choose Your Own Adventure book. Is that something you might come back to, or just a mystery for the fans to chew on?
Hirsch: In terms of Bill’s secret message … I like stories that complete their emotional arcs, but still leave some lingering threads to chew on. It gives the fans something to theorize on, and it gives me a window back into that world if I ever choose to return to it.
Kaiser: Do you have a medium you’d prefer? Or would it just depend at the time?
Hirsch: All depends on my schedule—and the creative urge. I’m involved in a number of projects right now, so it’s hard to say. Comics are definitely a possibility. And maybe a special one day. Honestly my dream would have been to do a Gravity Falls theatrical feature—Disney discussed it with me for a while, but ultimately (and probably rightfully) determined the show wasn’t big enough to warrant it. But if some lunatic wanted to give me 50 million dollars to make a Gravity Falls movie I’d probably do it!
Kaiser: Is there anything you can say about your other project (the one you publicly announced for Fox, or anything else), or is it too soon?
Hirsch: It’s too soon to say anything specific. I will say that Gravity Falls opened a huge number of doors and opportunities for me but I’m being careful not to announce anything until the time is right. (And most of the announcements and leaks you’ll see online about various things I’ve been involved with have been either inaccurate or premature) I can say that I have been working on a feature project that hasn’t leaked online (if you think you know what it is, you’re wrong!) that I’m very very excited about, but owing to the nature of the parties involved I can’t say anything. I’m counting down the days until I get to announce what it is.
Kaiser: As a closer, you published a series of tweets not long ago about the stigma against being allowed to fail that animators face. Do you have any advice for them?
Hirsch: Haha! Oh, that. My latest tweetstorm was specifically about a trend I see in animated series development, where executives will “develop” a show to death and waste time, money, and goodwill trying to come up with a risk-proof TV pilot. But every creative act is inherently risky. The key is to create an environment where risk is encouraged, and failures have as small a cost as possible. I believe failure is the first step to success. The key is to fail as quickly as possible and try again. To treat failure not as a terrifying ending but rather as an opportunity to learn something.
0 notes
rollinbrigittenv8 · 8 years ago
Text
The Anxieties of a Muslim Traveler
Skift Take: "I am this guy. I fit every cliché; I am the abstract villain of your imagined anxieties. Traveling while Muslim. "
— Rafat Ali
Editor’s Note: Last month at Skift Global Forum we introduced Permanxiety, a term we’re using to describe the current state of the traveler and the consumer mindset as a result of these global and local anxieties. As part of that, we included first person essays on travelers’ permanxieties, in order to better understand what we think about when we visit an airport, check in to a hotel, or visit a new destination.
These are similar to conversations that many of us have with friends or family, as well as how we think about things in our own heads. No matter your background, we think you’ll recognize something in these stories from your own experience. This first essay below is by Skift CEO and Founder Rafat Ali, on his experience through the years of living and traveling in post 9-11 America and outside of it.
THE demons in my head are real. They are real because they have been created over more than a decade and a half, bit by bit, indignity by indignity, layers upon layers of wounds big and small that have now calcified into my overanxious brain.
That is how I live it, a Muslim American immigrant, an apparent success story of the fabled American Dream, an entrepreneur and business owner and the CEO of Skift, a company that lives and breathes travel every waking hour.
In an age of permanxiety, as Skift has defined it in the opening essay, the anxieties of a Muslim traveler are a sociological condition I carry with me all the time. And it doesn’t stop there: My mere presence causes anxiety for other people during travel. Recently, Royal Jordanian Airlines came out with a powerful ad that mirrors many of these worries. The minute-long ad “Are you afraid of flying?” goes like this:
“I’m not afraid of flying… I’m not afraid of the risk of it. I’m afraid I end up somewhere I don’t want to go. Afraid of being stuck in a place with people who look at me differently. I’m afraid of the what-ifs. What if something wrong happens and they don’t believe me…?”
I am this guy. I fit every cliché; I am the abstract villain of your imagined anxieties. Traveling while Muslim. Doesn’t matter if you are practicing or not. Or you wear visible signs of being Muslim. There are dozens and dozens of permutations of typecasting us, and they all play out every day. Most of all, they settle down in our brains and play havoc while we travel.
Lots has been reported and written about the challenges regular Muslim travelers have had to endure since the day that 19 religious zealots who blamed their hatred on my religion changed the U.S. forever. But like pretty much everything else in media, the exploration has been mostly cosmetic, helicopter reporting by reporters (read: not Muslims) who get a few quotes out of us when some major incident happens and then package it up, tie it in a bow and that’s it. That’s where it stops. But American Muslim travelers themselves have rarely written about the mental cost that the last 15 or so years have brought on us, especially while traveling.
The security theater that passes for an attempt to secure the country is a theater that mostly plays out in our minds. Anxiety is the heaviest luggage we carry when we travel, nevermind whether anything actually happens or not.
“Paxex” is industry jargon short for “passenger experience” in the aviation world, usually used in the context of amenities: airport restaurants, in-flight Wi-Fi, seat comfort and such. No one ever talks about soothing the passengers’ minds as part of the paxex world — it is instead limited by “amenities.” Mostly because the ones defining or writing about it have never had to travel in an overanxious Muslim state of mind.
It starts long before you ever reach the airport. When you hesitate before booking an occasional one-way ticket, especially last-minute, worried your Muslim name may trigger a red flag in the security-industrial complex somewhere.
Worrying about packing a Quran or prayer rug or even an Arabic language book in your bag in case those are checked and misconstrued by immigration.
When you try and check in online and the message comes back: “Sorry we’re unable to process your check-in online, please check with the ticket agent at the airport.” This could be just an innocent technical error in the airline IT system, but it somehow lands in our minds as something else entirely. Yep, that darned Muslim name of ours has triggered a flag requiring an extra manual check at the airport.
It continues at the check-in counter at the airport, where the same thing may happen at the automated check-in machines and an agent has to check you in manually on her computer. Or when she stares intently into her computer, calls a supervisor, who then keys in a few more steps, adding extra minutes that keep the mind working through various scenarios of what they could be checking for or what could have gone wrong.
You always wonder what the ticket or TSA agent scribbles on your boarding pass, passing secret codes to the other agents down the line to give you extra scrutiny.
Like I said, both real and imagined demons of the overactive and overanxious mind.
This mental game continues at the passport check line, where the TSA agent looks you over a couple of seconds longer than others in front of you. Or maybe it didn’t happen but it felt like that to you. Then comes the security where you take off everything along with your dignity, and you voluntarily walk over to the larger scan machine because you know you will never ever be waved over to the more innocent old-school metal detector next to it that others may get a chance to go through, even if you’re with a toddler who needs his hand held.
The relief when you get through security then triggers a WhatsApp text back to your family: “I made it through security. Everything OK.” These texts to family and spouses are the delicate lifelines we hang onto during the whole airport experience through departure and arrival.
Then the boarding gate, where sometimes you imagine stares from travelers, worried whether they think we’re fidgeting too much. Or when you make that call to your family and suppress saying the traditional Muslim (Arabic) greeting “Salam walaikum” too loud into the phone, worrying that if anyone hears it they might raise an alarm.
A Muslim in our midst! In any other world this would be extreme paranoia of our own minds, but in the world we live in today, these incidents happen, fellow travelers freaking out over people talking in Arabic or uttering even a greeting. So we stick to hellos at the airports and last-minute “I’m boarded” calls.
Immigration checks on arrival are permanxiety nirvana for us Muslims, but even more so since the Trump administration came in. The Trump travel ban and mysterious Global Entry snafus for Muslim travelers. The laptop ban, which is not a ban but enhanced interrogation nonetheless, the social media checks for passengers from certain countries (and maybe even American Muslim citizens), it all lands hard. This is what makes you go through somewhat ridiculous lengths to “suppress” chances of being discriminated against, like carrying burner phones and laptops during your travel, as I have been doing this year. (Independent UK even did a story on me about this earlier this year.)
It means worrying when you have to travel to the Middle East or other “problem” areas for work, for leisure, or for family, and being questioned about it at immigration counters.
Beyond the air experience, booking at hotels is less fraught with issues of permanxiety. Hotels in general are structured to soothe the anxieties of travelers, but it isn’t always so. With Airbnb and the rise of alternative accommodations, a new layer has been added: instances of racism and discrimination from hosts against people of color or different religions or nationalities. Ever since instant booking (i.e. listings that don’t require approval from the host before they can be booked, basically how hotel bookings work) became a feature on Airbnb and HomeAway, Muslims like me just gravitate toward it over and above any other options, mainly to never have to face a situation of real or perceived discrimination in the first place.
Then the destinations you go to, depending on how open those societies are to differences, create differing levels of anxiety in you. Travel guidebooks write about how friendly a particular country is, but forget to add the unsaid caveat: that traveling while white — in most cases guidebook authors are white — is very different than traveling as a person of color. Or Muslim.
The discrimination that immigrants living in Western countries face also shows up for Muslim travelers in these countries and regions, and if you are a seasoned traveler, you find ways around them, or avoid these places altogether. Many American Muslims I know have a mental barrier to traveling in the American South, especially the Deep South, and when our American friends take a cross-country trip, we worry about the parts that may not be as friendly to drive through to us as Muslims as they may be to others. Hence it never figures in our plans, fairly or unfairly.
This is the permanent sociological condition we Muslims travel with, the permanxiety baggage that we carry.
Download Travel in an Age of Permanxiety magazine here
0 notes