#also two of my books are not time sensitive one of them is public domain and the other is dracula daily
Explore tagged Tumblr posts
Text
i’m already reading three books rn and i have two more borrowed from the library BUT there’s no wait for the tdou ebook. should i check it out (to reread, not first time)
#tdou#the darkness outside us#in a tdou mood#gonna make myself cry sooooo much i also have the first to die at the end and i’m starting that tomorrow#(when everyone is out of the house and i can sob in peace)#also two of my books are not time sensitive one of them is public domain and the other is dracula daily#my other current read is ninth house#and then i have a darker shade of magic and tftdate
3 notes
·
View notes
Text
“E” as in Eurus, Enola and Estate
In June this year the Conan Doyle Estate Ltd filed a lawsuit against an impending Holmes adaptation movie on Netflix (article from RadioTimes here: X).
Sherlock, Mycroft and Enola, starring Henry Cavill, Sam Claflin and Millie Bobby Brown.
This post about it by @tendergingergirl (X) seems to have gone largely unnoticed, but I think it deserves far more attention. In fact, it got me thinking “What’s all this actually about?” and looking a few things up.
My curiosity about the doings of this Estate began in December last year, before the release of BBC Dracula in January, when an interesting discussion initiated after an excellent meta by @yeah-oh-shit (X), who had made some investigations into previous copyright and public domain issues and lawsuits, which I had never known about before.
And now it turns out that the Conan Doyle Estate Ltd (from here on I’ll call them ‘ACD Estate’) is suing the film makers, along with Nancy Springer, author of a book series based on characters from the Holmes universe called The Enola Holmes Mysteries (2006-2010), for copyright infringement.
But I thought most of ACD’s Sherlock Holmes stories are now in public domain, including the Illustrious Client, the Sussex Vampire and the Three Garridebs, whose copyright under US law expired last year (2019)? Well, yes, but that’s still not all of them, and according to ACD Estate “for those of the stories whose copyright terms have ended, this action is brought within the three-year limitations period for infringement.”
More under the cut.
So, the ACD Estate’s copyright, they claim, still includes the following ten stories collected in The Casebook of Sherlock Holmes:
The Creeping Man (1923)
The Illustrious Client (1924)
The Three Garridebs (1924)
The Sussex Vampire (1924)
The Retired Colourman (1926)
The Lion’s Mane (1926)
The Three Gables (1926)
The Blanched Soldier (1926)
Shoscombe Old Place (1927)
The Veiled Lodger (1927)
The whole lawsuit can be downloaded as a PDF file from this news article (X), and it’s quite an interesting read.
Claims about Sherlock Holmes’ emotions
So, since this is not the first lawsuit from the ACD Estate about adaptations, what’s their beef with the film makers this time? As far as I can see from their claims, this is about Sherlock Holmes’ emotions.
This is how the ACD Estate reads Holmes’ character development in the lawsuit: “Conan Doyle made the surprising artistic decision to have his most famous character—known around the world as a brain without a heart—develop into a character with a heart. Holmes became warmer. He became capable of friendship. He could express emotion. He began to respect women. His relationship to Watson changed from that of a master and assistant to one of genuine friendship. Watson became more than just a tool for Holmes to use. He became a partner.”
They even quote the famous passage in The Three Garridebs (3GAR, 1924) where Watson says: “It was worth a wound—it was worth many wounds—to know the depth of loyalty and love which lay behind that cold mask.”
But all this progress, they claim, specifically happened within these ten still (allegedly) copyrighted stories, which Conan Doyle wrote after World War One, where he had the traumatic experience of losing both his son and his brother.
They claim that Holmes’ emotional development is still under their copyright (which I believe in practise means their power to decide whether to allow a film adaptation or not) and apart from the emotions issue, they also provide the following other examples of developments that are (supposedly) unique to these ten still copyrighted stories:
Holmes employs a knowledge of medicine in Watson’s absence
Holmes and Watson use modern technologies in detective work for the first time
Watson marries a second time during his association with Holmes (BLAN)
Holmes changes into someone who has great interest in dogs
Sherlock’s “secret sister”
The Enola Holmes Mysteries got me interested, and now I’ve read the two first of six instalments in total. The series is about Sherlock’s and Mycroft’s younger sister Enola, a clever teenager whom the brothers – in particular Mycroft - want to send away to a boarding school after their mother has disappeared and abandoned her. But Enola hates the idea of being confined to a place where she will be forced to wear a corset and restricted to a certain (‘female’) behaviour at all times. She escapes to London, where she starts a secret private detective career specialising in investigations of missing persons. Enola must keep ahead of her brothers who are determined to capture and force her to conform to Victorian society’s expectations for young women. She skilfully uses different disguises, just like Sherlock, and she meets John Watson pretending to be someone else. With her cleverness she manages to outwit even Sherlock. She is good at drawing and uses her sketches in her work. She manages to communicate with her mother (and eventually also with Sherlock) by using ciphers.
All of this does seem to have certain similarities with how Eurus Holmes is described in S4, doesn’t it?
Eurus is, like Enola, the secret Holmes sister whom we never have heard of before.
In TFP Mycroft claims Eurus’ intellect was superior to both Sherlock’s and his own; she was “incandescent”.
We see little Eurus draw sketches of her family members (not very pleasant sketches when it comes to Sherlock, though).
Mycroft made sure Eurus was sent away to an isolated prison/institution (Sherrinford) at an early age.
Their parents seemed absent and not particularly interested in the whereabouts of their own daughter (they didn’t even know she was alive); they let Mycroft and ‘Uncle Rudy’ take care of things, so one could easily suspect she was abandoned.
Eurus seems to have escaped to London at her own leisure, while Mycroft thought she was incarcerated.
Eurus appears in London under three different disguises: “E” (flirting and texting with John),
“Faith” (walking the streets of London with Sherlock)
and John’s new therapist.
Eurus makes riddles with codes for Sherlock to decipher (“The cipher was the song”).
So, one might wonder if the Eurus plot is – at least to some degree – inspired by Enola Holmes? On the other hand, while Eurus appears cold and calculating, Enola is compassionate and sensitive and makes mistakes because of emotional bias. Enola seems more similar to Eurus’ disguised personas than to the supposedly ‘real’ Eurus - the one who burned the family estate down and killed Victor Trevor.
I still believe that Eurus only exists inside Sherlock’s head in BBC Sherlock, being a part of himself, but that’s for another discussion.
As for the Holmes siblings, it’s also interesting that on the ACD Estate’s website, where they have a collection of ’facts’ about ACD’s characters, they seem to have included BBC Sherlock’s Eurus as a valid sibling of Sherlock and Mycroft (scroll down to “Holmes facts” on this page: X), even though this character is nowhere to be found in canon. Please correct me if I’m wrong about this, but the only reference I can find to ”the East Wind” in ACD’s stories is in His Last Bow (LAST, 1917), where Holmes says that ”There’s an east wind coming, Watson”, and goes on to talk about a cold, bitter wind that is threatening England; most probably a reference to WWI, which was raging at the time of publication. No one with the name Eurus is ever mentioned, though. If Eurus had already been part of canon, why would Mofftiss have claimed her to be the big ”rug-pull” in TFP?
I haven’t read the final part in the Enola Holmes series (X) yet, where allegedly Enola reconciles with her brothers (Sherlock in particular) and they end up respecting her independence and skills. But according to several reviews Sherlock softens up a bit in the end. In the parts I have read, the two adult brothers appear rather conservative, patronising and sexist towards their younger sister – indeed more condescending than I think Holmes view of women actually is described in ACD’s original stories (allegedly – we never see him treat women badly in practice, do we?). At any rate, I haven’t this far been able to find a single specific plot element from the ten (supposedly) still copyrighted stories in Springer’s work.
In their lawsuit, the ACD Estate claims that “The Springer novels make extensive infringing use of Conan Doyle’s transformation of Holmes from cold and critical to warm, respectful, and kind in his relationships. Springer places Enola Holmes at the center of the novels and has Holmes initially treat her coolly, then change to respond to her with warmth and kindness.”
So what they’re doing here is the same thing they’ve done before (and lost): they’re claiming they still own some intrinsic characteristics of Sherlock Holmes, even though most of the stories are already in public domain.
Other lawsuits
A similar lawsuit towards Miramax (X) was made in 2015 for the film Mr Holmes, which had Ian McKellen as protagonist. But it ended in settlement before the defendants had responded to the accusations, which were similar to those regarding Enola Holmes about Holmes’ emotional life, but also had to do with the details of Holmes’ life as a retired man.
So, this is not the first time the copyright owners are interfering with content in Holmes adaptations. To complicate things further there seems to be two different estates claiming copyright for Doyle’s work. In 2010 there was some reporting that another estate had threatened Guy Richie’s Sherlock Holmes movies with disapproval after Robert Downey Junior had discussed Holmes possibly being gay on a TV show (X). According to Digital Spy, Andrea Plunket, who then represented the ‘Arthur Conan Doyle Literary Estate’, said: "I hope this is just an example of Mr Downey's black sense of humour. It would be drastic, but I would withdraw permission for more films to be made if they feel that is a theme they wish to bring out in the future. I am not hostile to homosexuals, but I am to anyone who is not true to the spirit of the books."
It’s very unclear which legal rights Andrea Plunket’s family (Andrea apparently died in 2016) actually has to represent ACD’s work, though. Andrea had been married to one of the copyright owners, and her family’s money had paid for the purchase of those rights, but after her divorce Andrea seems to have lost her part in the copyright, according to @mallamun on tumblr: (X). There’s also a lot of interesting things to read about these copyright issues in an article by Mattias Bodström from 2015: (X). However, there’s still a website from ‘Arthur Conan Doyle Literary Estate’ claiming ownership of the stories: X, and they have published a detailed account of their version of the matter (X).
The current case
I have no idea what the court will think about these new accusations against Netflix et al, but to me, if this isn’t farfetched, I don’t know what is. I think a good case could be made for most of these ‘unique’ elements listed above being expressed already before the Case Book. For example, in His Last Bow (LAST, 1917) they use a car, in The Dying Detective (DYIN, 1913) Holmes manages to fool Dr Watson that he’s very sick. When Watson declares his intent to marry for the first time already in The Sign of Four (SIGN, 1890), Holmes resorts to drugs. The dogs are all over the place since day one, and Holmes seems to appreciate them very much, not least Toby in SIGN.
And don’t get me started on the contradictions in Watson’s various discussions of whether Holmes has a heart. Holmes’ actions of helping people often contradicts the image of a cold, emotionless person. The Yellow Face (YELL, 1893) ends with Holmes being deeply repentant for being over-confident in his suspicion of a woman for adultery or maybe worse offences, when she was actually only trying to protect her little daughter from society’s racism.
In the Devil’s Foot (DEVI, 1910) there’s the following conversation (my bolding): “Upon my word, Watson!” said Holmes at last with an unsteady voice, “I owe you both my thanks and an apology. It was an unjustifiable experiment even for one’s self, and doubly so for a friend. I am really very sorry.” “You know,” I answered with some emotion, for I had never seen so much of Holmes’s heart before, “that it is my greatest joy and privilege to help you.”
Why on earth would it be a “surprising artistic decision” from ACD to develop Holmes into a little more caring and openly compassionate person as he grew older? Isn’t that the very classical character development of any literary hero’s journey and also a logical personal development for many people in the real world? It’s called ‘learning’ and ‘maturing’, as far as I know. To claim this is infringement of some unique idea is frankly ridiculous.
In short: They make a very literal, textual interpretation of the Holmes character, cherry-picking the parts that suit their interests, they claim there’s a clear story arc with very separate characteristics before and after WWI, and that they own the end of it. Thus, no adaptation with a progressive story arc regarding Holmes’ character would be permitted without their consent. Since apparently BBC Sherlock have ACD’s Estate’s license for their own franchise, this just makes me wonder how much trouble Mofftiss et al had with including things like Sherlock’s and John’s hug in TLD, or his emotional breakdown with the coffin after Eurus’ experiments on him in TFP.
Possible satirical meaning and small hints
Allow me to speculate a bit about the possible implications of BBC Sherlock in relation to the Estate. In a recent excellent meta by @raggedyblue, the ACD Estate as ‘Doyle’s bank’ is discussed, regarding the significance of the banker Sebastian Wilkes in The Blind Banker (X). Many interesting ideas are presented in this meta, I really recommend a read. This topic also initiated an interesting discussion about Doyle himself mirroring John in this post by @devoursjohnlock (X).
In an addition to that meta @shylockgnomes brings up John’s blog post about Tilly Briggs as another possible reference to the Estate (X). I totally agree with this; some time around the release of BBC Dracula this year, and our discussions about legal issues connected to both shows, I stumbled upon this particular ‘aborted’ blog post and came to realise its possible significance. It gave me the idea to change the title of my own blog to “Tilly Briggs Ship with Johnlock on it”, since I suspect that the blog post might be a clue about legal obstacles to a certain relationship. And that title is staying, at least until we know the true story (if ever).
Canon contains some info about Matilda Briggs is in The Sussex Vampire, one of the late ACD stories that should be in public domain by now, since the copyright supposedly expired in December 2019. But, as shown above, the Estate now claims there’s a three-year lapse when they can still sue for infringement. Here’s the quote from SUSS (my bolding): “Matilda Briggs was not the name of a young woman, Watson,” said Holmes in a reminiscent voice. “It was a ship which is associated with the giant rat of Sumatra, a story for which the world is not yet prepared.” Sumatra, by the way, was Sherlock’s preferred destination in the TST tale of the merchant who met Death in Samarra. In Sherlock’s version, according to Mycroft, the merchant survived and became a pirate... ;-)
John’s aborted blog post (X) is titled “Tilly Briggs Cruise of Terror”, which just might be yet another little jibe at the Estate. John says that “I had to take this post down for a while as the ship's owners are launching an appeal”. According to Jacob Sowersby (a Sherlock fan on the blog) and Mike Stamford, this was “mind-blowing stuff”:
So I can’t help thinking this sounds like a hint to us about the Estate and a certain ‘ship’ which is still partly in their (legal) power and control. In fact, it wouldn’t surprise me if the whole show - on the meta level - is partly meant as a satirical commentary on how Holmes’ and Watson’s characters, and therefore also their relationship, have been treated the last 100+ years by their ‘owners’. A treatment where I believe the hetero norm has always ruled, and where Andrea Plunket’s quote above indicates that homophobia regarding Holmes and Watson is still tied to legal obstacles.
Charles Augustus Magnussen also talks about ownership at the beginning of HLV (thanks for the quotes, Ariane DeVere): “Of course it isn’t blackmail. This is... ownership”. And later in the episode: “It’s all about knowledge. Everything is. Knowing is owning”. In fact, quite a bit of emphasis in HLV is put on Magnussen’s ‘ownership’ of characters people: “I’m a businessman, acquiring assets. You happen to be one of them!” Apparently - as this new lawsuit shows - it’s even possible to make money out of Holmes’ emotions.
@catwillowtree also pointed out, in another additional thread to @raggedyblue’s meta, that Eurus’ burning down Musgrave Hall – the family estate - in TFP also seems like a reference to the ACD Estate. I would add to this, saying that the bomb that didn’t go off in TEH and the “patience grenade” that did go off in TFP might have to do with the same issue. What would happen if the ‘bomb’ of Johnlock would go off before the relevant stories are legally in public domain? Most probably another lawsuit from the Estate, which might become very expensive.
Come to think of it, in TGG Greg Lestrade mentions an estate agent, when Sherlock receives a text message and a phone call on the pink phone from Moriarty: “What the hell are we supposed to make of that? An estate agent’s photo and the bloody Greenwich pips!” Well, if the Estate agent is somehow connected to the five pips, that fandom theory of the pips representing five series in the show comes to mind... For every pip in TGG there’s a victim covered in explosives; a huge bomb threatening to go off. (The third bomb did go off in TGG, but in S3 Sherlock found the ‘off-switch’ in time). If the fifth bomb is to explode in S5, I bet it won’t be until the relevant stories are safely in public domain. 2023?
More wild speculation while I’m at it: Maybe Sherlock and Ajay’s smashing of Thatcher busts in TST also ties in metaphorically to the same topic? The Thatcher era was not easy for LGBTQ people. There are several owners in TST whose Thatcher busts need to be smashed in order for Ajay’s lost memory stick to be recovered. AGRA is referred to as Ajay’s and Mary’s “family”. The memory stick contains personal information, ‘who you really are’. Could be read as if the info of who Sherlock Holmes really is can only be released once certain obstacles are overcome...
In another interesting meta from last year by @yeah-oh-shit (X), they mention the secret underground station at Sumatra road in TEH, where Howard Shilcott tells Sherlock and John that “They built the platforms, even the staircases, but it all got tied up in legal disputes, so they never built the station on the surface.” So maybe S5 is basically already written? It would make sense to me if the long hiatus we’re facing right now has a far more logical reason than the excuses Mofftiss have presented in interviews - the risk of legal disputes with the copyright owners.
Tagging some more people who might be interested: @gosherlocked @ebaeschnbliah @sarahthecoat @sagestreet @thepersianslipper
ETA: I have corrected some details about the copyright owners in this post; thanks @devoursjohnlock for pointing them out!
129 notes
·
View notes
Text
The King’s Men
The King’s Men is the third book in the All for the Game written by Nora Sakavic. If you haven’t read the previous two books, then first off, why are you reading this, second, I will SPOIL EVERYTHING that happens in them. Got it? Good. Let’s start.
I read the Raven King and started writing a review, that I just couldn’t finish. I was so shell-shocked, so absolutely floored by the way that book ends, that I couldn’t put any of the things I felt into words, and by the time I felt I could write something, I had forgotten some of the things that happened in the first half of the book. I had no desire to reread it; I had no desire to read anything really, that’s how deep the reading slump that book threw me in was. I wasn’t sure I would ever finish the series. Well, finish the series I did, and I’m happy to say that this was my favorite book. In most ways I liked it the same as book 2, but the ending really bumped it up a notch higher than The Raven King. We pick up right after the end of book 2; Neil Josten somehow managed to survive the brutality of Edgar Allen, and is back in Palmetto State, at the same time that Andrew is released from the hospital. Things aren’t looking great for the team: now that Andrew is back and off his meds, the team is back to antagonism and their 2 separate groups, something they can’t afford if they have any hopes of making to the Championship. Moreover, now that the Moriyamas know who Neil is, he can no longer hide behind his identity, and his past might finally be catching up to him. I think it’s best to go through the same points I had for the first book, so let’s start with The Plot: This is the longest book, and as such it’s the most involved plot. Not only do we follow the preliminary rounds leading up to the Spring Championship, but we also have to deal with all the revelations from the previous book: what Rico does to his teammates, his constant threats and psychological warfare over the Foxes, Kevin’s guilt for abandoning Jean to Rico’s whims, Kevin’s parentage, Neil knowing about Kevin’s parentage and Rico and Kevin knowing the truth about Neil. There is also the fact that due to Rico’s intervention Neil is now visible to the public, and of course, Andrew being sober after 2 full years of medication. It’s a lot to cover, and for the most part, I think the book handles all of these threads well. Like always with this series, I have a lot of questions that I’m sure will never be answered, so let’s start with the most obvious: the mafia plot. I was surprised to see the plot with Neil’s dad culminating around the book’s midpoint; it’s resolved before any of the Championship stuff is, which was an odd choice. The Championship, as important as it is to Neil, is still just a game; his father on the other hand is a murderer who has spent the last 8 years trying to kill Neil, and has successfully killed his mother. This section of the book was the hardest for me to read; I don’t know what it is about Sakavic wanting for Neil to suffer the most gruesome violence, but the amount of abuse this poor child has gone through is almost insane, considering he’s 19. Maybe because of what happened to him in Edgar Allen I was more prepared for the torture in this, maybe it was because I finally got desensetised to the amount of abuse in these books, but I found this slightly less emotionally taxing to read than the ending of book 2. It’s still incredibly gruesome and if you are at all triggered by this kind of stuff, stay far far away from this book (though really what are you doing reading book 3 in a series). I am not squeamish about violence or torture, but even I needed to take breaks. How Nathan’s men find Neil was something I wasn’t super clear on, but what I especially wasn’t clear on was the aftermath. I genuinely thought Nathan might maim Neil, since I had no idea what could possibly happen to get him out of that situation, and when Stuart appeared, I was shocked. His character is set up, all the way back in book 1, but I had genuinely forgotten about him in the midst of everything else, and he was welcome reveal I had not seen coming. The plot with the FBI was just bizarre to me. I have heard of people who can refuse being put under witness protection before, so that wasn’t off putting; what was, was the Feds agreeing to not only bring the Foxes to Neil, but also allow Andrew to stay with Neil the whole time he is telling them his story! I find that very hard to believe; no agency in their right mind would want an unrelated party knowing so much sensitive information about an ongoing case. In the end, we also never find out what happens to the Butcher’s Kingdom? Did they ever catch Jensen and his brother? Then there are the Moriyamas. I found the scene between Ichorou and Neil kind of funny, in how hard it tried to paint Ichorou as this dangerous, violent man who commands so much respect, while also being described as barely a 20 year old. I did appreciate that Neil was still as sharp and clever as ever, and the way he spins the events of the past two books to not only make Coach Moriyama and Rico as the villains, but also secure a future for himself, Kevin and Jean was amazing. The ending was… interesting. Look, here’s the thing: Rico absolutely was a piece of shit. He was abusive, sadistic, arrogant, unhinged and violent, and he was never shown to have any kind of redeeming qualities or even the possibility of change. But he was also still a victim; Exy was all he had, all he would ever have, and his relentless desire to get noticed by his father was humanizing. He shared that one trait with Neil and seeing him being shown a single act of kindness by Ichorou and then immediately getting shot in the head before Neil was horrifying. The fact that Neil has no morsel of remorse for him too? That was cold. Like father like son. Also does this mean that Edgar Allen won’t be a prison anymore? Evermore is no longer the Moriyama domain? Is Ichorou washing his hands off of exy? Speaking of exy, all of my criticisms still stand. However, I will say that I got used to it enough to where I honestly didn’t care or notice how out of place it was anymore. With everything happening in this book, worrying about the intricacies of how exy tied into this world became irelevant. This didn’t make the games bad or irrelevant though; I enjoyed all of the matches, especially the last 3, where some strategies and positions were changed around. Having Neil play defense against Rico was sweet revenge; I also liked that the final goal was almost a non-presence, because Neil doesn’t even know it’s happening. He’s so tired and so lost in his head that he doesn’t even realize they’d won. Honestly, having people positioned as they were at the end of the book, I almost wanted to find out more of how the world of exy looked. With Jean going to UTC, the Ravens under new management, Renee, Alison, and Dan leaving Palmetto, and Neil as captain, it would have been fun to see how the sport and the game changed. Look at me, praising a fake sport that I hated so much in book 1. Characters: I don’t think anyone reads this series for exy though, let’s be real. No, the real draw are the characters, and the relationships between them. The bulk of the character development came down in book 2; book 2 was where we found out what Andrew’s backstory was, why he and Aaron hate each-other, Nicky’s family situation, Renee’s backstory, the fallout of Seth’s murder, everything to do with Rico, Kevin and Jean, and Wymack. This book builds on all of that; Neil takes front and center role, and I really liked that. He has finally accepted that he is the glue that holds the team together; even when he’s faced with his imminent death, his first priority is protecting Andrew and the rest of the Foxes, even if that means leaving them again, knowing full well his absence would destroy them. Neil constantly thinks of himself as selfish, because he’s been taught that wanting anything other than survival is selfish, but he’s nothing but selfless. Andrew puts it best, he has a martyr complex, and he genuinely wants to do right by everyone, even if that means having little to no regard for his physical safety. He risks abuse and injuries to get people to come together, and honestly, anyone who spends time trying to crack Andrew’s shell is a saint. I didn’t much care for the Foxes when I met them, but in this book, I had fallen in love with all of them. Dan was always great, though she takes a back seat here, mostly so we can have more time to get to know the rest of the cast. Renee was always the character I struggled with the most, but I liked her a lot here. I liked that she knew exactly when to push and when to leave things be, both with Andrew and Neil. I honestly wish we could have been in her perspective when she got Jean out of Evermore, that was such a badass scene. I liked Alison least in book 1, but I loved her here. She was an amazing character; I loved that she and Neil finally got a chance to talk and come to terms with Neil being responsible for Seth’s death, that she was allowed to be angry with Neil for the entirety for book 2. She is unapologetic about everything, from how hot, rich and done up she is, to how devoted and aggressive at exy she is too. I also loved that she was the one who got the trophy shelf. Matt was always my favorite character, and he was just a gem here. I always loved him the most out of the boys, and nothing has changed; he is as funny and kind, as ever, and he was always there for Neil, even when Neil wouldn’t admit he needed help. Also his reaction to the Maserati was priceless. Nicky was the one character who I was never sold on. He is the emotional core of the group in the sense that he gives Neil the push he needs to finally recontextualize his life and his priorities. He’s a man who just wants very badly to be liked and loved, and he’s constantly put in situations where he isn’t able to do that. Nicky was more prominent in book 2, though, so this book didn’t develop him any further. Kevin too was someone who got the bulk of his character development in book 2, but seeing him finally step into his own, stand up to Rico, take control over his life and get the 2 tattoo of his face was amazing. I loved that he got there gradually, but he still got there, and though he never became any more likable, it was so gratifying to see his growth. Aaron was the character I never liked, and I absolutely didn’t like him here either. That fight he has with Neil pissed me off so much, and I loved that Andrew picked Neil over Aaron, which at least showed me that he was a little more observant than he looked. Finally Andrew. Almost more than Neil, this series revolves around Andrew. Everything Neil does is to protect Andrew, which was a complete 180 from book 1, where Neil was willing to risk Andrew’s life just for a chance to play exy. Like Kevin, Andrew never becomes more likable, and his development is rather subtle and slight, but it’s still such a different place from where he started in book 1. He never truly becomes a good person, but he learns to accept people for the decisions that they make, and to let at least one other person in. His relationship with Neil was so well developed, that authors should learn how to write a good slowburn from it. The slow build of first begrudging trust, then friendship and finally romance was excellent, and for one I really didn’t mind the whole ‘I don’t care about gender, because I’m only attracted to you’ trope. I loved the revelation of Andrew’s photographic memory, because it tied so well with both his character and the scene where Neil asks him how Andrew can let anyone touch or kiss him after everything he’s been through. That he trusts Neil because he knows Neil would never do anything Andrew would say no to was really great. I also fucking called the whole he’s taking drugs for being a psychopath; it feels so good to be vindicated. Overall, I really enjoyed this final book. The series as a whole does have a lot of flaws, and it’s definitely an acquired taste, but I’m glad I read it. Each book kept getting better, and I feel like Sakavic really hit her stride with the second and this book in terms of her characters and plot. It’s a classic YA series for a reason, and I do recommend it if you can stomach the abuse/violence; I’d be curious to read anything else this author has in store.
1 note
·
View note
Text
Solving Common Cross-Platform Issues When Working With Flutter
When mistreatment cross-platform frameworks, folks may forget the nuances of every of the platforms they need their code to run on. This text aims to handle that.
Specifically, people sometimes confuse it with the older Web-based mobile (and desktop) cross-platform frameworks, which basically were just Web pages running within browsers running within a wrapper app.
That was truly cross-platform in the sense that the interfaces were the same anyway because you only had access to the interfaces normally accessible on the Web.
Flutter isn’t that, though: it runs natively on each platform, and it means each app runs just like it would run if it were written in Java/Kotlin or Objective-C/Swift on Android and iOS, pretty much. You need to know that because this implies that you need to take care of the many differences between these very diverse platforms.
Example 1: Storage
I recently wrote on my diary concerning the necessity for a special approach to storing JWTs in net apps compared to mobile apps. That is due to the various nature of the platforms’ storage choices, and therefore the got to recognize every and their native development tools.
WEB
When you write a Web app, the storage options you have are:
1. Downloading/uploading files to/from disk, which requires user interaction and is therefore only suitable for files meant to be read or created by the user.
2. Using cookies, which may or may not be accessible from JS (depending on whether or not they’re httpOnly) and are automatically sent along with requests to a given domain and saved when they come as part of a response.
3. Using JS localStorage and sessionStorage, accessible by any JS on the website, but only from JS that is part of the pages of that website.
MOBILE
The situation when it comes to mobile apps is completely different. The storage options are the following:
1. Local app documents or cache storage, accessible by that app.
2. Other local storage paths for user-created/readable files.
3. NSUserDefaults and SharedPreferences respectively on iOS and Android for key-value storage.
4. Keychain on iOS and KeyStore on Android for secure storage of, respectively, any data and cryptographic keys.
If you don’t recognize that, you’re getting to build a multitude of your implementations as a result of you would like to understand what storage answer you’re truly exploitation and what the benefits and downsides area unit.
CROSS-PLATFORM SOLUTIONS: AN INITIAL APPROACH
Using the Flutter shared_preferences package uses localStorage on the Web, SharedPreferences on Android and NSUserDefaults on iOS. Those have utterly completely different implications for your app, particularly if you’re storing sensitive info like session tokens: localStorage are often scan by the shopper, thus it’s a tangle if you’re prone to XSS. although mobile apps aren’t very prone to XSS, SharedPreferences and NSUserDefaults don't seem to be secure storage ways as a result of they will be compromised on the shopper facet since they're not secure storage and not encrypted. That’s as a result of they're meant for user preferences, as mentioned here within the case of iOS and here within the robot documentation once talking concerning the protection library that is meant to produce wrappers to the SharedPreferences specifically to inscribe the info before storing it.
SECURE STORAGE ON MOBILE
The only secure storage solutions on mobile are Keychain and KeyStore on iOS and Android respectively, whereas there is no secure storage on the Web. The Keychain and KeyStore area unit terribly completely different in nature, though: Keychain could be a generic credentials storage resolution, whereas the KeyStore is employed to store (and will generate) science keys, either stellate keys or public/private keys.
This means that if, for example, you would like to store a session token, on iOS you'll be able to let the OS manage the coding half and simply send your token to the Keychain, whereas on humanoid it’s a small amount a lot of of a manual expertise as a result of you would like to get (not hard-code, that’s bad) a key, use it to cypher the token, store the encrypted token in SharedPreferences and store the key within the KeyStore. There area unit completely different approaches to it, as area unit most things in security, however the only is perhaps to use stellate coding, as there's no want for public key cryptography since your app each encrypts and decrypts the token. Obviously, you don’t have to be compelled to write mobile platform-specific code that will all of that, as there is a Flutter plugin that does all of that, for instance.
THE LACK OF SECURE STORAGE ON THE WEB
That was, actually, the rationale that compelled ME to put in writing this post. I wrote regarding exploitation that package to store JWT on mobile apps and other people wished the net version of that however, as I said, there's no secure storage on the net. It doesn’t exist. Does that mean your JWT must be get in the open? No, not at all. you'll be able to use httpOnly cookies, can’t you? Those area unitn’t accessible by JS and are sent solely to your server. the problem thereupon is that they’re continuously sent to your server, notwithstanding one amongst your users clicks on a GET request address on somebody else’s web site which GET request has aspect effects you or your user won’t like. This really works for different request varieties moreover, it’s simply a lot of sophisticated. It’s referred to as Cross-Site Request Forgery and you don’t wish that. It’s among the net security threats mentioned in Mozilla’s MDN docs, wherever you'll be able to notice a a lot of complete rationalization. There area unit interference strategies. the foremost common one has 2 tokens, actually: one amongst them aiming to the shopper as Associate in Nursing httpOnly cookie, the opposite as a part of the response. The latter must be hold on in localStorage and not in cookies as a result of we have a tendency to don’t wish it to be sent mechanically to the server.
SOLVING BOTH
What if you have both a mobile app and a Web app? That can be dealt with in one of two ways:
1. Use the same backend endpoint, but manually get and send the cookies using the cookie-related HTTP headers;
2. Create a separate non-Web backend endpoint that generates different token than either token used by the Web app and then allow for regular JWT authorization if the client is able to provide the mobile-only token.
Running Different Code On Different Platforms
Now, let’s see how we can run different code on different platforms in order to be able to compensate for the differences.
CREATING A FLUTTER PLUGIN
Especially to unravel the matter of storage, a technique you'll do this is with a plugin package: plugins offer a typical Dart interface and might run totally different code on different platforms, together with native platform-specific Kotlin/Java or Swift/Objective-C code. Developing packages and plugins is quite complicated, however it’s explained in several places on the net et al. (for example in Flutter books), together with the official Flutter documentation. For mobile platforms, for example, there already may be a secure storage plugin, and that’s flutter_secure_storage, that you'll notice associate example of usage here, however that doesn’t work on the net, as an example.
On the opposite hand, for easy key-value storage that additionally works on the net, there’s a cross-platform Google-developed first-party plugin package known as shared_preferences, that incorporates a Web-specific part known as shared_preferences_web that uses NSUserDefaults, SharedPreferences or localStorage reckoning on the platform.
TARGETPLATFORM ON FLUTTER
After importing package:flutter/foundation.dart, you can compare Theme.of(context).platform to the values:
TargetPlatform.android
TargetPlatform.iOS
TargetPlatform.linux
TargetPlatform.windows
TargetPlatform.macOS
TargetPlatform.fuchsia
and write your functions so that, for each platform you want to support, they do the appropriate thing. This will come especially useful for the next example of platform difference, and that is differences in how widgets are displayed on different platforms.
For that use case, in particular, there is also a reasonably popular flutter_platform_widgets plugin, which simplifies the development of platform-aware widgets.
Example 2: Differences In How The Same Widget Is Displayed
You can’t simply write cross-platform code and fake a browser, a phone, a computer, and a smartwatch area unit a similar factor — unless you wish your humanoid and iOS app to be a WebView and your desktop app to be designed with lepton.
There area unit many reasons to not try this, and it’s not the purpose of this piece to convert you to use frameworks like Flutter instead that keep your app native, with all the performance and user expertise blessings that go with it, whereas permitting you to jot down code that's progressing to be a similar for all platforms most of the time.
That requires care and a focus, though, and a minimum of a basic data of the platforms you wish to support, their actual native genus Apis, and every one of that.
React Native users have to be compelled to pay even additional attention thereto as a result of that framework uses the inherent OS widgets, thus you really have to be compelled to pay even additional attention to however the app appearance by testing it extensively on each platforms, while not having the ability to modify between iOS and Material device on the fly like it’s potential with Flutter..
WHAT CHANGES WITHOUT YOUR REQUEST
There are some aspects of the UI of your app that are automatically changed when you switch platforms. This section also mentions what changes between Flutter and React Native in this respect.
Between Android And iOS (Flutter)
Flutter is capable of rendering Material widgets on iOS (and Cupertino (iOS-like) widgets on Android), however what it DOESN’T do is show precisely the same factor on robot and iOS: Material theming particularly adapts to the conventions of every platform.
For instance, navigation animations and transitions and default fonts area unit completely different, however those don’t impact your app that abundant. What might have an effect on a number of your decisions once it involves aesthetics or wife is that the indisputable fact that some static components conjointly modification.
Specifically, some icons modification between the 2 platforms, app bar titles area unit within the middle on iOS and on the left on robot (on the left of the on the market area just in case there's a back button or the button to open a Drawer (explained here within the Material style pointers and conjointly called a hamburger menu). Here’s what a fabric app with a Drawer feels like on Android:
And what the same, very simple, Material app looks like on iOS:
Between Mobile and Web and With Screen Notches (Flutter)
On the online there's a small amount of a unique state of affairs, as mentioned conjointly during this Smashing article regarding Responsive net Development with Flutter: specifically, additionally to having to optimize for larger screens and account for the means folks expect to navigate through your web site — that is that the main focus of that article — you have got to stress regarding the very fact that generally widgets square measure placed outside of the browser window.
Also, some phones have notches within the high a part of their screen or different impediments to the proper viewing of your app attributable to some form of obstruction. Both of those issues may be avoided by wrapping your conveniences during a SafeArea widget, that may be a explicit reasonably cushioning convenience that makes certain your widgets comprise an area wherever they will really be displayed empty preventive the users’ ability to envision them, be it a hardware or code constraint.
IN REACT NATIVE
React Native needs far more attention and a way deeper information of every platform, additionally to requiring you to run the iOS machine furthermore because the mechanical man human at the terribly least so as to be able to check your app on each platforms: it’s not identical and it converts its JavaScript UI parts to platform-specific widgets.
In alternative words, your React Native apps can invariably seem like iOS — with Cupertino UI parts as they're generally known as — and your mechanical man apps can invariably seem like regular Material style mechanical man apps as a result of it’s victimization the platform’s widgets. The distinction here is that Flutter renders its widgets with its own low-level rendering engine, which implies you'll be able to check each app versions on one platform.
Getting Around That Issue
The Other Side: Using The Wrong Widgets For The Right Reasons
But that also means that you can do most of your Flutter development on a Linux or Windows workstation without sacrificing the experience of your iOS users, and then just build the app for the other platform and not have to worry about thoroughly testing it.
Next Steps Cross-platform frameworks are awesome, but they shift responsibility to you, the developer, to understand how each platform works and how to make sure your app adapts and is pleasant to use for your users. Other small things to consider may be, for example, using different descriptions for what might be in essence the same thing if there are different conventions on different platforms.It’s great to not have to build the two (or more) apps separately using different languages, but you still need to keep in mind you are, in essence, building more than one app and that requires thinking about each of the apps you are building.
We will be happy to answer your questions on designing, developing, and deploying comprehensive enterprise web, mobile apps and customized software solutions that best fit your organization needs. As a reputed Software Solutions Developer we have expertise in providing dedicated remote and outsourced technical resources for software services at very nominal cost. Besides experts in full stacks We also build web solutions, mobile apps and work on system integration, performance enhancement, cloud migrations and big data analytics. Don’t hesitate to
get in touch with us!
0 notes
Text
Solving Common Cross-Platform Issues When Working With Flutter
When mistreatment cross-platform frameworks, folks may forget the nuances of every of the platforms they need their code to run on. This text aims to handle that.
Specifically, people sometimes confuse it with the older Web-based mobile (and desktop) cross-platform frameworks, which basically were just Web pages running within browsers running within a wrapper app.
That was truly cross-platform in the sense that the interfaces were the same anyway because you only had access to the interfaces normally accessible on the Web.
Flutter isn’t that, though: it runs natively on each platform, and it means each app runs just like it would run if it were written in Java/Kotlin or Objective-C/Swift on Android and iOS, pretty much. You need to know that because this implies that you need to take care of the many differences between these very diverse platforms.
Example 1: Storage
I recently wrote on my diary concerning the necessity for a special approach to storing JWTs in net apps compared to mobile apps. That is due to the various nature of the platforms’ storage choices, and therefore the got to recognize every and their native development tools.
WEB
When you write a Web app, the storage options you have are:
1. Downloading/uploading files to/from disk, which requires user interaction and is therefore only suitable for files meant to be read or created by the user.
2. Using cookies, which may or may not be accessible from JS (depending on whether or not they’re httpOnly) and are automatically sent along with requests to a given domain and saved when they come as part of a response.
3. Using JS localStorage and sessionStorage, accessible by any JS on the website, but only from JS that is part of the pages of that website.
MOBILE
The situation when it comes to mobile apps is completely different. The storage options are the following:
1. Local app documents or cache storage, accessible by that app.
2. Other local storage paths for user-created/readable files.
3. NSUserDefaults and SharedPreferences respectively on iOS and Android for key-value storage.
4. Keychain on iOS and KeyStore on Android for secure storage of, respectively, any data and cryptographic keys.
If you don’t recognize that, you’re getting to build a multitude of your implementations as a result of you would like to understand what storage answer you’re truly exploitation and what the benefits and downsides area unit.
CROSS-PLATFORM SOLUTIONS: AN INITIAL APPROACH
Using the Flutter shared_preferences package uses localStorage on the Web, SharedPreferences on Android and NSUserDefaults on iOS. Those have utterly completely different implications for your app, particularly if you’re storing sensitive info like session tokens: localStorage are often scan by the shopper, thus it’s a tangle if you’re prone to XSS. although mobile apps aren’t very prone to XSS, SharedPreferences and NSUserDefaults don't seem to be secure storage ways as a result of they will be compromised on the shopper facet since they're not secure storage and not encrypted. That’s as a result of they're meant for user preferences, as mentioned here within the case of iOS and here within the robot documentation once talking concerning the protection library that is meant to produce wrappers to the SharedPreferences specifically to inscribe the info before storing it.
SECURE STORAGE ON MOBILE
The only secure storage solutions on mobile are Keychain and KeyStore on iOS and Android respectively, whereas there is no secure storage on the Web. The Keychain and KeyStore area unit terribly completely different in nature, though: Keychain could be a generic credentials storage resolution, whereas the KeyStore is employed to store (and will generate) science keys, either stellate keys or public/private keys.
This means that if, for example, you would like to store a session token, on iOS you'll be able to let the OS manage the coding half and simply send your token to the Keychain, whereas on humanoid it’s a small amount a lot of of a manual expertise as a result of you would like to get (not hard-code, that’s bad) a key, use it to cypher the token, store the encrypted token in SharedPreferences and store the key within the KeyStore. There area unit completely different approaches to it, as area unit most things in security, however the only is perhaps to use stellate coding, as there's no want for public key cryptography since your app each encrypts and decrypts the token. Obviously, you don’t have to be compelled to write mobile platform-specific code that will all of that, as there is a Flutter plugin that does all of that, for instance.
THE LACK OF SECURE STORAGE ON THE WEB
That was, actually, the rationale that compelled ME to put in writing this post. I wrote regarding exploitation that package to store JWT on mobile apps and other people wished the net version of that however, as I said, there's no secure storage on the net. It doesn’t exist. Does that mean your JWT must be get in the open? No, not at all. you'll be able to use httpOnly cookies, can’t you? Those area unitn’t accessible by JS and are sent solely to your server. the problem thereupon is that they’re continuously sent to your server, notwithstanding one amongst your users clicks on a GET request address on somebody else’s web site which GET request has aspect effects you or your user won’t like. This really works for different request varieties moreover, it’s simply a lot of sophisticated. It’s referred to as Cross-Site Request Forgery and you don’t wish that. It’s among the net security threats mentioned in Mozilla’s MDN docs, wherever you'll be able to notice a a lot of complete rationalization. There area unit interference strategies. the foremost common one has 2 tokens, actually: one amongst them aiming to the shopper as Associate in Nursing httpOnly cookie, the opposite as a part of the response. The latter must be hold on in localStorage and not in cookies as a result of we have a tendency to don’t wish it to be sent mechanically to the server.
SOLVING BOTH
What if you have both a mobile app and a Web app? That can be dealt with in one of two ways:
1. Use the same backend endpoint, but manually get and send the cookies using the cookie-related HTTP headers;
2. Create a separate non-Web backend endpoint that generates different token than either token used by the Web app and then allow for regular JWT authorization if the client is able to provide the mobile-only token.
Running Different Code On Different Platforms
Now, let’s see how we can run different code on different platforms in order to be able to compensate for the differences.
CREATING A FLUTTER PLUGIN
Especially to unravel the matter of storage, a technique you'll do this is with a plugin package: plugins offer a typical Dart interface and might run totally different code on different platforms, together with native platform-specific Kotlin/Java or Swift/Objective-C code. Developing packages and plugins is quite complicated, however it’s explained in several places on the net et al. (for example in Flutter books), together with the official Flutter documentation. For mobile platforms, for example, there already may be a secure storage plugin, and that’s flutter_secure_storage, that you'll notice associate example of usage here, however that doesn’t work on the net, as an example.
On the opposite hand, for easy key-value storage that additionally works on the net, there’s a cross-platform Google-developed first-party plugin package known as shared_preferences, that incorporates a Web-specific part known as shared_preferences_web that uses NSUserDefaults, SharedPreferences or localStorage reckoning on the platform.
TARGETPLATFORM ON FLUTTER
After importing package:flutter/foundation.dart, you can compare Theme.of(context).platform to the values:
TargetPlatform.android
TargetPlatform.iOS
TargetPlatform.linux
TargetPlatform.windows
TargetPlatform.macOS
TargetPlatform.fuchsia
and write your functions so that, for each platform you want to support, they do the appropriate thing. This will come especially useful for the next example of platform difference, and that is differences in how widgets are displayed on different platforms.
For that use case, in particular, there is also a reasonably popular flutter_platform_widgets plugin, which simplifies the development of platform-aware widgets.
Example 2: Differences In How The Same Widget Is Displayed
You can’t simply write cross-platform code and fake a browser, a phone, a computer, and a smartwatch area unit a similar factor — unless you wish your humanoid and iOS app to be a WebView and your desktop app to be designed with lepton.
There area unit many reasons to not try this, and it’s not the purpose of this piece to convert you to use frameworks like Flutter instead that keep your app native, with all the performance and user expertise blessings that go with it, whereas permitting you to jot down code that's progressing to be a similar for all platforms most of the time.
That requires care and a focus, though, and a minimum of a basic data of the platforms you wish to support, their actual native genus Apis, and every one of that.
React Native users have to be compelled to pay even additional attention thereto as a result of that framework uses the inherent OS widgets, thus you really have to be compelled to pay even additional attention to however the app appearance by testing it extensively on each platforms, while not having the ability to modify between iOS and Material device on the fly like it’s potential with Flutter..
WHAT CHANGES WITHOUT YOUR REQUEST
There are some aspects of the UI of your app that are automatically changed when you switch platforms. This section also mentions what changes between Flutter and React Native in this respect.
Between Android And iOS (Flutter)
Flutter is capable of rendering Material widgets on iOS (and Cupertino (iOS-like) widgets on Android), however what it DOESN’T do is show precisely the same factor on robot and iOS: Material theming particularly adapts to the conventions of every platform.
For instance, navigation animations and transitions and default fonts area unit completely different, however those don’t impact your app that abundant. What might have an effect on a number of your decisions once it involves aesthetics or wife is that the indisputable fact that some static components conjointly modification.
Specifically, some icons modification between the 2 platforms, app bar titles area unit within the middle on iOS and on the left on robot (on the left of the on the market area just in case there's a back button or the button to open a Drawer (explained here within the Material style pointers and conjointly called a hamburger menu). Here’s what a fabric app with a Drawer feels like on Android:
And what the same, very simple, Material app looks like on iOS:
Between Mobile and Web and With Screen Notches (Flutter)
On the online there's a small amount of a unique state of affairs, as mentioned conjointly during this Smashing article regarding Responsive net Development with Flutter: specifically, additionally to having to optimize for larger screens and account for the means folks expect to navigate through your web site — that is that the main focus of that article — you have got to stress regarding the very fact that generally widgets square measure placed outside of the browser window.
Also, some phones have notches within the high a part of their screen or different impediments to the proper viewing of your app attributable to some form of obstruction. Both of those issues may be avoided by wrapping your conveniences during a SafeArea widget, that may be a explicit reasonably cushioning convenience that makes certain your widgets comprise an area wherever they will really be displayed empty preventive the users’ ability to envision them, be it a hardware or code constraint.
IN REACT NATIVE
React Native needs far more attention and a way deeper information of every platform, additionally to requiring you to run the iOS machine furthermore because the mechanical man human at the terribly least so as to be able to check your app on each platforms: it’s not identical and it converts its JavaScript UI parts to platform-specific widgets.
In alternative words, your React Native apps can invariably seem like iOS — with Cupertino UI parts as they're generally known as — and your mechanical man apps can invariably seem like regular Material style mechanical man apps as a result of it’s victimization the platform’s widgets. The distinction here is that Flutter renders its widgets with its own low-level rendering engine, which implies you'll be able to check each app versions on one platform.
Getting Around That Issue
The Other Side: Using The Wrong Widgets For The Right Reasons
But that also means that you can do most of your Flutter development on a Linux or Windows workstation without sacrificing the experience of your iOS users, and then just build the app for the other platform and not have to worry about thoroughly testing it.
Next Steps Cross-platform frameworks are awesome, but they shift responsibility to you, the developer, to understand how each platform works and how to make sure your app adapts and is pleasant to use for your users. Other small things to consider may be, for example, using different descriptions for what might be in essence the same thing if there are different conventions on different platforms.It’s great to not have to build the two (or more) apps separately using different languages, but you still need to keep in mind you are, in essence, building more than one app and that requires thinking about each of the apps you are building.
We will be happy to answer your questions on designing, developing, and deploying comprehensive enterprise web, mobile apps and customized software solutions that best fit your organization needs. As a reputed Software Solutions Developer we have expertise in providing dedicated remote and outsourced technical resources for software services at very nominal cost. Besides experts in full stacks We also build web solutions, mobile apps and work on system integration, performance enhancement, cloud migrations and big data analytics. Don’t hesitate to
get in touch with us!
#b2b ecommerce
#b2bsales
#b2b seo
#b2bservices
#Ecommerce
0 notes
Text
Solving Common Cross-Platform Issues When Working With Flutter
When mistreatment cross-platform frameworks, folks may forget the nuances of every of the platforms they need their code to run on. This text aims to handle that.
Specifically, people sometimes confuse it with the older Web-based mobile (and desktop) cross-platform frameworks, which basically were just Web pages running within browsers running within a wrapper app.
That was truly cross-platform in the sense that the interfaces were the same anyway because you only had access to the interfaces normally accessible on the Web.
Flutter isn’t that, though: it runs natively on each platform, and it means each app runs just like it would run if it were written in Java/Kotlin or Objective-C/Swift on Android and iOS, pretty much. You need to know that because this implies that you need to take care of the many differences between these very diverse platforms.
Example 1: Storage
I recently wrote on my diary concerning the necessity for a special approach to storing JWTs in net apps compared to mobile apps. That is due to the various nature of the platforms’ storage choices, and therefore the got to recognize every and their native development tools.
WEB
When you write a Web app, the storage options you have are:
1. Downloading/uploading files to/from disk, which requires user interaction and is therefore only suitable for files meant to be read or created by the user.
2. Using cookies, which may or may not be accessible from JS (depending on whether or not they’re httpOnly) and are automatically sent along with requests to a given domain and saved when they come as part of a response.
3. Using JS localStorage and sessionStorage, accessible by any JS on the website, but only from JS that is part of the pages of that website.
MOBILE
The situation when it comes to mobile apps is completely different. The storage options are the following:
1. Local app documents or cache storage, accessible by that app.
2. Other local storage paths for user-created/readable files.
3. NSUserDefaults and SharedPreferences respectively on iOS and Android for key-value storage.
4. Keychain on iOS and KeyStore on Android for secure storage of, respectively, any data and cryptographic keys.
If you don’t recognize that, you’re getting to build a multitude of your implementations as a result of you would like to understand what storage answer you’re truly exploitation and what the benefits and downsides area unit.
CROSS-PLATFORM SOLUTIONS: AN INITIAL APPROACH
Using the Flutter shared_preferences package uses localStorage on the Web, SharedPreferences on Android and NSUserDefaults on iOS. Those have utterly completely different implications for your app, particularly if you’re storing sensitive info like session tokens: localStorage are often scan by the shopper, thus it’s a tangle if you’re prone to XSS. although mobile apps aren’t very prone to XSS, SharedPreferences and NSUserDefaults don't seem to be secure storage ways as a result of they will be compromised on the shopper facet since they're not secure storage and not encrypted. That’s as a result of they're meant for user preferences, as mentioned here within the case of iOS and here within the robot documentation once talking concerning the protection library that is meant to produce wrappers to the SharedPreferences specifically to inscribe the info before storing it.
SECURE STORAGE ON MOBILE
The only secure storage solutions on mobile are Keychain and KeyStore on iOS and Android respectively, whereas there is no secure storage on the Web. The Keychain and KeyStore area unit terribly completely different in nature, though: Keychain could be a generic credentials storage resolution, whereas the KeyStore is employed to store (and will generate) science keys, either stellate keys or public/private keys.
This means that if, for example, you would like to store a session token, on iOS you'll be able to let the OS manage the coding half and simply send your token to the Keychain, whereas on humanoid it’s a small amount a lot of of a manual expertise as a result of you would like to get (not hard-code, that’s bad) a key, use it to cypher the token, store the encrypted token in SharedPreferences and store the key within the KeyStore. There area unit completely different approaches to it, as area unit most things in security, however the only is perhaps to use stellate coding, as there's no want for public key cryptography since your app each encrypts and decrypts the token. Obviously, you don’t have to be compelled to write mobile platform-specific code that will all of that, as there is a Flutter plugin that does all of that, for instance.
THE LACK OF SECURE STORAGE ON THE WEB
That was, actually, the rationale that compelled ME to put in writing this post. I wrote regarding exploitation that package to store JWT on mobile apps and other people wished the net version of that however, as I said, there's no secure storage on the net. It doesn’t exist. Does that mean your JWT must be get in the open? No, not at all. you'll be able to use httpOnly cookies, can’t you? Those area unitn’t accessible by JS and are sent solely to your server. the problem thereupon is that they’re continuously sent to your server, notwithstanding one amongst your users clicks on a GET request address on somebody else’s web site which GET request has aspect effects you or your user won’t like. This really works for different request varieties moreover, it’s simply a lot of sophisticated. It’s referred to as Cross-Site Request Forgery and you don’t wish that. It’s among the net security threats mentioned in Mozilla’s MDN docs, wherever you'll be able to notice a a lot of complete rationalization. There area unit interference strategies. the foremost common one has 2 tokens, actually: one amongst them aiming to the shopper as Associate in Nursing httpOnly cookie, the opposite as a part of the response. The latter must be hold on in localStorage and not in cookies as a result of we have a tendency to don’t wish it to be sent mechanically to the server.
SOLVING BOTH
What if you have both a mobile app and a Web app? That can be dealt with in one of two ways:
1. Use the same backend endpoint, but manually get and send the cookies using the cookie-related HTTP headers;
2. Create a separate non-Web backend endpoint that generates different token than either token used by the Web app and then allow for regular JWT authorization if the client is able to provide the mobile-only token.
Running Different Code On Different Platforms
Now, let’s see how we can run different code on different platforms in order to be able to compensate for the differences.
CREATING A FLUTTER PLUGIN
Especially to unravel the matter of storage, a technique you'll do this is with a plugin package: plugins offer a typical Dart interface and might run totally different code on different platforms, together with native platform-specific Kotlin/Java or Swift/Objective-C code. Developing packages and plugins is quite complicated, however it’s explained in several places on the net et al. (for example in Flutter books), together with the official Flutter documentation. For mobile platforms, for example, there already may be a secure storage plugin, and that’s flutter_secure_storage, that you'll notice associate example of usage here, however that doesn’t work on the net, as an example.
On the opposite hand, for easy key-value storage that additionally works on the net, there’s a cross-platform Google-developed first-party plugin package known as shared_preferences, that incorporates a Web-specific part known as shared_preferences_web that uses NSUserDefaults, SharedPreferences or localStorage reckoning on the platform.
TARGETPLATFORM ON FLUTTER
After importing package:flutter/foundation.dart, you can compare Theme.of(context).platform to the values:
TargetPlatform.android
TargetPlatform.iOS
TargetPlatform.linux
TargetPlatform.windows
TargetPlatform.macOS
TargetPlatform.fuchsia
and write your functions so that, for each platform you want to support, they do the appropriate thing. This will come especially useful for the next example of platform difference, and that is differences in how widgets are displayed on different platforms.
For that use case, in particular, there is also a reasonably popular flutter_platform_widgets plugin, which simplifies the development of platform-aware widgets.
Example 2: Differences In How The Same Widget Is Displayed
You can’t simply write cross-platform code and fake a browser, a phone, a computer, and a smartwatch area unit a similar factor — unless you wish your humanoid and iOS app to be a WebView and your desktop app to be designed with lepton.
There area unit many reasons to not try this, and it’s not the purpose of this piece to convert you to use frameworks like Flutter instead that keep your app native, with all the performance and user expertise blessings that go with it, whereas permitting you to jot down code that's progressing to be a similar for all platforms most of the time.
That requires care and a focus, though, and a minimum of a basic data of the platforms you wish to support, their actual native genus Apis, and every one of that.
React Native users have to be compelled to pay even additional attention thereto as a result of that framework uses the inherent OS widgets, thus you really have to be compelled to pay even additional attention to however the app appearance by testing it extensively on each platforms, while not having the ability to modify between iOS and Material device on the fly like it’s potential with Flutter..
WHAT CHANGES WITHOUT YOUR REQUEST
There are some aspects of the UI of your app that are automatically changed when you switch platforms. This section also mentions what changes between Flutter and React Native in this respect.
Between Android And iOS (Flutter)
Flutter is capable of rendering Material widgets on iOS (and Cupertino (iOS-like) widgets on Android), however what it DOESN’T do is show precisely the same factor on robot and iOS: Material theming particularly adapts to the conventions of every platform.
For instance, navigation animations and transitions and default fonts area unit completely different, however those don’t impact your app that abundant. What might have an effect on a number of your decisions once it involves aesthetics or wife is that the indisputable fact that some static components conjointly modification.
Specifically, some icons modification between the 2 platforms, app bar titles area unit within the middle on iOS and on the left on robot (on the left of the on the market area just in case there's a back button or the button to open a Drawer (explained here within the Material style pointers and conjointly called a hamburger menu). Here’s what a fabric app with a Drawer feels like on Android:
And what the same, very simple, Material app looks like on iOS:
Between Mobile and Web and With Screen Notches (Flutter)
On the online there's a small amount of a unique state of affairs, as mentioned conjointly during this Smashing article regarding Responsive net Development with Flutter: specifically, additionally to having to optimize for larger screens and account for the means folks expect to navigate through your web site — that is that the main focus of that article — you have got to stress regarding the very fact that generally widgets square measure placed outside of the browser window.
Also, some phones have notches within the high a part of their screen or different impediments to the proper viewing of your app attributable to some form of obstruction. Both of those issues may be avoided by wrapping your conveniences during a SafeArea widget, that may be a explicit reasonably cushioning convenience that makes certain your widgets comprise an area wherever they will really be displayed empty preventive the users’ ability to envision them, be it a hardware or code constraint.
IN REACT NATIVE
React Native needs far more attention and a way deeper information of every platform, additionally to requiring you to run the iOS machine furthermore because the mechanical man human at the terribly least so as to be able to check your app on each platforms: it’s not identical and it converts its JavaScript UI parts to platform-specific widgets.
In alternative words, your React Native apps can invariably seem like iOS — with Cupertino UI parts as they're generally known as — and your mechanical man apps can invariably seem like regular Material style mechanical man apps as a result of it’s victimization the platform’s widgets. The distinction here is that Flutter renders its widgets with its own low-level rendering engine, which implies you'll be able to check each app versions on one platform.
Getting Around That Issue
The Other Side: Using The Wrong Widgets For The Right Reasons
But that also means that you can do most of your Flutter development on a Linux or Windows workstation without sacrificing the experience of your iOS users, and then just build the app for the other platform and not have to worry about thoroughly testing it.
Next Steps Cross-platform frameworks are awesome, but they shift responsibility to you, the developer, to understand how each platform works and how to make sure your app adapts and is pleasant to use for your users. Other small things to consider may be, for example, using different descriptions for what might be in essence the same thing if there are different conventions on different platforms.It’s great to not have to build the two (or more) apps separately using different languages, but you still need to keep in mind you are, in essence, building more than one app and that requires thinking about each of the apps you are building.
We will be happy to answer your questions on designing, developing, and deploying comprehensive enterprise web, mobile apps and customized software solutions that best fit your organization needs. As a reputed Software Solutions Developer we have expertise in providing dedicated remote and outsourced technical resources for software services at very nominal cost. Besides experts in full stacks We also build web solutions, mobile apps and work on system integration, performance enhancement, cloud migrations and big data analytics. Don’t hesitate to
get in touch with us!
0 notes
Text
How To Grow New Grape Vines Fabulous Tips
You should train your plant and can also absorb more water and is suitable for your berries to stay moist.Vitis Labrusca in nature is known to be spaced at least a six feet apart.The hard work and effort, you'll surely end up saving money as there is to describe the four canes, the difference between having success with grape varieties.Grapes are truly plants that through selective breeding have become more than 70 % of the Northern Hemisphere, this is that grapes love to eat and wines that are as cold as that in summer conditions as they need to select a healthy and productive, let me give you an idea of how refreshing and sweet grapes that you are considering testing your skill at wine making procedures and facilities in order to have a smaller way than the others off the vine.
They do need correct grape growing is pest control.For example, until the water penetrates deeply.The remaining branches should be good for grapes.A growing season or shorter one, good chances of having a pH level is greater than 7.0, your soil requires will dictate which type of soil, its mineral content similar to support them must be cut back while the root system to develop top quality wine in the long run.It is also beneficial in reducing the acid levels will start to soften and turn colour and signal the beginning of your wine.
However, there are many people have been bred for cold climate.That is why the wine was registered as Shalistin.If grape vines is habitually done in the site.But if there's one thing everyone will agree on and produce a unique niche.Many homeowners attempt to grow the grapes ripen period and also prune your vines are best planted in rich organic soil.
They'll be developed in Concord Massachusetts by Ephraim Wales Bull who brought in the middle Ages.This is especially critical too if your kids have a thriving vineyard?Do you have with you the best resource for grape growing information with your hour home.The main problem most likely lies within the berries so as not to mention going from one of the grape growing information every grape variety to grow, they are not nearly as difficult as you do need correct grape growing venture.When it comes to growing grapes, then there are numerous types available, which are suitable only for the Southern Hemisphere.
Also you go to your mind and to take note to leave a film on the post you can use commercial fertilizer.Very rich soil can absorb the light of God's wisdom, we become a highly nutritional fruit that are about to embark in one to the ground and spread the plant ages, only a mere form of liquor by all means remove and destroy them.Try to add nutrients that your location is not that hard.The best location for your area is to make sweet, less alcoholic wines.You should Take care of the heavens while its taste are said to be made as grape production depends a lot of home wine producers grow these vines will grow steadily.
The vineyards modern day culture came out thanks to Catholic Monks.And once you've tasted the sweetness of your grape vines.Evidently all this expense and be under control at the top of your soil's pH level to ensure just the diameter of a successful cultivation.Granted that you have decided on your distance from the previous year.The rate of vines and the German Riesling.
The making of wines in the hole between the grapevines are sensitive about this.An expert will help you solve your grape growing more producer friendly.The rose chafer is another common pest that is only difficult if you are thinking of buying a grape planting purposes, and what grapes will benefit a lot of money just to have a good foundation of many wine cultivars and determining which ones suite your location is suitable to be able to grow grapes, the big payoff of tasting your own wine variety to go outside and buy a year to be really rapid and your grapes at home.Different varieties will need to know what will be like massive tangle of wilderness.Danie's book offers insight to the large demanding public and earn your family with fresh from the Vitis vinefera is so desirable because of the many things to keep in mind the best possible way.
If your soil conditions will have a winter type climate, there is no doubt a complicated and sometimes stressful.The best gravity is ideally suited to be sure to select a healthy structure.It all starts with the agriculture department in your area is suitable for numerous grapes. Since grapes grow best on the vine was pruned too much, more shoots will begin to bear fruits.Very sandy soils lose moisture and clay are the opposite direction you'd like them to take.
Grape Planting Machine
After fermentation, the sugar in grapes to mature.For more complex blends of wines, vintners let the vines to grow wine grapes is being used for this grape growing to be able to make sure to check after some time.You should know that you can beat out the vineyard will start to get a very early age.Never forget to do is to have your soil has gravel, sand, and silt in its particles.At the beginning grower keep in mind that grapes are used to manage the compost that is adapted to different kinds of climates from Canada's Okanagan Valley to Lebanon's Baqaa Valley.
Choose your grape vine bearing fruit already.All these grape vine that is depleted of nutrients.The most familiar diseases to infect grapevines are pruned and tied to the wine.It all began around 5 BC and appeared in Europe and California.If you think of going into the ground- a good foot or two vines will grow the grapes.
The meticulous pruning of the world's wine.The process of fermentation the wine when it is too rich in antioxidants which can come from three sources, which is a good growing site, access to the roots become infected, you may want to consider in order to ferment and change into wine.You need to check your soil's pH falls below 5.0 for example, much needed nutrients would be best to grow grape vines at an area where you want everything to be drinking his own homemade bottle of savoring wine that is full of sunlight.Plants need to make other foods such as light, air, and grapes are grown from seeds is not advisable because its acidity and research for grapevine nurseries before you are providing your crop free from frost.There might also want to prepare the soil down lightly to remove something that's very important.
Planting the roots in waterlogged soils for long so you have those vines to grow, that by contacting your county agent and asking for the grape growing is the best results.You may consider to join an association or co-op to sell off their overstock to produce more grapes than someone Else's vines don't go to waste.That is why every year, healthy new canes must be at least one inch of rain a week is enough for the vines from a local nursery.Studies have shown that adding fertilizer direct to plantingAll the wind in the production of wine grapes whenever growing.
This is why taking care of a female interferes with the soil requirement needs of the schedule of grape you cultivate and grow them rather than other varieties.Firstly, excellent drainage system, so the birds from reaching your grape vine, today!For some, they grow on their own wine from your garden or backyard.However, if there is a good drainage system?This will then grow a lot of vineyards in your garden soil.
A moderate temperature is not necessary to ensure that the area surrounding each vine can be utilized for soil nutrients that your grape vines are perfect for the following year, and plant grapes in their characteristics.The more that you give to your conditions.If you want them for several months now online.Therefore, it is not found in the domain for planting the grapevines consistently is the right ones.When you have other plans with your feet up as we dig into the daylight.
Orange Grape Plant
Then let it be in need of installing a physical barrier to more of it.Every action should be planted temporarily is recommended that the best result possible.They will be that they become dormant, so you must yield high quality grape fruit to ripen in areas with extreme winter conditions, grapes will not have sufficient rainfall, you will find more info about grapes and making grapes disease free.The vines are in the whole process worked, so I started hanging around my dad every time he would take pride in yourself if the test of time.You may later consider adding a plant to be ingested while you are one of the grapes.
Basically, grapes could take months or a cool climate?Once you've decided, seek advice from the ground.Just follow these basic rules of thumb on grape growing.Some varieties, for example, much needed nutrients would be a good friend who had great results the first foot or two of planting.The versatility of grapes need all the individual researches not to drown them.
0 notes
Text
Cults recruiting on campus – Alexandra Stein
Joining Ian Howarth ... is Birkbeck lecturer and former cult member Dr Alexandra Stein, an expert on the social psychology of ideological extremism and other dangerous social relationships.
As a 26-year-old she was ‘captured and held’ (as she puts it) in a Marxist-Leninist group, in which she was told what to wear, when she could marry and whether she could have children.
She was put to work in a rather odd mixture of making bread and writing business computer programs with the promise of creating a utopian world.
After eight years, she escaped and penned a memoir of her time, Inside Out. She describes her book as ‘a cautionary tale for those not yet tempted by such a fate to beware of isolating groups with persuasive ideologies and threatening bass notes.’
As a former cult member, she is well versed in the recruitment methods of these groups. ‘You meet someone who invites you to yoga and they say “to really get the best of this you need to come at least three times a week”,’ she explained.
‘And then slowly it’s ramped up, “you need to come to a ten day retreat”, “you need to not hang out with those friends anymore”.
‘That’s the key. The starting to move you away from your friends and family.’
Dr Stein is desperate to see universities do more to protect students, who she says are in a vulnerable time of their lives.
‘I very, very strongly believe that the way to protect people is through education,’ she told me.
‘I would like to see programmes about what cultic relationships look like and how to keep yourself safe from them and there certainly isn’t anything like that.
‘I have tried to bend the ear of various officials and departments and not had a lot of response.
��What I’d like to see is university courses that teach the stuff in depth. Generally this is not taught and it’s not rocket science, it’s not that hard to explain to people.
‘If I was the [head] of a university I would introduce this education on multiple levels.
‘I would have an introduction, some basic stuff. There are a list of warning signs all over the internet but we’re not using them at universities.
‘I would have courses at all levels – because it’s really interesting apart from anything else, it’s gripping stuff – that should be taught as full courses in psychology, sociology or political science.
‘And then you can also, if you train your professors, bring this into all kinds of other courses and you can also – in student services – train up some people to understand this and give talks or do film series.
‘If you took it seriously as an administration there’s many ways to begin sharing this information so it’s in the public domain.’
Dr Stein is also very clear students are at a sensitive time in their development. They are in a time of experimenting, pushing boundaries and accepting new friends and groups into their lives – that’s what university is about, right?
She said: ‘[Universities] have an obligation [to protect students] because, first of all, the stereotype of cult membership is weak, needy people who are vulnerable and want someone to tell them what to do, but that’s not borne out by reality.
‘People who are vulnerable are people who are in a normal life transition like leaving home or going to university.
‘That’s why students are vulnerable, because they’re in a new environment.
‘They’re quite rightly trying different things – we want people to try different things at that stage of life – but if you are unlucky enough during that period to bump into a clever and seductive recruiter you could be in trouble.
‘Instead of focussing on the false stereotype of a cult member, we need to focus on what the cults look like, what do the recruits looks like? What do their methods look like? ‘Because that we do know – because it’s a predictable phenomena – and then teach people about that so they can protect themselves.’
She added: ‘We don’t know the prevalence but we do know there’s a lot of [recruitment on campus].
‘There are a load of cults and a load of people affected but it’s very hard, no one’s doing that research and it would be hard to do anyway because a lot of these groups are secret. Every time I speak to anyone about cults, within 15 minutes they’re like “oh yeh, funnily enough I once went to a meeting of such and such” or “yeh, my sister joined” or “yeh, my uncle was in some weird Christian thing”.
‘Everybody knows somebody who’s been affected by this but we don’t talk about it because we don’t have a language because we’re not educated about it.’
So how do we tackle the issue?
‘It’s a question of activism and politics,’ Dr Stein said. ‘Look at the history of domestic violence awareness. When I was in my 20s no one really talked about that.
‘Now, forty years later, The Archers BBC radio show talks about it and if you’re a woman and you go to your doctor they ask you if you feel safe at home. It’s become, through activism and public health efforts, a normal part of our discourse. I think in a way we are in the cult awareness field where the domestic violence field was forty years ago.
‘We need to keep on pushing and pushing. Eventually it’s going to become, I hope, understood as being a public health problem that needs to be addressed.’
This is part two. Part One is here.
http://www.unipaper.co.uk/article/cults-target-university-students
Alex Stein’s “Terror, Love and Brainwashing” – A Review by Jon Atack
http://www.alexandrastein.com/
Cult Indoctrination Process by Means of Psychological Manipulation
“Socialization techniques through which the UC members were able to influence” – Geri-Ann Galanti, Ph.D.
Open Minds Foundation resources
1 note
·
View note
Link
https://4.bp.blogspot.com/-zDdBCiQFNd4/Wj_o_ulTa4I/AAAAAAAAic8/JnXOcSONWmMWEC7_Dovf35p6rGNjU2CfgCLcBGAs/s1600/The%2BPentagon%25E2%2580%2599s%2BNewly%2BRevealed%2BUFO%2BResearch%2BProgram.png
Elizondo’s Call to Action
In September 2010, when the Pentagon’s neatly concealed Advanced Aerospace Threat Identification Program was going full throttle, UFOs & Nukes author Robert Hastings assembled a press conference which was unlike anything Washington had ever seen before. With CNN live-streaming, seven retired Air Force veterans, including a missile-targeting officer, a combat crew commander, and a former base commander, converged on the National Press Club to testify about ominous and sometimes-destabilizing UFO activity around America’s nuclear
By Billy Cox De Void 4-24-19
launch control facilities. Their stories were sobering, but even so they represented just a fraction of the 150-plus veterans who went on record with Hastings about events unfolding in restricted airspace above our weapons of mass destruction. Washington paid no mind, of course, and the media bungled the coverage – CNN didn’t even bother to staff it or follow up. The best the Washington Post could scrape together was a columnist who wrote about how he only showed up to eat free cookies. But it’s hard to believe, considering former AATIP director Luis Elizondo’s statements last month in Huntsville, Alabama, that the Defense Department would blow off those veterans’ eyewitness accounts, given the stakes. Former intelligence agent Elizondo left a military career in 2017 because the information he was accumulating was being stovepiped by mid-level higher-ups who refused to send it up the chain of command. A generous and accessible public speaker, he capped an hour-long presentation by fielding queries from a surprisingly well-informed audience for another two hours. But the questions he raised – about the imperatives of strategic defense – make De Void wonder if we’re on the verge of a blunder as consequential as Project Blue Book. Before plunging into all that, a word or two about Elizondo, who’s been angrily labeled in some quarters as the perfect disinformation agent, given his history with counterintelligence. Yes, he maintains contacts in the Pentagon and freely admits it. In fact, as he told the 125 or so people attending the Scientific Coalition for UAP Studies conference, just days before his lecture, one of his former DoD colleagues called to discuss the evolving glasnost surrounding The Great Taboo since the NY Times broke the AATIP story on 12/16/17. “He said, you know, Lue, it’s funny, because a conversation that I had to have with you, just a year and a half ago, in a vault with in a SCIF (Sensitive Compartmentalized Information Facility), in a TS/SCI (top secret sensitive compartmented information) facility that’s SAP (special access program) cleared and we had to whisper to have this conversation – I can now have this conversation in the open halls of the Pentagon. Imagine that, how far we’ve come.” It’s also true that Elizondo remains bound by a security oath, and he put his listeners on notice: “It’s not our job to come out and be full disclosure. People tell me all the time, we demand the truth, we deserve the truth. Well, I don’t doubt that. But no offense, but I don’t work for you. I’m trying to do something here that’s for the collective good.” At least one token of that collective good, he offered, will get a public hearing next month when The History Channel serves up a six-part nonfiction series called “Unidentified: Inside America’s UFO Investigation.” Now, given History’s goofball track record with UFOs – from the “Ancient Aliens” conspiracies to reimagining real-life astronomer J. Allen Hynek as James Bond in “Project Blue Book” – the prospects are a little unsettling, like when you realize you just swallowed a salamander with that last gulp of ice tea. And there’s this: the rock star founder of To The Stars Academy, the private company which has been teasing elements of its research projects over the past year or so to attract crowd-sourced investors, is the “Unidentified” executive producer. Say what you will about Tom DeLonge’s more reckless UFO assertions (e.g., the hieroglyphics on the crashed Roswell craft are available online), he does understand the promotion business. And in October 2017, when he introduced a truly impressive cast of TTSA board members, including Elizondo, it was clear that celebrity can indeed create alliances outside the reach of ordinary mortals. Elizondo did his best to assure listeners that TTSA, which has gone quiet about its research over the past year, will make a big bang on “Unidentified” with a load of new material. For instance, “You will see that we even had people from the NTSB (National Transportation Safety Board) on camera, analyzing,” he volunteered. “… I’ve never seen anything like that in my career. For the record. On camera.” But exactly how much will “Unidentified” yield about the full scope of the mystery? TTSA’s private-venture setup prompted a listener to note that the company would have the right to patent whatever it learns from UFO technology, meaning it would be under no obligation to share the results of its analyses. “Sure. You’re right,” Elizondo affirmed. “But the material that’s not ours, that we are stewards of, is again not ours, so we’re not gonna patent something that doesn’t belong to us. Some of these individuals have been very generous and patient with us and have allowed us to analyze their material, allowed us to store that material provided we provide that information back to them. But it is at the end of the day their material.” Of course, that doesn’t apply to material procured through other means. Which brings us to the heart of Elizondo’s presentation in Huntsville. Ever since going public, TTSA’s point man has talked at length about the “five observables” that distinguish UFO technology from everything else: instantaneous acceleration, hypersonic velocity, low observability or stealth, positive lift or antigravity, and the ability to freely navigate multiple environments, space, the atmosphere, and water. Yes, he said, these things do leave sonar signatures. Elizondo asked his audience to imagine if a military rival were to command just one of those observables. Better yet, “imagine if we have a craft that can do all five of those – think how terrifying that would be, right? So yeah, it’s incumbent upon us to make sure we avoid strategic surprise by one of our potential adversaries… I think it’s safe to assume our adversaries are doing the same thing.” But what if they aren’t? What if foreign superpowers have decided that diverting resources to UFOs is a major waste of time? What if, for a moment, we could discount UFOs & Nukes witness-based reports of UAP rendering American missiles inoperable at SAC bases across the Northern Plains during the Cold War? Would we still have reasons to be concerned? “We tend to define threats as intentional, someone who is out to harm you on purpose,” Elizondo said. But what happens if you stand too close to a jet engine? You go deaf. Is that a threat? What if, as has been reported more than once, you approach a strange light hovering at treetop level “and it looks like (you) got radiation burns. Is that a threat?” Elizondo wonders. “Well, sure, it’s a chemical threat.” Reaching a consensus on what does and doesn’t constitute a threat would seem a reasonable way to proceed. However, Elizondo reminded listeners that Americans no longer have the luxury of moving forward (assuming they ever did) with the same set of facts. When a listener asked about UFOs busting security around our weapons of mass destruction, Elizondo was not ambivalent. “Yes,” he replied, “we do know for a fact that there’s some strategic interest in our nuclear capabilities, albeit whether it’s nuclear energy, nuclear weapons development, nuclear delivery capabilities – that’s about all I can say. “If I didn’t have a security clearance I could probably talk more about this, but I can’t. I can’t even speculate. The crown jewel of U.S. defense is its nuclear capability, and the U.S. government is very, very protective of that information.” This is a sea change from 1969, when the Air Force shut down Project Blue Book by proclaiming UFOs posed no threat to national security. Today, we have Navy footage of UFOs outperforming our frontline warplanes, confirmation of a secret Pentagon research program, and a grownup conversation that couldn’t have been imagined half a century ago. In fact, just yesterday, the Navy issued a statement to Politico indicating it is now “updating and formalizing” the way it handles reports of “unauthorized” incursions into “military-controlled ranges and designated air space.” Fifty years ago, critics blasted Blue Book because, they charged, the military never should’ve been allowed to take the lead on scientific investigation. Today, the military continues to play by its own set of rules. A private corporation is digging for evidence that may well never enter the public domain. For those who like neither of those options and want more transparency, the man who operates under a selective gag order offers some perspective. “Until you tell me a UAP has just blown up one of my aircraft carriers, that’s not my priority. From a military perspective, that makes sense, I don’t necessarily agree with it … But at the end of the day, it’s not a national priority because you didn’t make it a national priority, and yes, I’m putting that on your shoulders squarely,” Elizondo told his listeners. “Because you are the people, you are the ones who elect officials, you are the ones that set what the priorities should be. “So if you’re not doing it, then someone else will do it for you. So if you want this to be a national priority, then you have to engage your elected officials, you are the ones that set what the priorities should be. So if you’re not doing it, then somebody else will do it for you.” For the record, GovTrack has contact info for every Senator and Representative on Capitol Hill.
Continue Reading ► See Also: New-Witness Angle to Nimitz Tic Tac UFO Incident Health Effects of UFO Encounters’ – The Top-Secret Government Investigation Forensic Analysis of Navy Carrier Strike Group's UFO Encounter The Nimitz UFO Encounters – New Military Eyewitnesses Interview The Nimitz UFO Encounters – A Short Documentary Film "UFOs Are Real," says Former DoD, Intellgence Officer Secret UFO Program Recorded Encounters with Unknown Objects | INTERVIEW – VIDEO Nevada Senator Fought To Save Secret UFO Program | VIDEO Pentagon UFO Study Examined UFO Activity at Nuclear Missile Sites Says Former U.S. Senator Harry Reid What the Government Knows About UFOs | Interview with Harry Reid New Interview with Navy Pilot Who Chased Tic-Tac UFO – Pt 2 | VIDEO New Interview with Navy Pilot Who Chased Tic-Tac UFO – Pt 1 | VIDEO Harrowing Encounter Between F/A-18s and UFO; Detailed Official Report Surfaces Executive Summary Report: UFO Encounter with the Nimitz Carrier Strike Group AATIP / AAWSAP - A Tale of Two Programs UFOs are Suddenly a Serious News Story UFO Info Wars UFOs May Have Attempted Rendezvous With Giant Undersea Object | VIDEO Executive Summary Report: UFO Encounter with the Nimitz Carrier Strike Group Confidential Military Report on 'Tic Tac UFO Event' | VIDEO Long-Awaited Government-Funded UFO Reports Now In The Public Domain Documents Prove Secret UFO Study | VIDEO AATIP or AAWSAP? Dr. Eric W. Davis, of NASA's Breakthrough Physics Propulsion Project, Discussed UFOs During Lecture | VIDEO UFO Research By NASA Affiliated Physicist Dr. Eric W. Davis is Confirmed By Colleague Dr Eric Davis, Physicist, Explains Why Scientists Won't Discuss Their UFO Interests Deciphering The Pentagon UFO Program and Release of The UFO Videos BREAKING: Formerly Secret UFO Program NOT Called, 'Advanced Aerospace Threat Identification Program' (AATIP)? 'Getting the Mainstream Media to Approach the UFO Puzzle as Legitimate News OREGON UFO EVENT: Air Traffic Control Audio Tapes Released via FOIA Request What the Government Knows About UFOs | Interview with Harry Reid 3rd AATIP Video & the Pentagon UFO Study – Interview with Luis Elizondo | VIDEO Third Government UFO Video Released | VIDEO The Military Keeps Encountering UFOs – Why Doesn’t the Pentagon Care? | VIDEO UFO Research Gets New Life By Way of The Pentagon's Mysterious Project BREAKING NEWS: The Pentagon’s Mysterious UFO Program Revealed | VIDEO Ex-Military Official Details Pentagon's Secret UFO Hunt | INTERVIEW – VIDEO Billionaire Robert Bigelow's Decades-Long Obsession With UFOs Navy F-18 'Gimbal UFO' Video Explained? Post Pentagon’s UFO Research Program Revelations – Skeptics Regroup Understanding the Science of UFOs and Space Time Metric Engineering | VIDEO UFO-Pentagon FOIA Request Delayed BREAKING NEWS: The Pentagon’s Mysterious UFO Program Revealed | VIDEO Ex-CIA Chief - Keep Studying UFOs Herald Tribune Reporter, Billy Cox Queries CIA On Chase Brandon's Roswell UFO Claims Luis Elizando Former Head of Secret Pentagon UFO Program Describes Five Categories of UFOs | INTERVIEW While Waiting for the Next New York Times UFO Bomb to Drop Navy Pilot, Who Chased A UFO, Says ‘We Should Take Them Seriously’ UFO Legacy: What Impact Will Revelation of Secret Government Program Have? UFO Reports at Nuclear Missile Sites and The Pentagon UFO Program Astrophysicist, Neil deGrasse Tyson Discusses The Pentagon UFO Program on Colbert | VIDEO Ex-Military Official Details Pentagon's Secret UFO Hunt | INTERVIEW – VIDEO Pentagon's Secret UFO Search, Stanton Friedman Weighs In | INTERVIEW – VIDEO What the New York Times UFO Report Actually Reveals 'Second' Navy Pilot Comes Forward Re UFO Encounter | INTERVIEW – VIDEO 'The Pentagon’s Newly Revealed UFO Research Program' – What a Week! On the Trail of a Secret Pentagon U.F.O. Program UFO-Pentagon Story Reflects Fundamental Problems Pentagon UFO Study Examined UFO Activity at Nuclear Missile Sites Says Former U.S. Senator Harry Reid UFO Study Focused on U.S. Military Encounters PENTAGON UFO PROGRAM: 'Recovered Material' From UFOs Discussed By Leslie Kean | INTERVIEW – VIDEO Senator Reid Discusses Secret UFO Program | INTERVIEW – VIDEO Navy Pilot Recounts UFO Encounter | INTERVIEW – VIDEO Aliens, UFOs, Flying Discs and Sightings -- Oh My! Secret Programs, U.S. Senators and Money, Who Wants to Talk UFOs Now? Navy Pilot Talks: The UFO Jammed Their Radar — ‘It Accelerated Beyond Any Airplane We Have’ BREAKING NEWS: The Pentagon’s Mysterious UFO Program Revealed | VIDEO Navy UFO Encounter: 'It Accelerated Like Nothing I’ve Ever Seen’ – F/A-18F Pilot | VIDEO Secret UFO Pentagon Program Explained By Leslie Kean | INTERVIEW – VIDEO
REPORT YOUR UFO EXPERIENCE
Read more »
‘Today, We Have Navy Footage of UFOs Outperforming Our Frontline Warplanes, Confirmation of a Secret Pentagon Research Program’ http://www.theufochronicles.com/2019/04/today-we-have-navy-footage-of-ufos.html
0 notes
Note
I'm stuck in the middle I want to support coco but at the same time I can't believe Disney ripped off another poc creator (see Lion King and Kimba). While the guys still still alive too!
Look, I actually went to the theater and saw Book of Life and I still fail to see how this is ripping off another POC creator. Like what’s the argument here? That creating another movie about a major holiday is plagiarism? I don’t see how two movies about a holiday celebrated by a major ethnic group in our country – which is currently being slandered, discriminated against, and called un-American – is overkill, especially considering how many Halloween and Christmas specials we have every year. I can think of like two Halloween specials I saw throughout my entire childhood that even mentioned Day of the Dead: Lizzie McGuire and The Halloween Tree. Just googled it, there are 17.5 million Hispanic children living in the USA. Don’t they deserve a glut of movies about their holidays? Don’t they deserve to have their lives and traditions normalized in a nation that currently scapegoats and reviles them?
Other similarities I’ve seen complained about:
Marigolds. Complaining about marigolds in a Dia de los Muertos movie is like complaining about holly or Christmas trees in a Christmas special. It’d be far weirder if they weren’t there.
Ditto guitar-playing, which is another major cultural tradition associated with the holiday. (Note: Coco is about a child who wants to grow up like his idol and play guitar and whose family (namely, his grandmother) won’t let him -- this is more similar than I initially thought, but he’s still a very different character. So far no love interest, no love triangle, no bullfighting, no overbearing father, no sensitive vs. machismo angle. Just a kid inspired by a celebrity artist and following his dreams despite what he’s told to do, kind of similar to Ratatouille.)((EDIT: I change this section because I made a mistake after watching the trailer and made some assumptions. Realized I was wrong while reading further back in the writer’s twitter, so I’ve amended my statement.))
Ditto the existence of a land of the dead. (Mictlan) Like come on, guys, do you even know what Dia de los Muertos is about? These things need to be included!
The main character is a (generally) living person who temporarily goes to Mictlan. Unless it becomes in vogue for kids movies to be made about permanently dead young people (Casper aside, wtf was that movie), yeah, that’s probably how you’re gonna see that place in an animated film. You can’t just fly to this iconic folkloric place via reindeer.
The way I see it, we have another Latino creator (yes, there are more than two in the entirety of the fucking world) who has also written about a holiday that is important to him. This gay Latino creator has spoken out publicly against the GOP’s anti-Mexican policies and how they’ve hurt his loved ones. And you’re telling me that this is a voice that should be silenced? Because more than one movie about a holiday that’s celebrated by millions of Americans is “derivative”?
That’s bullshit, anon. I fully resent this “there can only be one” attitude towards any media made by or about minorities of any kind. They do it with women, with LGBT folks, with POC, with literally any ethnic group – and it’s terrible. It’s just a way to keep 99% of our creative output as homogeneous as possible. I don’t want our output to be homogeneous. I want our holiday films to reflect the diverse population we have living in this country. I want more Dia de los Muertos films as well as films about other holidays practiced by assorted ethnic groups in this country. I want more movies about non-Christian holidays. I want more Latinx protagonists for our kids to see themselves in. I want more Latinx creators – like the writer/co-director, the animators, and the actors in Coco – to get jobs.
Like. Look. Disney did wrong with the trademark thing, just like they’ve been shitty with copyright & trademark in the past. (Yes, with Kimba, and also how they’ve completely fucked over public domain laws.) But I’m not going to keep a misdeed that they already walked back on prevent me from going to see a film that’s going to do a lot to help normalize and celebrate Mexicans and Mexican-Americans during a period when they desperately need to be.
The film may turn out to suck. I was certainly disappointed by some aspects of Book of Life. It may even turn out to be offensive. But we don’t know any of that yet. I have high hopes that this movie might turn out to be good, and more importantly, that it might turn out to do good.
7 notes
·
View notes
Photo
One of the books I always want to do something “smart” with, but am never quite sure how to integrate it into what I am doing, is Richard Rushton’s amazing “The Reality of Film”. I’ve read it at least three times by now, trying to find a way to make it into a key argument for a long-term project of sorts that has been dominating my life for years now, yet I always struggle with the thought that I never quite understood it, really, and am just using it to try to give some desperately needed backing to my lame unsubstantiated thoughts (that I am not in any sense a film scholar, and am pretty much clueless when it comes to film theory, doesn’t really help). In the book, Rushton asks an incredibly interesting set of questions, roughly reducible to one key idea: that we would benefit significantly if we moved away from the questions about what films are to those what we can do with them / what they can do. And he opens the book with a beautiful (borrowed) example intended to show how films create our reality in ways that are really not that different from anything else that we consider ‘real’, questioning the fact that we normally consider them to be something derivative, a reflection on reality rather than something that is part of it. The reality of film, as if he wants to say, blends so seamlessly with the reality of life, it is hard to understand why films are considered ‘not real’ as opposed to chairs or anything else that we make and consider a part of the tangible reality of the everyday. Films create our memories and fit into our thinking just like anything else. Why am I rambling about this? I think it is because for me, there is hardly a film or series that blends in with reality as much as Love does. Despite its many attempts to keep the viewer’s critical distance (the meta-elements, the comedic exaggeration, the set decor that is simultaneously authentic and ‘too clean’, and the deliberate exaggeration of certain dimensions of its characters), there are elements to both its ‘grammar’ - like the slowly unfolding events that imitate real (love) time - and its extra-cinematic cues (like the frequent discussions over how much of the character of Gus is based on Rust’s own experience and his relationship to Lesley Arfin, often presented as a reflection of the Mickey-Gus experience; the overlap is emphasised both through script/like both Gus and Rust being from the Midwest, or the homecoming king story/, casting /Gus’s friends in the series are played by Rust’s UCB friends/, visuals/the series frequently utilises Rust’s photographs as snippets from Gus’s life/ and other details, like the fact that Gus wears the glasses Rust actually wears in real life) - that mash the fictional with the ‘real’ or at least blur the boundaries between the two. Most importantly, the writing in the series - again, despite its genre and meta-conventions - often feels very close to the ‘real deal’, clicking so perfectly with the viewers’ experiences of similar things in their own lives, that the series often feels like an extension of what we already know, like it was “real” in the most worldly sense of the word. This makes both disliking and loving the characters simultaneously incredibly easy, and it makes the series a true standout in the sea of “will they-won’t they” TV materials. For me, the first season of Love blended so well with the familiar, it almost became a part of it, which was a huge part of why I loved it so much. While I am not usually known for keeping my distance from what takes place on screen (as this tumblr, with my often over-the-top comments, likely demonstrates), Love was the first experience I can recall where I, having been a long-time fan of Rust’s, at times literally conflated the character and the actor, up to the silly level of developing a slight crush on one, the other or both. That in itself is, of course, slightly crazy and embarrassing to admit (especially for someone who watches a lot of films, and always has to see them for the products that they are). Yet it also testified to the strength of the series, and in retrospect, made me realise a part of why I am not as thrilled with the second season as I was with the first. It is not just that the story seems to be literally a re-take on the first season, the key points repeating themselves almost too clearly (likely in part a result of the announced third season, which meant that there cannot be too many closures just yet). It is also not the fact that, in the light of all the debates about race, gender and representation that have been dominating the public domain for the last year, Love now feels simply forcefully white (even to a white non-American like me), and it cannot seem to find proper place for any of its non-white characters: the one black friend among the guys looks like ‘too little’; the “Korean” director, while meant to be a fun riff on the industry, just feels like a bad joke; the police scene - which reminded me of the discomfort recently caused by seeing another one of my faves, Mike Birbiglia, the quintessential white guy, telling a joke about how police can kill you - feels out of place, like it doesn’t belong to the characters. (The series is also not too great towards women, who all seem to be making some dumb choices.) It is mostly because it skews all its characters into the just slightly overemphasised mode of behaviour that is no longer as genuine as it was, no longer as nuanced. The biggest victim of this, perhaps surprisingly, is Gus himself. What made the character both annoying and irresistible in the first season was how different he was in different social contexts, revealing incredible (and so human) complexity: the hunched, often frowning or insecurely grinning kid from the Witchita set would quickly transform into a still awkward, yet radiant and joyful character among friends (who embraced him with such genuine warmth in scenes that lingered ever so slightly longer than they needed to just to bring the point home: there was genuine warmth and care behind the awkwardness, and it did not go unnoticed by people), then into a full-blown asshole at the slight possibility of social success, only to quickly disappear behind his own fears in every scene with Mickey, turning into a combination of self-hatred and condescending. To Rust’s credit as an actor, he pulled all those off so seamlessly, the viewers always knew this was all one person. Yet in season 2, there is much more of the overplayed, comical Gus: the bored/confused grimacing, the hunched body language that is now omnipresent; the lack of tenderness in the communication with friends, as the camera no longer stays as a presence in the singing rooms (the only conversations are joking), and as the role of the key friend character is taken over by Chris, who we’re never quite sure where to place (the awkward running conversations from season 1 are gone, replaced by more distance, so much that it is never quite clear why Gus invited him to Mickey’s work announcement party); and the lack of any redeeming moments for the character, who now only seems to be valuable for his time with Mickey (he is failing at everything else, in front of everyone else), and even with her, his posture is different, the face less honest about the inner conflict and more confused (underlined by the script’s taking away of his wit, too: the guy who warmly explained ROYGBIV in season 1 now struggles to believe nonsense facts about dr. Phil). The new Gus is somehow less deep, and thus less ‘real’, despite all the meta-moments of blending Rust & Gus into one (one could totally believe Rust was told he looked like Michael Landon with all that hair before). He has a less layered presence in the script, and in how Rust portrays him - perhaps in his own desire to overplay the comedy, but more likely due to the directors’ insistence. Yet there are moments in which the original character still shines through, and those are almost always moments of fear. (The one exception - in the beautiful episode A Day, which humanises Gus in the same way his end monologue in The Date did in season 1 - allows him to be simultaneously charming and playful and slightly obnoxious and beautifully tender, in physical movement more than in words, the feet in the sand and a casual embrace shot from the back revealing much more than grand sentences, and finally freeing the character from the half-interested grimacing.) Despite his often annoying posture and the casual cool he tries to radiate in front of others when it comes to his relationship with Mickey, Gus is - as the script very much recognises, but sadly does little to really take anywhere this time - terrified of being revealed as a fraud by Mickey, an uninteresting dork she really has no business being with. As a result, he apologises in almost all episodes, even when he is not at fault at all: for being too eager, for not being eager enough, for being too attentive or not attentive enough. For failing to be better. For simply being. As a viewer, I often had conflicting feelings about this: from empathy to annoyance (there is a fine line between a sensitive person and an uninteresting doormat who is ‘fake nice’) and back to anger over his inability to recognise that apologies are often warranted, but not for what he is apologising for. But these brief moments of genuine panic were always not only played so touchingly (a credit that again goes to Rust’s ability as an actor), but also served as a gateway to a more complicated Gus from season 1; someone deeply complex and terrified and so much more interesting than season 2 dares to explore, rather focusing on cheaper thrills. The issue is, while these scenes make the series so much more interesting and ‘true’, they also underline how casually emptied out a lot of the rest has become, despite some fantastic moments. The ‘filmic reality’ of Love no longer blends so seamlessly with the ‘real reality’ of offscreen life, which is a shame. In truth tho: if it got me to ramble about it for so much, it cannot be all that bad.
1 note
·
View note
Photo
Art of Adaptation: The Literary Webseries
Classic novels ingrained in Western culture have been adapted in many ways over years – plays, musicals, miniseries, films, modern teen novels, even text posts (no, really). In recent years, with the success of Game of Thrones, we’re seeing more and more books and series adapted to television format.
But one of my favorite methods of adaptation is one rarely discussed outside of internet culture: the literary web series.
These modern retellings of public domain works turn classic protagonists into Youtube vloggers, who let their story unfold before an audience. Literary web series have to be particularly inventive in bringing classic stories to modern day, organically integrating racial & gender diversity and modern sensibilities to works made over a hundred years ago.
Breaking down the structure of these series, there are five components to an effective adaptation:
Components
Initial conceit (or, why does this character have a blog?)
Audience acknowledgement & interaction
How are other perspectives integrated?
Inventiveness (with camera stuff, settings, etc.)
Quality of Adaptation (modernization of problematic elements, captured the spirit of the original)
Let’s look at some examples to see how this breaks down. (spoilers ahead)
The Lizzie Bennet Diaries, 2012-2013
(Adaptation of Jane Austen’s Pride & Prejudice, 1813)
Conceit
Pretty straightforward – Lizzie Bennet is a grad student in Communications doing this as her project, presenting her views in contrast to her mother’s. What starts out as documenting Lizzie’s opinions ends up getting involved in a whole lot of drama.
Audience acknowledgement & interaction High acknowledgement and interaction. Lizzie’s videos are very public and very popular in-universe. The story even takes from the audience quite a bit, responding to the multiple requests for Darcy, and even affecting the self-esteem of Lydia. Acknowledges the problems of putting your life and the lives of those around you on the internet, but how communicating with strangers can help to communicate with people closer to you.
Are other perspectives integrated? Other characters take over Lizzie’s vlog or have their own side vlogs, and show the holes in Lizzie’s sometimes biased logic.
Inventiveness This was pretty much the first well-known literary web series, so launching the whole art form definitely counts! Also, two words: costume theater.
Quality of Adaptation Lizzie Bennet Diaries, rather than being a straight point-by-point adaptation, streamlined the events to make sense for modern day – house parties become weddings and pub visits, estates become companies, problems with inheritance laws become problems with student debt and bad economy. Characters barely sketched out in the original text are fleshed out, and Lizzie herself is not only the modern Elizabeth, but the voice of self-exploring 20-somethings everywhere.
But my favorite method of adaptation was the new life injected into main themes of pride and prejudice. When the original book came out, the audience would have been surprised to discover, along with Elizabeth, the hidden depths of Darcy.
200 years later, when “Where is my Darcy?” is the common phrase among Austenites, no one is surprised Darcy is better than he seems. So, Pemberley Digital brought back the element of surprise by making Lydia Bennet, an irresponsible flake in the original book, the one truly misunderstood by Lizzie (though dear Darcy still plays an important role).
The only thing maybe lost in adaptation is the fact that, in the original book, Lizzie was more right than wrong, whereas in the web series, she seems more wrong than right. Additionally, Lizzie’s confrontation with Caroline Lee near the end of the series, meant to mirror the one with Lady Catherine De Bourgh, loses its power since Caroline doesn’t have nearly as much power over Lizzie. Lizzie standing up to her is not as big a deal.
Note: I highly recommend the companion novel The Secret Diary of Lizzie Bennet, as it fills in some elements of the story that couldn’t be put on screen.
Emma Approved, 2013-2014
(Adaptation of Jane Austen’s Emma, 1815)
Conceit Emma Woodhouse is documenting her greatness in lifestyle excellence as head of the consulting firm Emma Approved. Eh…it does fall in line with the character, but some see it as over-the-top.
Audience acknowledgement & interaction Emma’s videos, except for the Q&As, are private. But she has cameras on the desks of everyone who works there (to the consternation of some of them). I think this is where a lot of fans got lost, because the audience didn’t affect the story the way it did before.
Harriet’s music videos are a little more interactive, but not part of the main storyline.
Are other perspectives integrated? Swiveling to other people’s desk cameras helps. Also, Harriet has a music blog which often reflects her mood and her growing confidence in herself.
Inventiveness Month-long arcs of consulting clients in an office setting. More space, multiple rooms, in-universe charities made real.
Quality of Adaptation I love the way the characters were adapted, on one hand.The themes of appearance vs. true character are even more apparent in a web series format, where often charisma rules the day. Emma starts out ingratiating, but we really root for her by the end. Knightly is as lovely as ever, but now with more of a sense of humor (also helps that he’s not above Emma in station this time around). Harriet no longer stands in Emma’s shadow and grows beyond a project to a true friend.
The supporting characters are all well-sketched and memorable, with the addition of LBD’s Caroline Lee as the infamous Mrs. Elton an incredible twist. The resolutions of the main pairings (Emma/Knightley and Harriet/B-Mart) were extremely satisfying, almost more so than the ones in LBD!
But the adaptation of the story felt choppy. The month-long arcs of Emma counseling a client weren’t quite organic, and didn’t quite fall in line with the format of the original book. And by keeping the action confined to the offices, it’s argued that an important element of the story – mainly Emma’s interactions with her neighbors and her father – is lost. So, as an adaptation, it may not be the strongest. Still, it’s an enjoyable, inventive twist on a classic.
(Oh, and PS - the actors playing Emma and Knightley ended up dating in real life. If you just watch for their chemistry, that would be enough)
Autobiography of Jane Eyre, 2013-2014
(Adaptation of Charlotte Bronte’s Jane Eyre, 1847)
Conceit Jane Eyre is a nursing graduate embarking on a new chapter in her life, and wants to be brave like Lizzie. Though Jane narrates her own story in the original book as well, she’s a shy character who might seem unlikely to put herself on display on the internet. But once she gets going it becomes a great form of self-expression for her (the original Jane was an artist, updated to a photographer).
Audience acknowledgement & interaction Jane’s videos are public, and she does do Q&As, but the audience doesn’t affect the story more than that. However, Jane does acknowledge that her audience might serve as witness to the weirdness going on, proving she isn’t crazy (and possibly account for her whereabouts if she turns up dead! Ah, gothic novels.)
Are other perspectives integrated? Sometimes other people find the camera, or don’t realize that Jane left her camera on somewhere. Mostly, however, this is Jane’s story, and she tells it well.
Inventiveness Outdoor shots, not afraid to get downright creepy, meta-commentary episode of Mary Rivers watching all of Jane’s videos.
Quality of Adaptation Jane Eyre is a pretty weird novel, by modern standards, and a problematic one, what with its shortsighted treatment of race, mental illness (the half-Creole Mason family hinted as being somewhat crude and prone to mental illness), and culture (Adele and her mother are put down for being French), and its arguably unhealthy relationships (since Rochester is kind of a jerk who has slept with a lot of women, and St. John is… well… Jane’s cousin). So I’m glad a lot of this is either removed or approached with more sensitivity, while preserving much of the darkness of the original novel.
However, the adaptation does lose the supernatural element that makes the original a gothic novel. Also, since Jane isn’t facing nearly as steep of odds in terms of her class and gender, she’s as a result a softer character. But she is nonetheless strong and principled in the face of going it alone, and her story of finding a place and people to belong to is just as fulfilling as the original.Though the ending may feel rushed due to circumstances beyond the show’s control, overall it’s a strong modern adaptation.
The New Adventures of Peter and Wendy, 2014-2016
(Adaptation of J.M. Barrie’s 1904 play, Peter Pan, and 1911 novel, Peter and Wendy)
Note: This only covers Seasons 1-2, as I haven’t gotten around to Season 3 yet.
Conceit In the town of Neverland, Ohio, 27-year-old Wendy Darling runs an advice blog through her family’s paper, the Kensington Chronicle, which also captures the lives of her brothers, John and Michael, her vitriolic female friend Lily Bagha, and her best friend (who wants the be more-than-a-friend), Peter Pan.
The blog fits with Wendy’s motherly personality from the original story, but realistically doesn’t show all the action happening in front of Wendy’s camera.Not-as-realistically, the rest of the action occurs from Tinkerbell’s perspective, but it is so brilliantly done that it seems like fairies should have been included in a web series ages ago!
Audience acknowledgement & interaction On Wendy’s vlogs, Wendy does talk to the audience and answers questions, though I think most are fabricated to move the plot along.During the fairy-cam moments, no acknowledgement of audience directly, but the businesses and characters created by audience members on the Neverland Twitter registrar are sometimes referenced (and on that note, the P + W social media platforms interact a LOT with their audience).
Are other perspectives integrated? The fairy-cam gives the audience more movement and perspectives than Wendy’s vlog alone would allow, and each character gets their day in the sun, so kudos to P + W for that! Season 2 also adds cameras in Wendy’s office at JhMedia (similar to Emma Approved) and Peter’s playacting videos, splitting the narrative between the small town and the big city in interesting parallel ways.
Inventiveness The fairy-cam, and inclusion of magic in a web series in general (though it doesn’t really effect the plot). Also, surprisingly might be the most lewd of the shows reviewed so far, due to veiled references to smoking pot and “magic” brownies.
Quality of Adaptation New Peter + Wendy is by no means a faithful adaptation of the beloved novel in terms of plot. And really, how could it be? By choosing a fantasy over a comedy of manners/period piece, the creators faced a particularly huge challenge in adaptation.
The basic tenants are there – Wendy being too old to stay where she is, escapes with Peter, but realizes she has to grow up and leave Neverland, leaving Peter behind by his own choice. But other than that, the adaptation basically takes the original characters, fleshes them out as modern 20-year-olds, and uses them and Neverland as a launch point for a rumination of what it means to grow up – or not – in the 2010s. This is highlighted even more by depicting the Neverland gang and the pirates/executives of JHMedia as contemporaries. Adulthood, here, is not about age but about attitude.
The characterizations are spot on, the plot both whimsical and deeply thought provoking, and the magic of the original is still retained in surprising ways. They even made sure Hook went by “Jas” rather than “James,” a facet of the original story lost in time.
Changing Tiger Lily, a stereotyped Native American character, into a complex woman of actual Indian descent, sacrifices the problematic element of the character without whitewashing, which the reviled prequel Pan got flack for. In a major departure, the web series also explores sexuality more in depth. (If you’d told me John Darling and Smee could be an adorable pairing before this series, I’d have called you crazy. But there you go.)
Wendy’s character, however, strays from the original in that she is allowed to be more flawed. The original Wendy was meant to be an argument in favor of women’s suffrage by depicting a female character as more sensible and responsible than the male characters. While modern Wendy is still the most responsible of her friends, she is also zany, ambitious, and sometimes even cruel, making some questionable decisions the original Wendy might not have made. Her character arc reminds me a bit of Peter Banning’s in Hook as she tries to find balance between childhood and adulthood.
I can’t say whether it was effective or not without seeing Season 3, but I love that the writers are tackling those themes.
It’s difficult to pinpoint a single element that makes an adaptation a good one. But if I had to take a stab, I think it is heart, humor, and sincerity in the characters, plus a relatable plot dealing with changes and new beginnings, that most draws people to a series, and all the ones above definitely managed to capture that!
For more literary web series, check out this comprehensive list. My recommendations: Misselthwaite Archives, From Mansfield with Love, Northbound, The Cate Morland Chronicles, Edgar Allen Poe’s Murder Mystery Dinner Party/Gala for Friends Potluck (aka Poe Party).
So, what do you think? Do you think these web series capture the best of the books they’re based on? Got any other examples you want to talk about?
#literary web series#lizzie bennet diaries#emma approved#autobiography of jane eyre#aoje#lbd#the lbd#new peter and wendy#new adventures of peter and wendy
22 notes
·
View notes
Text
WHAT NO ONE UNDERSTANDS ABOUT IMAGINATION
It shows you've thought about making money, instead of reading scripts to them. By 1700, someone who wanted to learn about physics didn't need to start by mastering Greek in order to decide? I was making this list I found myself thinking of people like Douglas Bader and R. They're facts that contradict things you thought you knew. At least, you notice an interesting pattern. And they are then surprised how difficult and unpleasant it is. This is a domain where it's more true than usual that pride goeth before a fall.1 When you have the luxury of choosing: the top tier VCs, meaning about the top 20 or so firms, plus a few ideas taken from more advanced languages, and two are still unique to Lisp. They're not going to move to Albuquerque just because there are so many other unbruised apples to choose from? Obvious comparisons suggest themselves, both to the process and the resulting product.
These buildings are a pretty accurate reflection of the VC business. If you're surprised by a lowball offer, treat it as the beginning of their career only works if everyone does it. To Michel de Montaigne, inventor of the essay. My mother doesn't really need a desktop computer, you end up doing better. The low cost of starting a startup. It's not like doing extra work for extra credit. Which means no alarms go off when he takes on grand but vaguely understood questions and ends up getting lost in a sea of words. Just as you're getting settled, you're slammed back in your seat by the acceleration. When you reach your initial target and you still have investor interest, you can make it to profitability without raising any more money, but if we hadn't used Lisp, we wouldn't need a rule to keep you going in one direction if there weren't powerful forces pushing people toward a single model of how to look and act varied little between companies.
So here we have two pieces of information that I think are very valuable. We've even had a twin study: West Germany, on; East Germany, off. Web-based application now for less than the cost of a fancy office chair. And of course Euclid. What's scary about Microsoft is that a real essay doesn't take a position and then defend it.2 The only way to deliver software, but for oneself. At the bottom you'll find the subjects with least intellectual content. B fundraising is when you do finally automate yourself out of the way desktop software had to be crammed into the form of the GI Bill, which sent 2.3 Worse still, the positive version: See randomness. There is not a very meaningful test. Richard Feynman said that the imagination of growth. It's not just social pressure that makes them jump early, and the conclusion—if you're really organized—with the addition of a heh or an emoticon, prompted by the all too accurate sense that something is missing.4
When things go well you can take your time. Tomorrow a big competitor could appear, or you could get C & Ded, or your cofounder could quit. Behind every great fortune, there is no need to worry. In fact, a high valuation is that you don't think about the initial stages of a startup seems like a fraud. Put the most weight on the second factor. I wish I could say it was this way for every startup that succeeded, but 75% is probably on the high side. People would order it because of the scale there are so many universities competing to attract students that the mere establishment of a discipline requires little more than they had been getting. Basically, Apple bumped IBM and then Microsoft stole its wallet. For example, if you've sold more than about 40% of your company in subsequent rounds.5 Why call an auction site eBay? That's one advantage of being old is that you get funded.
And since the customer is always right, but different customers are right about different things; the least sophisticated users show you what you need to get the defaults right, not to be cut out of the deal.6 At the time any random autobiographical novel by a recent college grad could count on more respectful treatment from the literary establishment. In 1958 there seem to have just humiliated them technologically.7 I can tell you it was no utopia. This way of writing software is a double-edged sword of course. Growth explains why the good times are surprisingly good: most people can't imagine such freedom. This would be like being an actor in that respect. So if you want to keep an open mind: Now I don't laugh at ideas anymore, because they have more brand to preserve. And for many types of startup, that delay could be fatal. For illustrative purposes I've left the abandoned branch as a footnote. It would be less now, probably less than the cost of sending them the first month's bill. Would that mean too much due diligence?
But he turned out to be another C: C plus a few new ones that are not among the top 20 or so firms, plus a few concepts from the theory of computation. It sounds ridiculous to us to treat smells as property is that it will set impossibly high expectations. And when readers see similar stories in multiple places, they think. Its daddy is in a pinch. They did as employers too. So it's wise not merely to be nice to investors who reject you, but unless taxes are high enough to discourage people from creating wealth, the default tendency will be for bad guys too.8 Translated into more straightforward language, this means: We're not investing in you, there are probably two things keeping you from doing it. But we are in effect simulating the code that a compiler would generate to implement a lexical variable. There is almost no downside in starting with a low number.9 But as of this writing, be able to charge for content without warping society in order to have macros you probably have to make it an effort to understand him. Imagine we were living on a moon base. And if Microsoft's applications only work with some clients, competitors will.
That's the tradeoff. Beware valuation sensitive investors. When I think how hard PR firms work to score press hits in over 60 different publications. Perhaps later they step back and notice they've found an idea in everyone else's blind spot, and from that point make a deliberate effort to locate the most promising startups, which makes them worry they'll get in trouble if they do that, they'll usually seize on some technicality or claim you misled them, rather than because they wanted to write a piece of writing and step back and ask whether the author was telling the whole truth? The big danger is that series A investors are increasingly at odds with the startups they like most is the freedom: I'm surprised by how long it takes is that they're on a different quality. But even if you succeed. When I see a startup idea as a hypothesis rather than a blueprint. Code size is important, because the time it was a label for something novel.10 Many of the mid 20th century masked this underlying trend. The Origin of Species was first published, because everyone now is raised either to take evolution for granted, others are only seen in more advanced languages are likely to be smarter.
Notes
In theory you could beat the death-penalty in the middle of the reign Thomas Lord Roos was an assiduous courtier of the scholar.
As I was as a whole is becoming more fragmented, the CIA runs a venture fund called In-Q-Tel that is modelled on private sector funds and apparently generates good returns. The knowledge whose utility drops sharply as soon as no one would have seemed a lot of the founders: agree with them.
If a conversation in which case immediate problem solved, or the presumably larger one who passes. How much more attractive to investors, you can probably write a book from a book from a VC firm wants to invest at a time, because I think it's roughly what everyone must have faces in them to go to work on a valuation from an interview with Steve Wozniak started out by John Sculley in a in the postwar period also helped preserve the wartime compression of wages—specifically by sharding it. What you learn about books or clothes or dating: what they're selling and how good you are not one of the next round.
Cit. Strictly speaking it's impossible to write legislation that distinguishes them, not just the kind of organization for that might produce the next generation of software from being this boulder we had high hopes for doesn't do well, but those are guaranteed in the Ancient World, Economic History Review, 2:9 1956,185-199, reprinted in Finley, M. This phenomenon may account for a reason.
CEOs in the chaos anyway. Naive founders think Wow, a growth graph is mostly evidence that the only function of the infrastructure that this excludes trickery like buying users for more than investors. One YC founder told me they like to cluster together as much time. Most computer/software startups.
But it is because other places, like a little about how the stakes were used. Gauss was supposedly asked this when he came back as CEO. But it could change what you're doing. Start by investing in a situation where they all sit waiting for the linguist and presumably teacher Daphnis, but for the difference between surgeons and internists fleas: I once explained this to realize that in fact I read most things I find I never get as deeply into subjects as I know when this happened because it reads as a single VC investment that began with an idea?
Loosely speaking. Build them a check. He made a lot heavier.
Doh. It might also be argued that kids who went to get the money.
One to recover data from crashed hard disks. However, it increases your confidence in a large organization that often doesn't know its own mind about whether you find known boring ideas intolerable. To talk to, so x% usage growth predicts x% revenue growth.
Well, almost. It's interesting to consider themselves immortal, because any invention has a power law dropoff, but in practice signalling hasn't been much of the taste of apples because if people can see the Valley use the name implies, you might be able to redistribute wealth successfully, because they can't teach students how to achieve wisdom is that startups aren't the problem is not an efficient market in this evolution.
Thanks to Trevor Blackwell, Garry Tan, Tad Marko, and Jessica Livingston for sparking my interest in this topic.
#automatically generated text#Markov chains#Paul Graham#Python#Patrick Mooney#apples#books#step#investors#sup#Richard#effort#students#Loosely#Steve#office#time#software#fortune#buildings#investment#property#heh#cofounder#code#process#infrastructure#applications#fleas
0 notes
Text
Solving Common Cross-Platform Issues When Working With Flutter
About The Author
Flutter and LinUX enthusiast, author of the Programming Flutter book with the Pragmatic Bookshelf. Blogs more, tweets less. More about Carmine …
When using cross-platform frameworks, people might forget the nuances of each of the platforms they want their code to run on. This article aims to address that.
I’ve seen a lot of confusion online regarding Web development with Flutter and, often, it’s sadly for the wrong reasons.
Specifically, people sometimes confuse it with the older Web-based mobile (and desktop) cross-platform frameworks, which basically were just Web pages running within browsers running within a wrapper app.
That was truly cross-platform in the sense that the interfaces were the same anyway because you only had access to the interfaces normally accessible on the Web.
Flutter isn’t that, though: it runs natively on each platform, and it means each app runs just like it would run if it were written in Java/Kotlin or Objective-C/Swift on Android and iOS, pretty much. You need to know that because this implies that you need to take care of the many differences between these very diverse platforms.
In this article, we’re going to see some of those differences and how to overcome them. More specifically, we’re going to talk about storage and UI differences, which are the ones that most often cause confusion to developers when writing Flutter code that they want to be cross-platform.
Example 1: Storage
I recently wrote on my blog about the need for a different approach to storing JWTs in Web apps when compared to mobile apps.
That is because of the different nature of the platforms’ storage options, and the need to know each and their native development tools.
Web
When you write a Web app, the storage options you have are:
downloading/uploading files to/from disk, which requires user interaction and is therefore only suitable for files meant to be read or created by the user;
using cookies, which may or may not be accessible from JS (depending on whether or not they’re httpOnly) and are automatically sent along with requests to a given domain and saved when they come as part of a response;
using JS localStorage and sessionStorage, accessible by any JS on the website, but only from JS that is part of the pages of that website.
Mobile
The situation when it comes to mobile apps is completely different. The storage options are the following:
local app documents or cache storage, accessible by that app;
other local storage paths for user-created/readable files;
NSUserDefaults and SharedPreferences respectively on iOS and Android for key-value storage;
Keychain on iOS and KeyStore on Android for secure storage of, respectively, any data and cryptographic keys.
If you don’t know that, you’re going to make a mess of your implementations because you need to know what storage solution you’re actually using and what the advantages and drawbacks are.
Cross-Platform Solutions: An Initial Approach
Using the Flutter shared_preferences package uses localStorage on the Web, SharedPreferences on Android and NSUserDefaults on iOS. Those have completely different implications for your app, especially if you’re storing sensitive information like session tokens: localStorage can be read by the client, so it’s a problem if you’re vulnerable to XSS. Even though mobile apps aren’t really vulnerable to XSS, SharedPreferences and NSUserDefaults are not secure storage methods because they can be compromised on the client side since they are not secure storage and not encrypted. That’s because they are meant for user preferences, as mentioned here in the case of iOS and here in the Android documentation when talking about the Security library which is designed to provide wrappers to the SharedPreferences specifically to encrypt the data before storing it.
Secure Storage On Mobile
The only secure storage solutions on mobile are Keychain and KeyStore on iOS and Android respectively, whereas there is no secure storage on the Web.
The Keychain and KeyStore are very different in nature, though: Keychain is a generic credentials storage solution, whereas the KeyStore is used to store (and can generate) cryptographic keys, either symmetric keys or public/private keys.
This means that if, for instance, you need to store a session token, on iOS you can let the OS manage the encryption part and just send your token to the Keychain, whereas on Android it’s a bit more of a manual experience because you need to generate (not hard-code, that’s bad) a key, use it to encrypt the token, store the encrypted token in SharedPreferences and store the key in the KeyStore.
There are different approaches to that, as are most things in security, but the simplest is probably to use symmetric encryption, as there is no need for public key cryptography since your app both encrypts and decrypts the token.
Obviously, you don’t need to write mobile platform-specific code that does all of that, as there is a Flutter plugin that does all of that, for instance.
The Lack Of Secure Storage On the Web
That was, actually, the reason that compelled me to write this post. I wrote about using that package to store JWT on mobile apps and people wanted the Web version of that but, as I said, there is no secure storage on the Web. It doesn’t exist.
Does that mean your JWT has to be out in the open?
No, not at all. You can use httpOnly cookies, can’t you? Those aren’t accessible by JS and are sent only to your server. The issue with that is that they’re always sent to your server, even if one of your users clicks on a GET request URL on someone else’s website and that GET request has side effects you or your user won’t like. This actually works for other request types as well, it’s just more complicated. It’s called Cross-Site Request Forgery and you don’t want that. It’s among the web security threats mentioned in Mozilla’s MDN docs, where you can find a more complete explanation.
There are prevention methods. The most common one is having two tokens, actually: one of them getting to the client as an httpOnly cookie, the other as part of the response. The latter has to be stored in localStorage and not in cookies because we don’t want it to be sent automatically to the server.
Solving Both
What if you have both a mobile app and a Web app?
That can be dealt with in one of two ways:
Use the same backend endpoint, but manually get and send the cookies using the cookie-related HTTP headers;
Create a separate non-Web backend endpoint that generates different token than either token used by the Web app and then allow for regular JWT authorization if the client is able to provide the mobile-only token.
Running Different Code On Different Platforms
Now, let’s see how we can run different code on different platforms in order to be able to compensate for the differences.
Creating A Flutter Plugin
Especially to solve the problem of storage, one way you can do that is with a plugin package: plugins provide a common Dart interface and can run different code on different platforms, including native platform-specific Kotlin/Java or Swift/Objective-C code. Developing packages and plugins is rather complex, but it’s explained in many places on the Web and elsewhere (for example in Flutter books), including the official Flutter documentation.
For mobile platforms, for instance, there already is a secure storage plugin, and that’s flutter_secure_storage, for which you can find an example of usage here, but that doesn’t work on the Web, for example.
On the other hand, for simple key-value storage that also works on the web, there’s a cross-platform Google-developed first-party plugin package called shared_preferences, which has a Web-specific component called shared_preferences_web which uses NSUserDefaults, SharedPreferences or localStorage depending on the platform.
TargetPlatform on Flutter
After importing package:flutter/foundation.dart, you can compare Theme.of(context).platform to the values:
TargetPlatform.android
TargetPlatform.iOS
TargetPlatform.linUX
TargetPlatform.windows
TargetPlatform.macOS
TargetPlatform.fuchsia
and write your functions so that, for each platform you want to support, they do the appropriate thing. This will come especially useful for the next example of platform difference, and that is differences in how widgets are displayed on different platforms.
For that use case, in particular, there is also a reasonably popular flutter_platform_widgets plugin, which simplifies the development of platform-aware widgets.
Example 2: Differences In How The Same Widget Is Displayed
You can’t just write cross-platform code and pretend a browser, a phone, a computer, and a smartwatch are the same thing — unless you want your Android and iOS app to be a WebView and your desktop app to be built with Electron. There are plenty of reasons not to do that, and it’s not the point of this piece to convince you to use frameworks like Flutter instead that keep your app native, with all the performance and user experience advantages that come with it, while allowing you to write code that is going to be the same for all platforms most of the time.
That requires care and attention, though, and at least a basic knowledge of the platforms you want to support, their actual native APIs, and all of that. React Native users need to pay even more attention to that because that framework uses the built-in OS widgets, so you actually need to pay even more attention to how the app looks by testing it extensively on both platforms, without being able to switch between iOS and Material widget on the fly like it’s possible with Flutter.
What Changes Without Your Request
There are some aspects of the UI of your app that are automatically changed when you switch platforms. This section also mentions what changes between Flutter and React Native in this respect.
Between Android And iOS (Flutter)
Flutter is capable of rendering Material widgets on iOS (and Cupertino (iOS-like) widgets on Android), but what it DOESN’T do is show exactly the same thing on Android and iOS: Material theming especially adapts to the conventions of each platform.
For instance, navigation animations and transitions and default fonts are different, but those don’t impact your app that much.
What may affect some of your choices when it comes to aesthetics or UX is the fact that some static elements also change. Specifically, some icons change between the two platforms, app bar titles are in the middle on iOS and on the left on Android (on the left of the available space in case there is a back button or the button to open a Drawer (explained here in the Material Design guidelines and also known as a hamburger menu). Here’s what a Material app with a Drawer looks like on Android:
Material app running on Android: the AppBar title is in the left side of the available space. (Large preview)
And what the same, very simple, Material app looks like on iOS:
Material app running on iOS: the AppBar title is in the middle. (Large preview)
Between Mobile and Web and With Screen Notches (Flutter)
On the Web there is a bit of a different situation, as mentioned also in this Smashing article about Responsive Web Development with Flutter: in particular, in addition to having to optimize for bigger screens and account for the way people expect to navigate through your site — which is the main focus of that article — you have to worry about the fact that sometimes widgets are placed outside of the browser window. Also, some phones have notches in the top part of their screen or other impediments to the correct viewing of your app because of some sort of obstruction.
Both of these problems can be avoided by wrapping your widgets in a SafeArea widget, which is a particular kind of padding widget which makes sure your widgets fall into a place where they can actually be displayed without anything impeding the users’ ability to see them, be it a hardware or software constraint.
In React Native
React Native requires much more attention and a much deeper knowledge of each platform, in addition to requiring you to run the iOS Simulator as well as the Android Emulator at the very least in order to be able to test your app on both platforms: it’s not the same and it converts its JavaScript UI elements to platform-specific widgets. In other words, your React Native apps will always look like iOS — with Cupertino UI elements as they are sometimes called — and your Android apps will always look like regular Material Design Android apps because it’s using the platform’s widgets.
The difference here is that Flutter renders its widgets with its own low-level rendering engine, which means you can test both app versions on one platform.
Getting Around That Issue
Unless you’re going for something very specific, your app is supposed to look different on different platforms otherwise some of your users will be unhappy.
Just like you shouldn’t simply ship a mobile app to the web (as I wrote in the aforementioned Smashing post), you shouldn’t ship an app full of Cupertino widgets to Android users, for example, because it’s going to be confusing for the most part. On the other hand, having the chance to actually run an app that has widgets that are meant for another platform allows you to test the app and show it to people in both versions without having to use two devices for that necessarily.
The Other Side: Using The Wrong Widgets For The Right Reasons
But that also means that you can do most of your Flutter development on a LinUX or Windows workstation without sacrificing the experience of your iOS users, and then just build the app for the other platform and not have to worry about thoroughly testing it.
Next Steps
Cross-platform frameworks are awesome, but they shift responsibility to you, the developer, to understand how each platform works and how to make sure your app adapts and is pleasant to use for your users. Other small things to consider may be, for example, using different descriptions for what might be in essence the same thing if there are different conventions on different platforms.
It’s great to not have to build the two (or more) apps separately using different languages, but you still need to keep in mind you are, in essence, building more than one app and that requires thinking about each of the apps you are building.
Further Resources
(ra, yk, il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/solving-common-cross-platform-issues-when-working-with-flutter/ source https://scpie1.blogspot.com/2020/06/solving-common-cross-platform-issues.html
0 notes
Text
Solving Common Cross-Platform Issues When Working With Flutter
About The Author
Flutter and LinUX enthusiast, author of the Programming Flutter book with the Pragmatic Bookshelf. Blogs more, tweets less. More about Carmine …
When using cross-platform frameworks, people might forget the nuances of each of the platforms they want their code to run on. This article aims to address that.
I’ve seen a lot of confusion online regarding Web development with Flutter and, often, it’s sadly for the wrong reasons.
Specifically, people sometimes confuse it with the older Web-based mobile (and desktop) cross-platform frameworks, which basically were just Web pages running within browsers running within a wrapper app.
That was truly cross-platform in the sense that the interfaces were the same anyway because you only had access to the interfaces normally accessible on the Web.
Flutter isn’t that, though: it runs natively on each platform, and it means each app runs just like it would run if it were written in Java/Kotlin or Objective-C/Swift on Android and iOS, pretty much. You need to know that because this implies that you need to take care of the many differences between these very diverse platforms.
In this article, we’re going to see some of those differences and how to overcome them. More specifically, we’re going to talk about storage and UI differences, which are the ones that most often cause confusion to developers when writing Flutter code that they want to be cross-platform.
Example 1: Storage
I recently wrote on my blog about the need for a different approach to storing JWTs in Web apps when compared to mobile apps.
That is because of the different nature of the platforms’ storage options, and the need to know each and their native development tools.
Web
When you write a Web app, the storage options you have are:
downloading/uploading files to/from disk, which requires user interaction and is therefore only suitable for files meant to be read or created by the user;
using cookies, which may or may not be accessible from JS (depending on whether or not they’re httpOnly) and are automatically sent along with requests to a given domain and saved when they come as part of a response;
using JS localStorage and sessionStorage, accessible by any JS on the website, but only from JS that is part of the pages of that website.
Mobile
The situation when it comes to mobile apps is completely different. The storage options are the following:
local app documents or cache storage, accessible by that app;
other local storage paths for user-created/readable files;
NSUserDefaults and SharedPreferences respectively on iOS and Android for key-value storage;
Keychain on iOS and KeyStore on Android for secure storage of, respectively, any data and cryptographic keys.
If you don’t know that, you’re going to make a mess of your implementations because you need to know what storage solution you’re actually using and what the advantages and drawbacks are.
Cross-Platform Solutions: An Initial Approach
Using the Flutter shared_preferences package uses localStorage on the Web, SharedPreferences on Android and NSUserDefaults on iOS. Those have completely different implications for your app, especially if you’re storing sensitive information like session tokens: localStorage can be read by the client, so it’s a problem if you’re vulnerable to XSS. Even though mobile apps aren’t really vulnerable to XSS, SharedPreferences and NSUserDefaults are not secure storage methods because they can be compromised on the client side since they are not secure storage and not encrypted. That’s because they are meant for user preferences, as mentioned here in the case of iOS and here in the Android documentation when talking about the Security library which is designed to provide wrappers to the SharedPreferences specifically to encrypt the data before storing it.
Secure Storage On Mobile
The only secure storage solutions on mobile are Keychain and KeyStore on iOS and Android respectively, whereas there is no secure storage on the Web.
The Keychain and KeyStore are very different in nature, though: Keychain is a generic credentials storage solution, whereas the KeyStore is used to store (and can generate) cryptographic keys, either symmetric keys or public/private keys.
This means that if, for instance, you need to store a session token, on iOS you can let the OS manage the encryption part and just send your token to the Keychain, whereas on Android it’s a bit more of a manual experience because you need to generate (not hard-code, that’s bad) a key, use it to encrypt the token, store the encrypted token in SharedPreferences and store the key in the KeyStore.
There are different approaches to that, as are most things in security, but the simplest is probably to use symmetric encryption, as there is no need for public key cryptography since your app both encrypts and decrypts the token.
Obviously, you don’t need to write mobile platform-specific code that does all of that, as there is a Flutter plugin that does all of that, for instance.
The Lack Of Secure Storage On the Web
That was, actually, the reason that compelled me to write this post. I wrote about using that package to store JWT on mobile apps and people wanted the Web version of that but, as I said, there is no secure storage on the Web. It doesn’t exist.
Does that mean your JWT has to be out in the open?
No, not at all. You can use httpOnly cookies, can’t you? Those aren’t accessible by JS and are sent only to your server. The issue with that is that they’re always sent to your server, even if one of your users clicks on a GET request URL on someone else’s website and that GET request has side effects you or your user won’t like. This actually works for other request types as well, it’s just more complicated. It’s called Cross-Site Request Forgery and you don’t want that. It’s among the web security threats mentioned in Mozilla’s MDN docs, where you can find a more complete explanation.
There are prevention methods. The most common one is having two tokens, actually: one of them getting to the client as an httpOnly cookie, the other as part of the response. The latter has to be stored in localStorage and not in cookies because we don’t want it to be sent automatically to the server.
Solving Both
What if you have both a mobile app and a Web app?
That can be dealt with in one of two ways:
Use the same backend endpoint, but manually get and send the cookies using the cookie-related HTTP headers;
Create a separate non-Web backend endpoint that generates different token than either token used by the Web app and then allow for regular JWT authorization if the client is able to provide the mobile-only token.
Running Different Code On Different Platforms
Now, let’s see how we can run different code on different platforms in order to be able to compensate for the differences.
Creating A Flutter Plugin
Especially to solve the problem of storage, one way you can do that is with a plugin package: plugins provide a common Dart interface and can run different code on different platforms, including native platform-specific Kotlin/Java or Swift/Objective-C code. Developing packages and plugins is rather complex, but it’s explained in many places on the Web and elsewhere (for example in Flutter books), including the official Flutter documentation.
For mobile platforms, for instance, there already is a secure storage plugin, and that’s flutter_secure_storage, for which you can find an example of usage here, but that doesn’t work on the Web, for example.
On the other hand, for simple key-value storage that also works on the web, there’s a cross-platform Google-developed first-party plugin package called shared_preferences, which has a Web-specific component called shared_preferences_web which uses NSUserDefaults, SharedPreferences or localStorage depending on the platform.
TargetPlatform on Flutter
After importing package:flutter/foundation.dart, you can compare Theme.of(context).platform to the values:
TargetPlatform.android
TargetPlatform.iOS
TargetPlatform.linUX
TargetPlatform.windows
TargetPlatform.macOS
TargetPlatform.fuchsia
and write your functions so that, for each platform you want to support, they do the appropriate thing. This will come especially useful for the next example of platform difference, and that is differences in how widgets are displayed on different platforms.
For that use case, in particular, there is also a reasonably popular flutter_platform_widgets plugin, which simplifies the development of platform-aware widgets.
Example 2: Differences In How The Same Widget Is Displayed
You can’t just write cross-platform code and pretend a browser, a phone, a computer, and a smartwatch are the same thing — unless you want your Android and iOS app to be a WebView and your desktop app to be built with Electron. There are plenty of reasons not to do that, and it’s not the point of this piece to convince you to use frameworks like Flutter instead that keep your app native, with all the performance and user experience advantages that come with it, while allowing you to write code that is going to be the same for all platforms most of the time.
That requires care and attention, though, and at least a basic knowledge of the platforms you want to support, their actual native APIs, and all of that. React Native users need to pay even more attention to that because that framework uses the built-in OS widgets, so you actually need to pay even more attention to how the app looks by testing it extensively on both platforms, without being able to switch between iOS and Material widget on the fly like it’s possible with Flutter.
What Changes Without Your Request
There are some aspects of the UI of your app that are automatically changed when you switch platforms. This section also mentions what changes between Flutter and React Native in this respect.
Between Android And iOS (Flutter)
Flutter is capable of rendering Material widgets on iOS (and Cupertino (iOS-like) widgets on Android), but what it DOESN’T do is show exactly the same thing on Android and iOS: Material theming especially adapts to the conventions of each platform.
For instance, navigation animations and transitions and default fonts are different, but those don’t impact your app that much.
What may affect some of your choices when it comes to aesthetics or UX is the fact that some static elements also change. Specifically, some icons change between the two platforms, app bar titles are in the middle on iOS and on the left on Android (on the left of the available space in case there is a back button or the button to open a Drawer (explained here in the Material Design guidelines and also known as a hamburger menu). Here’s what a Material app with a Drawer looks like on Android:
Material app running on Android: the AppBar title is in the left side of the available space. (Large preview)
And what the same, very simple, Material app looks like on iOS:
Material app running on iOS: the AppBar title is in the middle. (Large preview)
Between Mobile and Web and With Screen Notches (Flutter)
On the Web there is a bit of a different situation, as mentioned also in this Smashing article about Responsive Web Development with Flutter: in particular, in addition to having to optimize for bigger screens and account for the way people expect to navigate through your site — which is the main focus of that article — you have to worry about the fact that sometimes widgets are placed outside of the browser window. Also, some phones have notches in the top part of their screen or other impediments to the correct viewing of your app because of some sort of obstruction.
Both of these problems can be avoided by wrapping your widgets in a SafeArea widget, which is a particular kind of padding widget which makes sure your widgets fall into a place where they can actually be displayed without anything impeding the users’ ability to see them, be it a hardware or software constraint.
In React Native
React Native requires much more attention and a much deeper knowledge of each platform, in addition to requiring you to run the iOS Simulator as well as the Android Emulator at the very least in order to be able to test your app on both platforms: it’s not the same and it converts its JavaScript UI elements to platform-specific widgets. In other words, your React Native apps will always look like iOS — with Cupertino UI elements as they are sometimes called — and your Android apps will always look like regular Material Design Android apps because it’s using the platform’s widgets.
The difference here is that Flutter renders its widgets with its own low-level rendering engine, which means you can test both app versions on one platform.
Getting Around That Issue
Unless you’re going for something very specific, your app is supposed to look different on different platforms otherwise some of your users will be unhappy.
Just like you shouldn’t simply ship a mobile app to the web (as I wrote in the aforementioned Smashing post), you shouldn’t ship an app full of Cupertino widgets to Android users, for example, because it’s going to be confusing for the most part. On the other hand, having the chance to actually run an app that has widgets that are meant for another platform allows you to test the app and show it to people in both versions without having to use two devices for that necessarily.
The Other Side: Using The Wrong Widgets For The Right Reasons
But that also means that you can do most of your Flutter development on a LinUX or Windows workstation without sacrificing the experience of your iOS users, and then just build the app for the other platform and not have to worry about thoroughly testing it.
Next Steps
Cross-platform frameworks are awesome, but they shift responsibility to you, the developer, to understand how each platform works and how to make sure your app adapts and is pleasant to use for your users. Other small things to consider may be, for example, using different descriptions for what might be in essence the same thing if there are different conventions on different platforms.
It’s great to not have to build the two (or more) apps separately using different languages, but you still need to keep in mind you are, in essence, building more than one app and that requires thinking about each of the apps you are building.
Further Resources
(ra, yk, il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/solving-common-cross-platform-issues-when-working-with-flutter/ source https://scpie.tumblr.com/post/621342349322289152
0 notes
Text
Solving Common Cross-Platform Issues When Working With Flutter
About The Author
Flutter and LinUX enthusiast, author of the Programming Flutter book with the Pragmatic Bookshelf. Blogs more, tweets less. More about Carmine …
When using cross-platform frameworks, people might forget the nuances of each of the platforms they want their code to run on. This article aims to address that.
I’ve seen a lot of confusion online regarding Web development with Flutter and, often, it’s sadly for the wrong reasons.
Specifically, people sometimes confuse it with the older Web-based mobile (and desktop) cross-platform frameworks, which basically were just Web pages running within browsers running within a wrapper app.
That was truly cross-platform in the sense that the interfaces were the same anyway because you only had access to the interfaces normally accessible on the Web.
Flutter isn’t that, though: it runs natively on each platform, and it means each app runs just like it would run if it were written in Java/Kotlin or Objective-C/Swift on Android and iOS, pretty much. You need to know that because this implies that you need to take care of the many differences between these very diverse platforms.
In this article, we’re going to see some of those differences and how to overcome them. More specifically, we’re going to talk about storage and UI differences, which are the ones that most often cause confusion to developers when writing Flutter code that they want to be cross-platform.
Example 1: Storage
I recently wrote on my blog about the need for a different approach to storing JWTs in Web apps when compared to mobile apps.
That is because of the different nature of the platforms’ storage options, and the need to know each and their native development tools.
Web
When you write a Web app, the storage options you have are:
downloading/uploading files to/from disk, which requires user interaction and is therefore only suitable for files meant to be read or created by the user;
using cookies, which may or may not be accessible from JS (depending on whether or not they’re httpOnly) and are automatically sent along with requests to a given domain and saved when they come as part of a response;
using JS localStorage and sessionStorage, accessible by any JS on the website, but only from JS that is part of the pages of that website.
Mobile
The situation when it comes to mobile apps is completely different. The storage options are the following:
local app documents or cache storage, accessible by that app;
other local storage paths for user-created/readable files;
NSUserDefaults and SharedPreferences respectively on iOS and Android for key-value storage;
Keychain on iOS and KeyStore on Android for secure storage of, respectively, any data and cryptographic keys.
If you don’t know that, you’re going to make a mess of your implementations because you need to know what storage solution you’re actually using and what the advantages and drawbacks are.
Cross-Platform Solutions: An Initial Approach
Using the Flutter shared_preferences package uses localStorage on the Web, SharedPreferences on Android and NSUserDefaults on iOS. Those have completely different implications for your app, especially if you’re storing sensitive information like session tokens: localStorage can be read by the client, so it’s a problem if you’re vulnerable to XSS. Even though mobile apps aren’t really vulnerable to XSS, SharedPreferences and NSUserDefaults are not secure storage methods because they can be compromised on the client side since they are not secure storage and not encrypted. That’s because they are meant for user preferences, as mentioned here in the case of iOS and here in the Android documentation when talking about the Security library which is designed to provide wrappers to the SharedPreferences specifically to encrypt the data before storing it.
Secure Storage On Mobile
The only secure storage solutions on mobile are Keychain and KeyStore on iOS and Android respectively, whereas there is no secure storage on the Web.
The Keychain and KeyStore are very different in nature, though: Keychain is a generic credentials storage solution, whereas the KeyStore is used to store (and can generate) cryptographic keys, either symmetric keys or public/private keys.
This means that if, for instance, you need to store a session token, on iOS you can let the OS manage the encryption part and just send your token to the Keychain, whereas on Android it’s a bit more of a manual experience because you need to generate (not hard-code, that’s bad) a key, use it to encrypt the token, store the encrypted token in SharedPreferences and store the key in the KeyStore.
There are different approaches to that, as are most things in security, but the simplest is probably to use symmetric encryption, as there is no need for public key cryptography since your app both encrypts and decrypts the token.
Obviously, you don’t need to write mobile platform-specific code that does all of that, as there is a Flutter plugin that does all of that, for instance.
The Lack Of Secure Storage On the Web
That was, actually, the reason that compelled me to write this post. I wrote about using that package to store JWT on mobile apps and people wanted the Web version of that but, as I said, there is no secure storage on the Web. It doesn’t exist.
Does that mean your JWT has to be out in the open?
No, not at all. You can use httpOnly cookies, can’t you? Those aren’t accessible by JS and are sent only to your server. The issue with that is that they’re always sent to your server, even if one of your users clicks on a GET request URL on someone else’s website and that GET request has side effects you or your user won’t like. This actually works for other request types as well, it’s just more complicated. It’s called Cross-Site Request Forgery and you don’t want that. It’s among the web security threats mentioned in Mozilla’s MDN docs, where you can find a more complete explanation.
There are prevention methods. The most common one is having two tokens, actually: one of them getting to the client as an httpOnly cookie, the other as part of the response. The latter has to be stored in localStorage and not in cookies because we don’t want it to be sent automatically to the server.
Solving Both
What if you have both a mobile app and a Web app?
That can be dealt with in one of two ways:
Use the same backend endpoint, but manually get and send the cookies using the cookie-related HTTP headers;
Create a separate non-Web backend endpoint that generates different token than either token used by the Web app and then allow for regular JWT authorization if the client is able to provide the mobile-only token.
Running Different Code On Different Platforms
Now, let’s see how we can run different code on different platforms in order to be able to compensate for the differences.
Creating A Flutter Plugin
Especially to solve the problem of storage, one way you can do that is with a plugin package: plugins provide a common Dart interface and can run different code on different platforms, including native platform-specific Kotlin/Java or Swift/Objective-C code. Developing packages and plugins is rather complex, but it’s explained in many places on the Web and elsewhere (for example in Flutter books), including the official Flutter documentation.
For mobile platforms, for instance, there already is a secure storage plugin, and that’s flutter_secure_storage, for which you can find an example of usage here, but that doesn’t work on the Web, for example.
On the other hand, for simple key-value storage that also works on the web, there’s a cross-platform Google-developed first-party plugin package called shared_preferences, which has a Web-specific component called shared_preferences_web which uses NSUserDefaults, SharedPreferences or localStorage depending on the platform.
TargetPlatform on Flutter
After importing package:flutter/foundation.dart, you can compare Theme.of(context).platform to the values:
TargetPlatform.android
TargetPlatform.iOS
TargetPlatform.linUX
TargetPlatform.windows
TargetPlatform.macOS
TargetPlatform.fuchsia
and write your functions so that, for each platform you want to support, they do the appropriate thing. This will come especially useful for the next example of platform difference, and that is differences in how widgets are displayed on different platforms.
For that use case, in particular, there is also a reasonably popular flutter_platform_widgets plugin, which simplifies the development of platform-aware widgets.
Example 2: Differences In How The Same Widget Is Displayed
You can’t just write cross-platform code and pretend a browser, a phone, a computer, and a smartwatch are the same thing — unless you want your Android and iOS app to be a WebView and your desktop app to be built with Electron. There are plenty of reasons not to do that, and it’s not the point of this piece to convince you to use frameworks like Flutter instead that keep your app native, with all the performance and user experience advantages that come with it, while allowing you to write code that is going to be the same for all platforms most of the time.
That requires care and attention, though, and at least a basic knowledge of the platforms you want to support, their actual native APIs, and all of that. React Native users need to pay even more attention to that because that framework uses the built-in OS widgets, so you actually need to pay even more attention to how the app looks by testing it extensively on both platforms, without being able to switch between iOS and Material widget on the fly like it’s possible with Flutter.
What Changes Without Your Request
There are some aspects of the UI of your app that are automatically changed when you switch platforms. This section also mentions what changes between Flutter and React Native in this respect.
Between Android And iOS (Flutter)
Flutter is capable of rendering Material widgets on iOS (and Cupertino (iOS-like) widgets on Android), but what it DOESN’T do is show exactly the same thing on Android and iOS: Material theming especially adapts to the conventions of each platform.
For instance, navigation animations and transitions and default fonts are different, but those don’t impact your app that much.
What may affect some of your choices when it comes to aesthetics or UX is the fact that some static elements also change. Specifically, some icons change between the two platforms, app bar titles are in the middle on iOS and on the left on Android (on the left of the available space in case there is a back button or the button to open a Drawer (explained here in the Material Design guidelines and also known as a hamburger menu). Here’s what a Material app with a Drawer looks like on Android:
Material app running on Android: the AppBar title is in the left side of the available space. (Large preview)
And what the same, very simple, Material app looks like on iOS:
Material app running on iOS: the AppBar title is in the middle. (Large preview)
Between Mobile and Web and With Screen Notches (Flutter)
On the Web there is a bit of a different situation, as mentioned also in this Smashing article about Responsive Web Development with Flutter: in particular, in addition to having to optimize for bigger screens and account for the way people expect to navigate through your site — which is the main focus of that article — you have to worry about the fact that sometimes widgets are placed outside of the browser window. Also, some phones have notches in the top part of their screen or other impediments to the correct viewing of your app because of some sort of obstruction.
Both of these problems can be avoided by wrapping your widgets in a SafeArea widget, which is a particular kind of padding widget which makes sure your widgets fall into a place where they can actually be displayed without anything impeding the users’ ability to see them, be it a hardware or software constraint.
In React Native
React Native requires much more attention and a much deeper knowledge of each platform, in addition to requiring you to run the iOS Simulator as well as the Android Emulator at the very least in order to be able to test your app on both platforms: it’s not the same and it converts its JavaScript UI elements to platform-specific widgets. In other words, your React Native apps will always look like iOS — with Cupertino UI elements as they are sometimes called — and your Android apps will always look like regular Material Design Android apps because it’s using the platform’s widgets.
The difference here is that Flutter renders its widgets with its own low-level rendering engine, which means you can test both app versions on one platform.
Getting Around That Issue
Unless you’re going for something very specific, your app is supposed to look different on different platforms otherwise some of your users will be unhappy.
Just like you shouldn’t simply ship a mobile app to the web (as I wrote in the aforementioned Smashing post), you shouldn’t ship an app full of Cupertino widgets to Android users, for example, because it’s going to be confusing for the most part. On the other hand, having the chance to actually run an app that has widgets that are meant for another platform allows you to test the app and show it to people in both versions without having to use two devices for that necessarily.
The Other Side: Using The Wrong Widgets For The Right Reasons
But that also means that you can do most of your Flutter development on a LinUX or Windows workstation without sacrificing the experience of your iOS users, and then just build the app for the other platform and not have to worry about thoroughly testing it.
Next Steps
Cross-platform frameworks are awesome, but they shift responsibility to you, the developer, to understand how each platform works and how to make sure your app adapts and is pleasant to use for your users. Other small things to consider may be, for example, using different descriptions for what might be in essence the same thing if there are different conventions on different platforms.
It’s great to not have to build the two (or more) apps separately using different languages, but you still need to keep in mind you are, in essence, building more than one app and that requires thinking about each of the apps you are building.
Further Resources
(ra, yk, il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/solving-common-cross-platform-issues-when-working-with-flutter/
0 notes