text:
The Opposite of Life by Narrelle M Harris
The Opposite of Life by Narrelle M Harris is the author's first published novel starring Lissa and Gary. I recently reviewed its sequel, Walking Shadows. I have to warn you, this review is coming from the position of having read the second book first and I can't avoid comparing the two.
Lissa Wilson has seen more than enough death in her family, so when people start being savagely killed whenever she has a night out in Melbourne with her beautiful new boyfriend, she's determined to investigate and to make the killing stop. Even when she realises the murders must be the work of a vampire.
Things had been looking up for this librarian and 21st century geekgirl, but the murders make her remember why she prefers books to people. People leave you. People can die.
She finds herself teaming up with the painfully awkward Gary to get to the undead heart of the matter. But there are more challenges in store than Gary's appalling fashion sense.
The Opposite of Life introduces Lissa and Gary and the vampires of Melbourne. It's a somewhat darker book than Walking Shadows. There's a lot more death in it — the story centres around a series of murders and Lissa has the poor fortune to discover several of the bodies. The associated trauma, of course, leads her to be somewhat less than chipper and besides that she has a lot of other emotional baggage to come to terms with. And since Lissa meets Gary for the first time part way through the book, there's less opportunity for entertaining interactions between them. I liked that in Walking Shadows they were well established as friends.
The vampire mythos in Harris's world is refreshing in not being overly romanticised. Vampires don't feel much because they're dead. Their brains also don't work as well and they get firmly entrenched in old habits. Modern technology has made it harder for them to not draw attention to themselves and so they're not generally inclined to run around killing people willy-nilly (any more).
Harris juxtaposes the numb emotions of the vampires with humans, mostly various members of Lissa's family, who don't want to feel any more and deal with it using more conventional means (drugs, alcohol, etc). It is the appeal of not feeling which is the lure to vampirism for some of the characters in this story, not just eternal life and youth, but the promise that it will hurt less to live an undead life. An interesting notion and not one that comes up too often in vampire fiction. Not that there aren't a lot of jaded vampires around, but often they're that way thanks to their longevity.
I enjoyed The Opposite of Life quite a bit and I look forward to reading more Lissa and Gary stories in the future. I enjoyed Walking Shadows a bit more, though, mainly because it was cheerier and caused more laughs. I highly recommend this series to anyone looking for less conventional vampire fiction. An excellent panacea for the reader sick of Edward Cullens and (YA-ified) Lestats.
First published: 2007, Pulp Fiction Press
Series: Lissa and Gary, book 1 of ? (two so far)
Format read: ePub on my iThings
Source: Booki.sh, who have recently started allowing publishers to sell DRM free ePub files as well as their existing read in the cloud thing
Labels: 4 stars, australian authors, AWW2013, crime, fantasy, narrelle m harris, urban fantasy, vampires
A Bunch of News
I don't usually do news posts (because I honestly don't have time to) but a few exciting and noteworthy things have all come to my attention at once.
Glenda Larke's Havenstar, which was first published in 1999 and then quickly went out of print when the publisher folded, was re-released as an ebook late last year — link to SmashWords. Now Havenstar is being re-released in dead tree form as well! Here's the announcement on Glenda's blog and the full story of its initial publication.
New ebook cover New print cover
The Canberra Speculative Fiction Guild releases an anthology of short stories by Australian writers (not necessarily Canberrans) every year. For the first time, they are going to release one in ebook form, with the rest to follow. The first anthology that's been ebookified is Winds of Change, coincidentally the one with one of my stories in it ("Time Capsule"). Read more here. I have it on good authority that they're currently in the process of ebookifying more of their catalogue.
The next bit of news I actually stumbled across accidentally, when Tehani of FableCroft uploaded a new cover to Goodreads. Tansy Rayner Roberts's Mocklore Chronicles are going to be re-released by FableCroft! Interestingly, this is another two books which went out of print when the publisher folded. Splashdance Silver was first published in 1998 and has just come out from FableCroft, Liquid Gold, the second book, was originally published in 1999 and will be coming soon and the third book, Ink Black Magic, will be published for the first time after that. I have a copy of Spashdance Silver, which I read, er, around ten years ago, when I was in high school. I honestly don't remember if I ever got the chance to read Liquid Gold. I have a clear memory of my friend obtaining a copy from a seconds sale (hey, it was well out of print by then) and then later losing it in storage but I can't remember if she had the chance to lend it to me in between. Anyway, Tansy included a variety of where to buy links on her announcement blog.
I think that the best thing about the ebook revolution is the opportunity to easily make out of print books available again. Especially when the reason they went out of print had nothing to do with their individual sales records.
And finally, it seems that awards season is well and truly upon us and Ditmar nominations are open. Tehani has a summary of the process on her blog. But the short version is you can nominate if you're an attending or supporting member of this year's NatCon (Conflux 9) or if you're active in fandom. Here is the official page.
It turns out that I'm actually eligible for a few Ditmars this year, much to my vague surprise. If you would like to nominate me (for example for the reviews on this blog), I've listed my eligible things below. And if you're looking for inspiration regarding what books to nominate, I've reviewed several eligible novels and collections.
Ditmars I'm eligible for:
Story name links to the page where you can read that story online. "Chosen" and "Red Rover" are only flash fiction (<1000 words) but "Addiction" is a bit more substantial.
"Chosen", The Lorelai Signal, July-Sept 2012 Issue
"Addiction", Comets and Criminals, Issue #3, June 2012
"Red Rover", Infinitas Newsletter, January 2012 edition
Fan Writer
Tsana Dolichva, for body of work including reviews in Tsana's Reads and Reviews (ie all my 2012 reviews)
William Atheling Jr Award for Criticism or Review
Any review from 2012... there are 119 to choose from. You can pick your favourite from my index page where I've marked the more recent 2013 reviews with * to more easily distinguish the eligible 2012 reviews.
Works I've reviewed that are eligible for Ditmars themselves:
And All the Stars by Andrea K Höst
Hal Spacejock: Baker's Dough by Simon Haynes
Beneath a Rising Moon by Keri Arthur
Besieged by Rowena Cory Daniells
Bridge of Swords by Duncan Lay
Coyote by Rhonda Roberts
Exile by Rowena Cory Daniells
The Dark Divide by Jennifer Fallon
Hoodwink by Rhonda Roberts
Sanctuary by Rowena Cory Daniells
Shifting Reality by Patty Jansen
The Corpse Rat King by Lee Battersby
The Interrogation of Ashayla Wolf by Ambelin Kwaymullina
The Traitor Queen by Trudi Canavan
Walking Shadows by Narrelle M Harris
Winter Be My Shield by Jo Spurrier
The Price of Fame by RC Daniells
Novellas/Novelettes (not listing the ones in the collections below separately though):
Salvage by Jason Nahrung
The King's Man by Rowena Cory Daniells
Skipping short stories because they're all contained within the collections below...
Crackescape by Margo Lanagan
Showtime by Narrelle M Harris
Through Splintered Walls by Kaaron Warren
Although I probably skipped some things because at this stage of staring at lists my eyes are starting to glaze over.
I've acquired some new books since my last New Booksies post, ergo, time for another!
From NetGalley I received Gameboard of the Gods by Richelle Meade. I think this is her first foray into space opera (at least it sounds like space opera but I'm unclear as to whether there's any actual space travel involved). It will be interesting to see how it turns out. I've enjoyed her Vampire Academy and Bloodlines books a lot, but I haven't read any of her other adult books. I am interested!
I have purchased The Opposite of Life by Narrelle M Harris because I couldn't not read it immediately after reading Walking Shadows. Review forthcoming shortly.
I also purchased The Sunlit Zone by Lisa Jacobson, a science fictional story written in verse which is on the inaugural Stella Award longlist. I felt I should check it out because how often does science fiction get recognised by literary awards? And also because no one has yet reviewed as part of AWW. But what really got me was the Kobo sample. It was surprisingly engaging from the start.
Yay books!
Labels: new booksies
Walking Shadows by Narrelle M Harris is actually the second novel featuring these characters, something I didn't realise until after I'd bought it. However, I can happily report that reading it without reading the prequel first in no way affected by enjoyment of it.
Lissa is a Melbournian librarian whose best friend, Gary, is a dorky vampire. Shenanigans ensue when the vampires of Melbourne start being killed in dramatically permanent ways. Lissa, concerned for Gary, can't help but stick her nose into matters to protect him.
I really loved this book. I was expecting to enjoy it after having read Harris' Showtime collection, in which the titular story featured Lissa and Gary, and it surpassed my expectations. Walking Shadows was full of amusing narration (in first person) and entertaining exchanges between Lissa and the people in her life. I laughed out loud many times (and silently a few times when I was reading during a bout of insomnia and didn't want to wake up the husband). The fact that it was set in Melbourne didn't hurt, either.
I liked the vampire mythos Harris has used. In this world, vampires don't have to drink blood to survive, but they get a buzz if they do; the human blood moving through their system makes them feel a bit more alive and helps them think. Most of the time, they have difficulty with new concepts (hence living in the past) and can't think creatively. In short, they're less smart than humans and one of the reasons they might keep humans around is to help them with the thinking their less active synapses have trouble with. (Of course, that also means some of them are stuck in a killing for fun rut...)
Taken at face value, the main plot isn't the most surprising aspect of the book. However, Harris includes many layers to Lissa's life, beyond the vampiric associations. Despite the life-threatening situations, she continues to care about her job, sister, friends and pet dog. I liked that she retained a sense of perspective and cared that she was making people worry about her (unlike some main characters I won't mention).
I am definitely going to read the first Lissa and Gary book, The Opposite of Life, some time soon. It has moved dramatically up my "to buy" list. (I hope I can get it off Book.ish — does anyone know if their geo-restrictions care about IP addresses or only about credit cards? Rest assured you'll see me ranting on Twitter if I can't.)
Walking Shadows was an excellent read and I highly recommend it to anyone looking for highly entertaining urban fantasy. I'm tempted to say it's a light read, but that's not really true as it tackles some serious issues albeit without taking itself to seriously. I loved the characters and I particularly recommend it to people looking for somewhat non-standard vampires in an Australian setting.
First published: June 2012, Clan Destine Press
Series: Yes. The second book about Gary and Lissa
Source: Purchased from publisher's store
Labels: 4.5 stars, australian authors, AWW2013, fantasy, narrelle m harris, urban fantasy, vampires
Etiquette and Espionage is the first book in Gail Carriger's newest series, the Finishing School books. As the series and title suggest, it's set mostly at a special kind of finishing school in Victorian era steampunkish Britain. It's the same world as Carriger's Parasol Protectorate books (which start with Souless and end with Timeless) but fifteen to twenty-ish years earlier. In no way do you have to have read any of Carriger's other works to enjoy this one, however. The blurb:
Sophronia Temminnick at 14 is a great trial more interested in dismantling clocks and climbing trees than proper manners -- and the family can only hope that company never sees her atrocious curtsy. Her poor mother, desperate for her daughter to become a proper lady, enrolls the lively tomboy in Mademoiselle Geraldine's Finishing Academy for Young Ladies of Quality.
But young ladies learn to finish...everything. Certainly, they learn the fine arts of dance, dress, and etiquette, but they also learn to deal out death, diversion, and espionage -- in the politest possible ways, of course. Sophronia and her friends are in for a rousing first year's education.
It has intrigue, technology and delightfully humorous lines. Sophronia is clever and resourceful and a wonderful character to read about. I particularly liked the angle Carriger took where she's sent off to finishing school for acting too boyish and unladylike, but in the course of the book, she learns not only that her boyish interests can prove useful, but that there are also many uses for girlish things. Like full skirts to hide knives in or deceiving unsuspecting men with ladylike appearances. It's nice to not have dresses dismissed simply because they are feminine and dresses. (Of course, there's another opinion regarding dresses from a character we've grown to know and love from the Parasol Protectorate books.)
I thought the technological regression was done well. There was technology that hadn't yet reached the levels in the Parasol Protectorate books, but it was clear the direction it was heading. For example the dirigibles are much less advanced and can't yet go very quickly in Finishing School, although we know they're used for long-distance travel in Parasol Protectorate.
Because of Sophronia's age, this series is being classed as YA (whereas Parasol Protectorate involved marriage and children and hence was for adults). However, I see no reason for adult readers not to enjoy it. There is little stylistic difference between the two series, even if the characters are mostly nothing alike (apart from the few that appear in both, of course). Since Sophronia is only fourteen, on the younger side for YA, I suspect it would be a good book to use to hook in younger readers.
Etiquette and Espionage was a quick read, which was a bit disappointing because I didn't want it to end. I can't wait to read the next in the series, which I believe is due out in November. Let's hope the series continues to progress at a book every six months. I think I could live with that. In the mean time, I want a Bumbersnoot — Sophronia's adorable mechanical puppy pet.
New readers to Carriger's world will find Etiquette and Espionage a good place to start. Returning readers will find the world a little different to how they remember, but not too much. I highly recommend Carriger's work to fans of steampunk, Victorian Britain, socially accepted vampires and werewolves and witty lines.
First published: February 2013, Hachette
Series: Finishing School Book the First (of ?)
Format read: ebook on iThings
Source: bought from iBooks
Labels: 5 stars, boarding school, gail carriger, steampunk
The Best of All Possible Worlds by Karen Lord
The Best of All Possible Worlds is Karen Lord's most recent novel, and the first thing of hers I've read. It was a compelling read and quite different to anything else I've read. The blurb:
A proud and reserved alien society finds its homeland destroyed in an unprovoked act of aggression, and the survivors have no choice but to reach out to the indigenous humanoids of their adopted world, to whom they are distantly related. They wish to preserve their cherished way of life but come to discover that in order to preserve their culture, they may have to change it forever.
Now a man and a woman from these two clashing societies must work together to save this vanishing race—and end up uncovering ancient mysteries with far-reaching ramifications. As their mission hangs in the balance, this unlikely team—one cool and cerebral, the other fiery and impulsive—just may find in each other their own destinies . . . and a force that transcends all.
Which makes it sound like there's more action and adventure than there really is. It's a slow burn type of plot. Told mostly from the point of view of Delarua, a civil servant on Cygnus Beta, the planet some of the refugee Sadiri come to settle on. There are occasional third-person interludes told from the point of view of Dllenahkh, one of the Sadiri, but really it is Delarua's story. It's told in a somewhat conversational style, with Delarua speaking to the reader at times.
The Sadiri came to Cygnus Beta to, among other things, repopulate their race, preferably by preserving as much of their genetic make-up as possible. Delarua's tasked with accompanying them as they visit various settlements around Cygnus Beta to collect genetic information and negotiate the possibility of establishing partnerships. If it wasn't for the compelling characters, I would have found it a bit boring since plot-wise there's not much to it. But the characters were very compelling and I found myself laughing out loud at some of their interactions and staying up till three AM to finish reading (mercifully on a Friday night, so it could've been worse).
The Sadiri are very reserved as a people, abhorring outward expressions of emotion, which leads to them referring to things as "appropriate" a lot and often forcing Delarua and others to guess what they really mean. There is a wide variety of Sadiri in the story which allowed us to see a scope of reserved personalities rather than just one character bearing the brunt of stereotyping. A non-Sadiri character that's worth mentioning is Lian, one of the team's security detail and Delarua's friend. Lian has chosen to live without a gender and so is never referred to by a gendered pronoun. The couple of times other characters might have learnt Lian's biological gender, they don't say, respecting Lian's privacy. The way Lord handled one of the characters having a crush on Lian and the latter's complete lack of interest in romance was well done. We never find out Lian's "real" gender because we are not supposed to and it is not part of the story. Bravo.
When exciting and dramatic things did happen to the characters, they were mostly not dwelt upon very much after the fact. The exciting moment passed and they moved on with their mission. This is the aspect that I disliked most. It's not that there weren't any ramifications to various events, but I would have liked to see a bit more made of them, a bit more highlighting of pieces of adventure, I suppose. As is, it read like Delarua was downplaying each bit of excitement, which is entirely in character but made for less exciting (and seemingly slower) reading. A little bit more action would not have hurt.
I liked that the slow pace and grand scope of their travels accurately reflected how big a planet really is. I kept wanting to picture all the towns/settlements they visited as being in one country and then wondering how there was room for so many of them, but I had to keep reminding myself that it was actually an entire planet they were travelling around. I think it's easy to reduce grand scales (planet-wide governments, multi-planet civilisations) to easily digestible chunks of terms we are more familiar with dealing with, and I commend Lord for avoiding this.
The Best of All Possible Worlds explores a lot of interesting issues. The most obvious is how an ethnic group can retain their identity when their homeland is destroyed — along with a larger percentage of their women (because the men were more likely to be off-world when the disaster happened) — and they are forced to live with and interbreed with other people who don't necessarily share key characteristics that define them. It also explores, through the team's visits to various settlements, how time and isolation can lead to the same culture developing along very different paths.
There is also some interesting hard science fictional world-building (as opposed to the social science fictional world-building I've already discussed) which came in glimpses until maybe three-quarters of the way through. I found it fascinating and I liked its understated inclusion. Without spoilers, it was the sort of thing another writer *cough*Stephen Baxter*/cough* might have spent whole chapters dwelling on until all the magic and story leaked out. But Lord says just enough to make us interested and does not belabour the point.
As I said at the start, The Best of All Possible Worlds is quite different to anything else I've read. To Your Scattered Bodies Go by Philip Jose Farmer springs to mind as somewhat similar in style but also very different in story and theme and issues. I'd say if you're interested in a thoughtful exploration of the issues I've mentioned above, definitely give The Best of All Possible Worlds a go. If you're looking for something a bit different from your speculative fiction I also recommend it. If you're craving action and adventure, then probably give it a miss. I'm definitely interested in reading Lord's earlier and future novels.
First published: February 2013, Del Rey (Random House) in the US (and Quercus Pan Macmillan Australia with a different cover)
Series: Don't think so.
Format read: eARC on my iThing
Source: the (US) publisher via NetGalley
Labels: 4 stars, gender, karen lord, science fiction
Pantomime by Laura Lam
Pantomime by début novelist Laura Lam is an enchanting read. The main character is intersex, something I didn't realise until I started reading and initially I blamed my ignorance on not reading the blurb because historically Strange Chemistry blurbs have been terrible. However, as I have now discovered, this blurb wasn't terrible and did not spoil anything. Huzzah! (Well, it's not perfect, but it's a start.) In celebration of the first Strange Chemistry blurb I've read that hasn't given the entire plot away, I reproduce it for you here:
R.H. Ragona's Circus of Magic is the greatest circus of Ellada. Nestled among the glowing blue Penglass – remnants of a mysterious civilisation long gone – are wonders beyond the wildest imagination. It's a place where anything seems possible, where if you close your eyes you can believe that the magic and knowledge of the vanished Chimeras is still there. It's a place where anyone can hide.
Iphigenia Laurus, or Gene, the daughter of a noble family, is uncomfortable in corsets and crinoline, and prefers climbing trees to debutante balls. Micah Grey, a runaway living on the streets, joins the circus as an aerialist's apprentice and soon becomes the circus's rising star. But Gene and Micah have balancing acts of their own to perform, and a secret in their blood that could unlock the mysteries of Ellada.
As I was saying, the main character is intersex, having some female and some male characteristics. She was raised as Gene, a noble woman-in-training, but never felt at home in the role of noble woman. Things come to a head and she runs away, changes her name to Micah Grey and joins the circus as a boy. The bulk of story is told through two time lines: one starting from Micah's first day in the circus and one chronicling Gene's life in the days before she runs away. I liked the way Micah's past was gradually revealed through Gene's story. Some aspects were hinted at in Micah's story before we read about them in Gene's and some we read about in Gene's timeline before seeing some of the ramifications in Micah's. I thought they played off each other well and I was almost disappointed when Gene's timeline ran out (as we always knew it had to).
I have to say, Lam's choice to write in first person was a good one. Micah/Gene refer to themselves in the gender-neutral "I" leaving all the gendered pronouns up to the other characters to utter. A neat solution. Of course, there are times when Micah questions whether he is doing or feeling something as a man or as a woman, and a lot of the story focusses on him finding out who he is as a person, but it works well.
Something Pantomime got me thinking about philosophically was the nature of secrets, especially damaging personal ones. Gene was brought up knowing very well that no one could ever find out "what" she was. Only a few close family members knew and both she and her parents knew there would be dire consequences if the wrong people found out. Micah has to hide the same secret as well as the secret of his origins. Mild spoilers follow in white. Skip to the next paragraph if you wish to avoid them. As Micah grows romantically close with one of his fellow performers, he is faced with the question of how to tell her and when. Of course he puts it off and as a reader it was obvious that there would be consequences to perpetuating the lie. However, as he was angsting about how to tell her and how she would take it, I couldn't help but think that his continuing to keep the secret was not his fault. It was inevitable that the love interest would be upset that he hadn't told her sooner, but how could he have? Experience and common sense strongly suggested that things would not go well for him if he did and I don't think it was wrong of him to keep it from her for as long as possible. End spoilers.
The other notable aspect of Pantomime was the worldbuilding. It was surprisingly extensive and well thought through for a YA book. A lot of it remained in the background, apart from things like the city Micah came from and the social hierarchy. It wasn't until I was further in that I realised that there was much more to the worldbuilding than evident on the surface of the story and I started hoping for a sequel so that it could all be fully explored. I also kind of wanted to see a map of the place, not because I was confused about where places were (there's not that much travelling) but because I was curious. Luckily when I got to the end it strongly suggested that there would in fact be a sequel (and a visit to the author's website confirmed my suspicions). It finished in a fairly self-contained way so that a sequel isn't necessary to enjoy the book, but Micah's story is also definitely not over.
Pantomime was a great read. I recommend it to all fans of non-standard YA books. I think readers of adult fantasy books will also enjoy it. It felt more like a "grown up" fantasy book than a YA book (not that there's anything anti-YA in it and, well, it is a coming-of-age story) and I think it could just as easily have been marketed to the adult fantasy market, despite the protagonist's age. (Of course, YA is probably a better marketing choice.) So if you're not usually into YA but like fantasy books and the idea of running away to join the circus interests you, I strongly urge you to give Pantomime a go. I await the eventual sequel with excitement.
First published: February 2013, Strange Chemistry
Series: book 1 of ?, Micah Grey series
Format read: eARC on the iPad
Source: the publisher via NetGalley
Labels: 4.5 stars, circus, fantasy, gender, laura lam, strange chemistry, YA
This time, I purchased some books and also received some ARCs from publishers. The purchased ones happened first so I'll start there.
I decided to spend an achievement unlocked book on Unearthly by Cynthia Hand because it was on sale as part of a first book in the series is cheaper thing on iTunes. And also because, even though I haven't had much luck with angel books, a couple friends whose opinions I trust have assured me it's really good.
A while ago I pre-ordered Gail Carriger's Etiquette and Espionage and now it's out and I'm looking forward to reading it (just as soon as I catch up on my February ARCs because real life continues to be demanding). You may remember me mentioning it in my books most looked forward to post.
Then from the publishers via NetGalley I received Emilie and the Hollow World by Martha Wells which is a Strange Chemistry book, so it must be good (if past experience is anything to go by). (Strange Chemistry being the YA imprint of Angry Robot.) And if you look carefully, you'll see this isn't quite the finished cover...
And I got The Eternity Cure by Julie Kagawa from Harlequin Teen (AU) which is the sequel to Blood of Eden, which was one of my favourite reads of 2012. Here's hoping it lives up to expectations and continues to put an interesting spin on the vampire mythos. (And I'm not 100% sure if this is the final cover, but it's the only one I could find that wasn't definitely a place-holder.)
From Random House AU, I got The Asylum by John Harwood, a Tasmanian author. The blurb tells me it's gothic suspense so I'm hoping I'll be able to count it towards my horror reading challenge. From what I gathered he usually writes more Literary things, but I'm hoping the gothic suspense parts and the historical Britain aspect will prevent me flashing back to reading Tim Winton in high school.
And finally, I almost forgot, I've received the two most recent issues of Andromeda Spaceways Inflight Magazine (ASIM) for review: issues 56 and 55. Which were published in that order due to a wormhole mix-up. I used to be an ASIM subscriber earlier on, but stopped due to Poor Student Syndrome and never got around to it again mostly because of my alarming TBR. But yay for reading more Aussie and international short fiction!
Yay, books and things!
Dance of Shadows by Yelena Black is a YA novel featuring the (imaginary) New York Ballet Academy and a demon.
Vanessa's sister Margaret, three years older than her, went to aforementioned dance academy and, shortly before she was supposed to play the lead in the school's production of The Firebird, she disappeared. The school told her parents she had run away or that she might be dead. Vanessa doesn't believe Margaret would have run away, though, nor does she believe she's dead. A ballerina like her sister, Vanessa applies to the same school Margaret disappeared from to try to find out what happened to her sister.
I had a few problems with this book. The first was that it moved a little slowly. From the start, it's fairly clear to the reader that something supernatural and probably demonic is going on. And it takes Vanessa ages to see it. I get that it's realistic to try to accept mundane explanations for what's going on, but that doesn't make for more exciting reading. I stress that it wasn't boring, I enjoyed the peek into the world of dance (it reminded me a little bit of the girls in Bunheads crossed with <insert dance school movie here>), but the plot definitely moved slowly. There were some scenes which probably should have been compressed or cut because, even looking back, I can't work out what their purpose was.
A bonus is there was no love triangle. The romantic elements were a bit confusing though. When she arrives, a freshman, Vanessa is immediately enamoured with the attractive senior lead dancer. That's fine, it makes sense for her to crush on him, especially after he sprinkles a bit of attention her way and takes her out on a date (like, the day after he breaks up with his girlfriend). But later, when it's blindingly obvious there's something weird going on with him she STILL doesn't see it and makes poor decisions which put everyone else in danger.
Vanessa isn't a particularly active heroine. She is actively trying to find her sister and at times does take the initiative, but when it came to the crunch, she was a bit too passive for my liking (that and aforesaid poor decisions). Highlight for spoiler: And then she decides to run off with the boy who's not evil but has been weird and stalkery throughout? WHY? It didn't particularly make sense.
(Side note: the magic system/style in this is practised by necrodancers, lol.)
I enjoyed the journey the narrative took us on. I'm not an avid fan of dance or ballet, but I enjoyed reading about that aspect. I suspect fans of performance schools stories would enjoy that aspect, too. The prose was fairly competently written just, as I said earlier, a bit slow. The finally thing that bothered me was that the lead into book two (of a planned trilogy) felt really tacked on. Perhaps it was planned as a trilogy from the beginning, but I think it would have worked better and more powerfully as a standalone. (Also, as a stand alone some of the more baffling elements would have, by necessity, not been present.) Would that the YA spec fic industry didn't suffer from trilogyitis.
I would recommend Dance of Shadows to YA fans interested in a slightly different setting. The speculative elements are most prominent towards the end, but when they come, you can't pretend they're not there. A warning for readers who don't like that sort of thing. (But then, why are you reading this blog?) I enjoyed reading the book, but I'm not sure I'll feel compelled to pick up the next book when it's released. Maybe if it has a really exciting blurb.
First published: February 2012, Bloomsbury UK & ANZ
Series: Dance of Shadows, book 1 of 3
Source: Courtesy of the publisher via NetGalley
Labels: 3.5 stars, dancing, fantasy, urban fantasy, YA, yelena black
Hysteria by Megan Miranda was not the book I expected it to be. From the cover (the UK/Aus cover here as well as the US one which is quite different) and the blurb, I was expecting something more along the lines of a psychological drama, perhaps with horror elements. The UK/Aus blurb:
Mallory's life is falling apart.
Her boyfriend was stabbed. He bled to death in her kitchen. Mallory was the one who stabbed him. But she can't remember what happened that night. She only remembers the fear...
When Mallory's parents send her away to a boarding school, she thinks she can escape the gossip and the threats. But someone, or something, has followed her. There's the hand that touches her shoulder when she's drifting off to sleep. A voice whispering her name. And everyone knows what happened. So when a pupil is found dead, Mallory's name is on their lips.
Her past can be forgotten but it's never gone. Can Mallory live with that?
What Hysteria is really about, is a girl's journey in dealing with a traumatic event and some mild trauma-induced amnesia. There's nothing paranormal and while there were minor violent elements — we see her boyfriend's death through flashbacks — I wouldn't classify this as anything other than straight contemporary YA. (I mean, there's one weird thing, which could have been played up to increase tension and creepiness, but it wasn't. Instead Mallory just ignored it.) If I'd known to expect that up front, I probably would have enjoyed the beginning more. I kept expecting ghosts or demonic forces or something, but they didn't come. The last third or quarter of the book had a decent pay-off, but it wasn't the type of pay-off I'd expected going in. (I assumed from the start that things weren't as they seemed, but, well, they turned out to be more as they seemed than I would have liked.)
I felt the beginning was a bit dull and took a while to get to the point. I was a bit frustrated in the first half or so with Mallory spending so much time thinking about boys. I understand her dwelling on the dead boyfriend, but she also dwelt on his brother, who she'd had a crush on and on the new (ish) boy she meets after she's sent to the boarding school. The only boy she's not interested in, at some point, is the jerky one at school who is interested in her. And she doesn't try very hard to make friends at the new school, which is sort of understandable because of the earlier traumatic events, but did mean that a large chunk of the book had her focussing on the love interest school boy, who is also her only proper friend at the school.
It did redeem itself towards the end, however, when Mallory's best friend from back home shows up again (she featured in the opening also, pre-boarding school, but not as significantly) and we are treated to some nice girl bonding. It was that aspect which saved the book for me. That and the way the plot started moving forward more rapidly once the student died, although that happened sufficiently far into the book that putting it in the blurb feels strange. Then again, that also underscores how not very much happened in the first half of the book.
I wanted there to be more darkness, more ominousness, and more psychological uncertainty. On the other hand, once I realised it was about Mallory processing and coming to terms with her boyfriend's death, the whole thing did fall into place a bit better.
Ultimately, Hysteria had so much potential in premise, but in execution it fell flat in several ways. It didn't go far enough when it should have been pushing the envelope. It wasn't a terrible book overall, but it definitely could have been more interesting. I recommend it to fans of non-speculative YA.
First published: February 2013, Bloomsbury UK/ANZ
Series: nope
Labels: 3.5 stars, bloomsbury, contemporary, megan miranda, YA
The Indigo Spell by Richelle Mead
The Indigo Spell by Richelle Mead is the third instalment in her Bloodlines series. You can read my review of the second book, The Golden Lily, here. This review contains minor spoilers for the earlier books in the series.
Sydney the Alchemist in charge of the small group protecting a teenaged moroi vampire (the living and not evil kind of vampire) who happens to be the moroi queen's half sister. In the course of hiding incognito at a human school, many minor crises have popped up for Sydney to deal with. The Indigo Spell is no different. In fact, it continues to build on the events of the earlier books, adding layers of plot which will probably stick around in future books.
It's not something I noticed when I read The Golden Lily, but from the first book, Bloodlines, Mead has been adding background plot elements which have persisted in the subsequent books with more relevance than the main (fairly self-contained) action. Arguably, the main plot of The Indigo Spell is the plot line that leads to the climax but there is so much else going on — in a good way — that one could argue for another thread being the most important. The world throws a lot of mostly urgent stuff at Sydney and, in true Sydney fashion, she manage to balance all the emergencies at once.
The Indigo Spell focusses heavily on Sydney's issues with the Alchemists, secrets and magic, with some significant contributions from Adrian and Ms T the history teacher witch. But the other characters aren't forgotten about. I liked how Mead had them running up to Sydney with their problems every few chapters and, even though Sydney didn't spend much time fixing them, it let us keep up with what they were doing.
The set-up from the end of the previous book pays off well (ambiguity to avoid spoilers). One of the complaints I had about The Golden Lily (which I apparently forgot to mention in my review) was that Sydney failed to notice/work out a few obvious things until it was more convenient to the plot because she was so busy with everything else. I felt that again in The Indigo Spell, but to a lesser extent. This time it was only one thing she didn't realise until later and there were better plot reasons for it. On the other hand, another thing I was expecting her to make the connection regarding didn't happen at all but I can only assume it will come out in a future book. Or maybe I'm guessing wrong. Ambiguous paragraph is ambiguous. Sorry.
I think The Indigo Spell can be enjoyed by itself, but works better as part of the series read sequentially. I recommend it to fans of YA who have enjoyed Richelle Mead's other books or who are looking for something a little bit different from a book that also involves vampires. I eagerly await the next instalment (especially after the set-up dropped in at the end — plenty of room for new shenanigans!).
First published: February 2013, Penguin Australia
Series: Bloodlines, book 3 of ?
Format read: eARC, on Kobo
Labels: 4.5 stars, fantasy, penguin, Richelle Mead, urban fantasy, vampires, YA
The Mad Scientist's Daughter by Cassandra Rose Clarke
The Mad Scientist's Daughter by Cassandra Rose Clarke was an excellent read. It was very different to the author's début novel, The Assassin's Curse (my review), which I also enjoyed and which caused me to expect more of an adventure novel, possibly with steampunk elements (apparently, steampunk is where mad scientists belong, these days). The Mad Scientist's Daughter is not an adventure novel. It's set in the near future and, as the cover proclaims, it is "A tale of Love, Loss and Robots".
Cat, the titular character, is the daughter of two cyberneticists. When she's quite young, her father acquires Finn, a sophisticated android designed to look and act human. When her parents decide to homeschool her until highschool, they make Finn her tutor. Growing up with a robot, Cat does not hold the same prejudices and fears some elements of society do and isolated in a small town until she goes to college, she does not encounter them very often until she leaves. The Mad Scientist's Daughter is the story of Cat's life from childhood until her late thirties (I think). It is the story of a girl who fell in love with a robot.
The Mad Scientist's Daughter is a beautiful read. It explores the nature of sentience and humanity. Cat's father always treated Finn with respect and more or less like a person even when the law didn't require him to. This is wonderfully contrasted by a boyfriend of Cat's whose life mission seems to be getting around sentience laws by building AIs that are just dumb enough to not be granted any rights.
It was a bit of a depressing read. The tone reminded me most of The Time Traveller's Wife by Audrey Niffenegger (not just because of the title similarity) except where The Time Traveller's Wife made me angry with the extent to which the main character's entire life revolved around her husband, The Mad Scientist's Daughter did not. Cat's life is her own. It's not perfect, but it certainly doesn't completely revolve around Finn; Finn just happens to be the person she loves and is of course important to her. Also Finn is a proper science fictional robot, not just a literary construct to make Cat's life harder/more depressing as the pseudo-scientifically time-travelling husband in The Time Traveller's Wife was.
The Mad Scientist's Daughter is a literary novel. (Recall my definition of "literary" is a story with an internal journey rather than an external (going on an adventure) journey.) Despite that, it paints a bleak but not hopeless image of the future. Cat lives in a time after a series of climate disasters caused much destruction, but society has mostly recovered, even if the weather occasionally still does strange things. When I grow up, I want to write a book like this. This is the first book that has made me want to be able to write something literary.
I highly recommend The Mad Scientist's Daughter to fans of near future science fiction and/or robots. I think non-SF readers will also enjoy it as the science fictional elements are relatively minor (yes, despite the presence of the robot). It was an excellent read and I encourage everyone to give it a try (unless they can't cope with novels not filled with action and adventure).
First published: February 2013, Angry Robot
Series: Nope.
Format read: eARC on iPad
Source: the publisher, via NetGalley
Labels: 5 stars, angry robot, cassandra rose clarke, near future, robots, science fiction
The Griffin's War by KJ Taylor
The Griffin's War by KJ Taylor is the final book in The Fallen Moon trilogy. That said, a sequel series in the process of being released (book two is due out in April). I have previously reviewed book one: The Dark Griffin and book two: The Griffin's Flight. This review contains some spoilers for those earlier books. Blurb from the Australian edition:
A man falls. A monster rises...
The dark griffin Skandar flies in search of his chosen human, while the wild woman Skade goes with him to find her lost love. And a young griffiner believes he can destroy his father's killer for good. But his plans for bloody vengeance may come full circle...
Huddled half-sane in a cell beneath Malvern, Arenadd Taranisäii must submit to the will of the Night God who has his soul, or be returned to the grave forever.
The Griffin's War picks up quite soon after book two left off and quickly resolves the issues left open by its prequel. Then, as expected, The Griffin's War is primarily about the war that's been brewing since book one. The stage has been set with the Southern followers of Gryphus the sun god on one side and the Northern followers of the Night God on the other. Arren, the protagonist of the series, left his mortal self behind completely in book two and is now definitely Arenadd, the Dark Lord, the Shadow That Walks, chosen one of the Night God. Erian, the chosen one of Gryphus still believes he is the one in the right and that he cannot fail to destroy his opponent.
Erian was less of a prat in this book than in the previous one. This time around, I didn't feel like he hogged too much page time but we got enough glimpses into his life and adventures to see how in another story he would be the hero not the somewhat benign antagonist. He's still a bit of an idiot though. Skade also was a more welcome edition in this book than the previous when she was introduced. She not only plays a more pivotal role, but I could see now why Arenadd cares about her, while in the previous volume it was a more a case of there not being any other options for most of the book.
My favourite thing about the series as a whole continues to be the way in which the hero's and villain's roles were swapped. I've mentioned many times that I like moral shades of grey in my stories and on that front Taylor definitely doesn't disappoint. Arenadd is fighting for freedom for his enslaved and oppressed people. Erian is fighting because Arenadd killed his father, because he believes Arenadd must be evil, and because of signs from his god. But the reader, having followed Arenadd all the way from book one, understands his motivations and can watch each driving influence evolve. We know that, despite being called "the Dark Lord" Arenadd is not a power-crazed evil villain. As one of the characters says of him (identity redacted to avoid spoilers):
"He acted as if he cared about me. He wasn't... he didn't act as if he was evil. He seemed... sad and lonely."
Although the Griffin's War concludes the trilogy well, tying up all the important loose ends, I can see which direction the sequel series might take, without reading the blurbs (and having glanced at one of them, I can see I guessed right). I look forward to reading more stories set in this world in the future.
A random aside I don't think I mentioned in my earlier reviews: I like that although the Night God is female, she is still referred to as a god, not a goddess. Never is her gender used to demean her, not even by her opponent's followers. (I mean, they think she's evil and that they will win in their righteousness, but not because she presents as a woman.)
I highly recommend the entire Fallen Moon trilogy to fans of fantasy. In particular, I think readers who usually enjoy dragon books due to the presence of dragons will enjoy this series as the griffins are treated similarly. As I mentioned in reviews of the earlier books, the series also deals with issues of racism, slavery and oppression. And as you probably gathered from this review, it explores the ways in which we define good and evil and how even when things are literally light and dark, there is still plenty of moral middle ground. I don't recommend reading the Griffin's War without having read the earlier two books. It's definitely the kind of series which build crucially on the preceding volumes.
First published: 2010, Harper Voyager Australia
Series: The Fallen Moon, book 3 of 3
Format read: Paperback, Australian edition
Source: Purchased from a real-life Aussie bookshop
Labels: 4.5 stars, australian authors, AWW2013, BFF, epic fantasy, fantasy, harper voyager, KJ Taylor
The Mad Scientist's Daughter by Cassandra Rose Cla...


text:
Q: How to export JavaScript array info to csv (on client side)? I know there are lot of questions of this nature but I need to do this using JavaScript. I am using Dojo 1.8 and have all the attribute info in array, which looks like this:
[["name1", "city_name1", ...]["name2", "city_name2", ...]]

Any idea how I can export this to CSV on the client side?

A: This solution should work with Internet Explorer 10+, Edge, old and new versions of Chrome, FireFox, Safari, ++
The accepted answer won't work with IE and Safari.

// Example data given in question text
var data = [
  ['name1', 'city1', 'some other info'],
  ['name2', 'city2', 'more info']
];

// Building the CSV from the Data two-dimensional array
// Each column is separated by ";" and new line "\n" for next row
var csvContent = '';
data.forEach(function(infoArray, index) {
  dataString = infoArray.join(';');
  csvContent += index < data.length ? dataString + '\n' : dataString;
});

// The download function takes a CSV string, the filename and mimeType as parameters
// Scroll/look down at the bottom of this snippet to see how download is called
var download = function(content, fileName, mimeType) {
  var a = document.createElement('a');
  mimeType = mimeType || 'application/octet-stream';

  if (navigator.msSaveBlob) { // IE10
    navigator.msSaveBlob(new Blob([content], {
      type: mimeType
    }), fileName);
  } else if (URL && 'download' in a) { //html5 A[download]
    a.href = URL.createObjectURL(new Blob([content], {
      type: mimeType
    }));
    a.setAttribute('download', fileName);
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  } else {
    location.href = 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported
  }
}

download(csvContent, 'dowload.csv', 'text/csv;encoding:utf-8');

Running the code snippet will download the mock data as csv
Credits to dandavis https://stackoverflow.com/a/16377813/1350598

A: A minimalistic yet feature-complete solution :)
/** Convert a 2D array into a CSV string
 */
function arrayToCsv(data){
  return data.map(row =>
    row
    .map(String)  // convert every value to String
    .map(v => v.replaceAll('"', '""'))  // escape double colons
    .map(v => `"${v}"`)  // quote it
    .join(',')  // comma-separated
  ).join('\r\n');  // rows starting on new lines
}

Example:
let csv = arrayToCsv([
  [1, '2', '"3"'],
  [true, null, undefined],
]);

Result:
"1","2","""3"""
"true","null","undefined"

Now download it as a file:

/** Download contents as a file
 * Source: https://stackoverflow.com/questions/14964035/how-to-export-javascript-array-info-to-csv-on-client-side
 */
function downloadBlob(content, filename, contentType) {
  // Create a blob
  var blob = new Blob([content], { type: contentType });
  var url = URL.createObjectURL(blob);

  // Create a link to download it
  var pom = document.createElement('a');
  pom.href = url;
  pom.setAttribute('download', filename);
  pom.click();
}

Download it:
downloadBlob(csv, 'export.csv', 'text/csv;charset=utf-8;')

A: //It work in Chrome and IE ... I reviewed and readed a lot of answer. then i used it and tested in both ...

var link = document.createElement("a");

if (link.download !== undefined) { // feature detection
    // Browsers that support HTML5 download attribute
    var blob = new Blob([CSV], { type: 'text/csv;charset=utf-8;' });
    var url = URL.createObjectURL(blob);
    link.setAttribute("href", url);
    link.setAttribute("download", fileName);
    link.style = "visibility:hidden";
}

if (navigator.msSaveBlob) { // IE 10+
   link.addEventListener("click", function (event) {
     var blob = new Blob([CSV], {
       "type": "text/csv;charset=utf-8;"
     });
   navigator.msSaveBlob(blob, fileName);
  }, false);
}

document.body.appendChild(link);
link.click();
document.body.removeChild(link);

//Regards

A: The following is a native js solution.

function export2csv() {
  let data = "";
  const tableData = [];
  const rows = [
    ['111', '222', '333'],
    ['aaa', 'bbb', 'ccc'],
    ['AAA', 'BBB', 'CCC']
  ];
  for (const row of rows) {
    const rowData = [];
    for (const column of row) {
      rowData.push(column);
    }
    tableData.push(rowData.join(","));
  }
  data += tableData.join("\n");
  const a = document.createElement("a");
  a.href = URL.createObjectURL(new Blob([data], { type: "text/csv" }));
  a.setAttribute("download", "data.csv");
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}
<button onclick="export2csv()">Export array to csv file</button>

A: One arrow function with ES6  :
const dataToCsvURI = (data) => encodeURI(
`data:text/csv;charset=utf-8,${data.map((row, index) =>  row.join(',')).join(`\n`)}`
);

Then :
window.open(
  dataToCsvURI(
   [["name1", "city_name1"/*, ...*/], ["name2", "city_name2"/*, ...*/]]
  )
);

In case anyone needs this for reactjs, react-csv is there for that

A: A lot of roll-your-own solutions here for converting data to CSV, but just about all of them will have various caveats in terms of the type of data they will correctly format without tripping up Excel or the likes.
Why not use something proven: Papa Parse
Papa.unparse(data[, config])

Then just combine this with one of the local download solutions here eg. the one by @ArneHB looks good.

A: There are two questions here:

*

*How to convert an array to csv string

*How to save that string to a file

All the answers to the first question (except the one by Milimetric) here seem like an overkill. And the one by Milimetric does not cover altrenative requirements, like surrounding strings with quotes or converting arrays of objects.
Here are my takes on this:
For a simple csv one map() and a join() are enough:
    var test_array = [["name1", 2, 3], ["name2", 4, 5], ["name3", 6, 7], ["name4", 8, 9], ["name5", 10, 11]];
    var csv = test_array.map(function(d){
        return d.join();
    }).join('\n');

    /* Results in
    name1,2,3
    name2,4,5
    name3,6,7
    name4,8,9
    name5,10,11

This method also allows you to specify column separator other than a comma in the inner join. for example a tab: d.join('\t')
On the other hand if you want to do it properly and enclose strings in quotes "", then you can use some JSON magic:
var csv = test_array.map(function(d){
       return JSON.stringify(d);
    })
    .join('\n')
    .replace(/(^\[)|(\]$)/mg, ''); // remove opening [ and closing ]
                                   // brackets from each line

/* would produce
"name1",2,3
"name2",4,5
"name3",6,7
"name4",8,9
"name5",10,11

if you have array of objects like :
var data = [
  {"title": "Book title 1", "author": "Name1 Surname1"},
  {"title": "Book title 2", "author": "Name2 Surname2"},
  {"title": "Book title 3", "author": "Name3 Surname3"},
  {"title": "Book title 4", "author": "Name4 Surname4"}
];

// use
var csv = data.map(function(d){
        return JSON.stringify(Object.values(d));
    })
    .join('\n')
    .replace(/(^\[)|(\]$)/mg, '');

A: Create a blob with the csv data .ie var blob = new Blob([data], type:"text/csv");
If the browser supports saving of blobs i.e if window.navigator.mSaveOrOpenBlob)===true, then save the csv data using:  window.navigator.msSaveBlob(blob, 'filename.csv')
If the browser doesn't support saving and opening of blobs, then save csv data as:
var downloadLink = document.createElement('');
downloadLink.attr('href', window.URL.createObjectURL(blob));
downloadLink.attr('download', filename);
downloadLink.attr('target', '_blank');
document.body.append(downloadLink);

Full Code snippet:
var filename = 'data_'+(new Date()).getTime()+'.csv';
var charset = "utf-8";
var blob = new Blob([data], {
     type: "text/csv;charset="+ charset + ";"
});
if (window.navigator.msSaveOrOpenBlob) {
     window.navigator.msSaveBlob(blob, filename);
} else {
    var downloadLink = document.element('');
    downloadLink.attr('href', window.URL.createObjectURL(blob));
    downloadLink.attr('download', filename);
    downloadLink.attr('target', '_blank');
    document.body.append(downloadLink);
    downloadLink[0].click();
}

A: From react-admin:
function downloadCsv(csv, filename) {
    const fakeLink = document.createElement('a');
    fakeLink.style.display = 'none';
    document.body.appendChild(fakeLink);
    const blob = new Blob([csv], { type: 'text/csv' });
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        // Manage IE11+ & Edge
        window.navigator.msSaveOrOpenBlob(blob, `${filename}.csv`);
    } else {
        fakeLink.setAttribute('href', URL.createObjectURL(blob));
        fakeLink.setAttribute('download', `${filename}.csv`);
        fakeLink.click();
    }
};

downloadCsv('Hello World', 'any-file-name.csv');

A: In Chrome 35 update, download attribute behavior was changed.
https://code.google.com/p/chromium/issues/detail?id=373182
to work this in chrome, use this
var pom = document.createElement('a');
var csvContent=csv; //here we load our csv data
var blob = new Blob([csvContent],{type: 'text/csv;charset=utf-8;'});
var url = URL.createObjectURL(blob);
pom.href = url;
pom.setAttribute('download', 'foo.csv');
pom.click();

A: I came here looking for a bit more RFC 4180 compliance and I failed to find an implementation, so I made a (possibly inefficient) one for my own needs.  I thought I would share it with everyone.
var content = [['1st title', '2nd title', '3rd title', 'another title'], ['a a a', 'bb\nb', 'cc,c', 'dd"d'], ['www', 'xxx', 'yyy', 'zzz']];

var finalVal = '';

for (var i = 0; i < content.length; i++) {
    var value = content[i];

    for (var j = 0; j < value.length; j++) {
        var innerValue =  value[j]===null?'':value[j].toString();
        var result = innerValue.replace(/"/g, '""');
        if (result.search(/("|,|\n)/g) >= 0)
            result = '"' + result + '"';
        if (j > 0)
            finalVal += ',';
        finalVal += result;
    }

    finalVal += '\n';
}

console.log(finalVal);

var download = document.getElementById('download');
download.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(finalVal));
download.setAttribute('download', 'test.csv');

Hopefully this will help someone out in the future.  This combines both the encoding of the CSV along with the ability to download the file.  In my example on jsfiddle. You can download the file (assuming HTML 5 browser) or view the output in the console.
UPDATE:
Chrome now appears to have lost the ability to name the file.  I'm not sure what's happened or how to fix it, but whenever I use this code (including the jsfiddle), the downloaded file is now named download.csv.

A: People are trying to create their own csv string, which fail on edge cases, e.g. special characters, surely this is a solved problem right?
papaparse - use for JSON to CSV encoding. Papa.unparse().
import Papa from "papaparse";

const downloadCSV = (args) => {

  let filename = args.filename || 'export.csv';
  let columns = args.columns || null;

  let csv = Papa.unparse({ data: args.data, fields: columns})
  if (csv == null) return;

  var blob = new Blob([csv]);
  if (window.navigator.msSaveOrOpenBlob)  // IE hack; see http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx
      window.navigator.msSaveBlob(blob, args.filename);
  else
  {
      var a = window.document.createElement("a");
      a.href = window.URL.createObjectURL(blob, {type: "text/plain"});
      a.download = filename;
      document.body.appendChild(a);
      a.click();  // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
      document.body.removeChild(a);
  }

}

Example usage
downloadCSV({
  filename: "filename.csv",
  data: [{"a": "1", "b": "2"}],
  columns: ["a","b"]
});

https://github.com/mholt/PapaParse/issues/175 - See this comment for browser support discussion.

A: The solution from @Default works perfect on Chrome (thanks a lot for that!) but I had a problem with IE.
Here's a solution (works on IE10):
var csvContent=data; //here we load our csv data
var blob = new Blob([csvContent],{
    type: "text/csv;charset=utf-8;"
});

navigator.msSaveBlob(blob, "filename.csv")

A: Based on the answers above I created this function that I have tested on IE 11, Chrome 36 and Firefox 29
function exportToCsv(filename, rows) {
    var processRow = function (row) {
        var finalVal = '';
        for (var j = 0; j < row.length; j++) {
            var innerValue = row[j] === null ? '' : row[j].toString();
            if (row[j] instanceof Date) {
                innerValue = row[j].toLocaleString();
            };
            var result = innerValue.replace(/"/g, '""');
            if (result.search(/("|,|\n)/g) >= 0)
                result = '"' + result + '"';
            if (j > 0)
                finalVal += ',';
            finalVal += result;
        }
        return finalVal + '\n';
    };

    var csvFile = '';
    for (var i = 0; i < rows.length; i++) {
        csvFile += processRow(rows[i]);
    }

    var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, filename);
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", filename);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
}

For example:
https://jsfiddle.net/jossef/m3rrLzk0/

A: Working for all languages
        function convertToCsv(fName, rows) {
        var csv = '';
        for (var i = 0; i < rows.length; i++) {
            var row = rows[i];
            for (var j = 0; j < row.length; j++) {
                var val = row[j] === null ? '' : row[j].toString();
                val = val.replace(/\t/gi, " ");
                if (j > 0)
                    csv += '\t';
                csv += val;
            }
            csv += '\n';
        }

        // for UTF-16
        var cCode, bArr = [];
        bArr.push(255, 254);
        for (var i = 0; i < csv.length; ++i) {
            cCode = csv.charCodeAt(i);
            bArr.push(cCode & 0xff);
            bArr.push(cCode / 256 >>> 0);
        }

        var blob = new Blob([new Uint8Array(bArr)], { type: 'text/csv;charset=UTF-16LE;' });
        if (navigator.msSaveBlob) {
            navigator.msSaveBlob(blob, fName);
        } else {
            var link = document.createElement("a");
            if (link.download !== undefined) {
                var url = window.URL.createObjectURL(blob);
                link.setAttribute("href", url);
                link.setAttribute("download", fName);
                link.style.visibility = 'hidden';
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
                window.URL.revokeObjectURL(url);
            }
        }
    }

    convertToCsv('download.csv', [
        ['Order', 'Language'],
        ['1', 'English'],
        ['2', 'Español'],
        ['3', 'Français'],
        ['4', 'Português'],
        ['5', 'čeština'],
        ['6', 'Slovenščina'],
        ['7', 'Tiếng Việt'],
        ['8', 'Türkçe'],
        ['9', 'Norsk bokmål'],
        ['10', 'Ελληνικά'],
        ['11', 'беларускі'],
        ['12', 'русский'],
        ['13', 'Українська'],
        ['14', 'հայերեն'],
        ['15', 'עִברִית'],
        ['16', 'اردو'],
        ['17', 'नेपाली'],
        ['18', 'हिंदी'],
        ['19', 'ไทย'],
        ['20', 'ქართული'],
        ['21', '中国'],
        ['22', '한국어'],
        ['23', '日本語'],
    ])

A: Here's how I download CSV files on the client side in my Java GWT application. Special thanks to Xavier John for his solution.  It's been verified to work in FF 24.6.0, IE 11.0.20, and Chrome 45.0.2454.99 (64-bit). I hope this saves someone a bit of time:
public class ExportFile
{

    private static final String CRLF = "\r\n";

    public static void exportAsCsv(String filename, List<List<String>> data)
    {
        StringBuilder sb = new StringBuilder();
        for(List<String> row : data)
        {
            for(int i=0; i<row.size(); i++)
            {
                if(i>0) sb.append(",");
                sb.append(row.get(i));
            }
            sb.append(CRLF);
        }

        generateCsv(filename, sb.toString());
    }

    private static native void generateCsv(String filename, String text)
    /*-{
        var blob = new Blob([text], { type: 'text/csv;charset=utf-8;' });

        if (navigator.msSaveBlob) // IE 10+
        {
            navigator.msSaveBlob(blob, filename);
        }
        else
        {
            var link = document.createElement("a");
            if (link.download !== undefined) // feature detection
            {
                // Browsers that support HTML5 download attribute
                var url = URL.createObjectURL(blob);
                link.setAttribute("href", url);
                link.setAttribute("download", filename);
                link.style.visibility = 'hidden';
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            }
        }
    }-*/;
}

A: Simply try this, some of the answers here are not handling unicode data and data that has comma for example date.
function downloadUnicodeCSV(filename, datasource) {
    var content = '', newLine = '\r\n';
    for (var _i = 0, datasource_1 = datasource; _i < datasource_1.length; _i++) {
        var line = datasource_1[_i];
        var i = 0;
        for (var _a = 0, line_1 = line; _a < line_1.length; _a++) {
            var item = line_1[_a];
            var it = item.replace(/"/g, '""');
            if (it.search(/("|,|\n)/g) >= 0) {
                it = '"' + it + '"';
            }
            content += (i > 0 ? ',' : '') + it;
            ++i;
        }
        content += newLine;
    }
    var link = document.createElement('a');
    link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURIComponent(content));
    link.setAttribute('download', filename);
    link.style.visibility = 'hidden';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
};

A: You can use the below piece of code to export array to CSV file using Javascript.
This handles special characters part as well
var arrayContent = [["Séjour 1, é,í,ú,ü,ű"],["Séjour 2, é,í,ú,ü,ű"]];
var csvContent = arrayContent.join("\n");
var link = window.document.createElement("a");
link.setAttribute("href", "data:text/csv;charset=utf-8,%EF%BB%BF" + encodeURI(csvContent));
link.setAttribute("download", "upload_data.csv");
link.click();

Here is the link to working jsfiddle

A: Old question with many good answers, but here is another simple option that relies on two popular libraries to get it done. Some answers mention Papa Parse but roll their own solution for the download part. Combining Papa Parse and FileSaver.js, you can try the following:
const dataString = Papa.unparse(data, config);
const blob = new Blob([dataString], { type: 'text/csv;charset=utf-8' });
FileSaver.saveAs(blob, 'myfile.csv');

The config options for unparse are described here.

A: There you go :
<!doctype html>

Download CSV

A: You can do this in native JavaScript. You'll have to parse your data into correct CSV format as so (assuming you are using an array of arrays for your data as you have described in the question):
const rows = [
    ["name1", "city1", "some other info"],
    ["name2", "city2", "more info"]
];

let csvContent = "data:text/csv;charset=utf-8,";

rows.forEach(function(rowArray) {
    let row = rowArray.join(",");
    csvContent += row + "\r\n";
});

or the shorter way (using arrow functions):
const rows = [
    ["name1", "city1", "some other info"],
    ["name2", "city2", "more info"]
];

let csvContent = "data:text/csv;charset=utf-8,"
    + rows.map(e => e.join(",")).join("\n");

Then you can use JavaScript's window.open and encodeURI functions to download the CSV file like so:
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);

Edit: If you want to give your file a specific name, you have to do things a little differently since this is not supported accessing a data URI using the window.open method. In order to achieve this, you can create a hidden  DOM node and set its download attribute as follows:

var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF

link.click(); // This will download the data file named "my_data.csv".

A: The answers above work, but keep in mind that if you are opening up in the .xls format, columns ~~might~~ be separated by '\t' instead of ',', the answer https://stackoverflow.com/a/14966131/6169225 worked well for me, so long as I used .join('\t') on the arrays instead of .join(',').

A: Here's an Angular friendly version:
  constructor(private location: Location, private renderer: Renderer2) {}

  download(content, fileName, mimeType) {

    const a = this.renderer.createElement('a');

    mimeType = mimeType || 'application/octet-stream';

    if (navigator.msSaveBlob) {

      navigator.msSaveBlob(new Blob([content], {
        type: mimeType
      }), fileName);
    }
    else if (URL && 'download' in a) {

      const id = GetUniqueID();

      this.renderer.setAttribute(a, 'id', id);
      this.renderer.setAttribute(a, 'href', URL.createObjectURL(new Blob([content], {
        type: mimeType
      })));

      this.renderer.setAttribute(a, 'download', fileName);

      this.renderer.appendChild(document.body, a);

      const anchor = this.renderer.selectRootElement(`#${id}`);

      anchor.click();

      this.renderer.removeChild(document.body, a);
    }
    else {
      this.location.go(`data:application/octet-stream,${encodeURIComponent(content)}`);
    }
  };

A:
I use this function to convert an string[][] to a csv file. It quotes a cell, if it contains a ", a , or other whitespace (except blanks):
/**
 * Takes an array of arrays and returns a `,` sparated csv file.
 * @param {string[][]} table
 * @returns {string}
 */
function toCSV(table) {
    return table
        .map(function(row) {
            return row
                .map(function(cell) {
                    // We remove blanks and check if the column contains
                    // other whitespace,`,` or `"`.
                    // In that case, we need to quote the column.
                    if (cell.replace(/ /g, '').match(/[\s,"]/)) {
                        return '"' + cell.replace(/"/g, '""') + '"';
                    }
                    return cell;
                })
                .join(',');
        })
        .join('\n'); // or '\r\n' for windows

}

Note: does not work on Internet Explorer < 11 unless map is polyfilled.
Note: If the cells contain numbers, you can add cell=''+cell before if (cell.replace... to convert numbers to strings.
Or you can write it in one line using ES6:
t.map(r=>r.map(c=>c.replace(/ /g, '').match(/[\s,"]/)?'"'+c.replace(/"/g,'""')+'"':c).join(',')).join('\n')

A: Download CSV File
  let csvContent = "data:text/csv;charset=utf-8,";
  rows.forEach(function (rowArray) {
    for (var i = 0, len = rowArray.length; i < len; i++) {
      if (typeof (rowArray[i]) == 'string')
        rowArray[i] = rowArray[i].replace(/<(?:.|\n)*?>/gm, '');
      rowArray[i] = rowArray[i].replace(/,/g, '');
    }

    let row = rowArray.join(",");
    csvContent += row + "\r\n"; // add carriage return
  });
  var encodedUri = encodeURI(csvContent);
  var link = document.createElement("a");
  link.setAttribute("href", encodedUri);
  link.setAttribute("download", "fileName.csv");
  document.body.appendChild(link);
  link.click();

A: If you are looking for a really quick solution you can also give a chance to this small library which will create and download CSV file for you: https://github.com/mbrn/filefy
Usage is very simple:
import { CsvBuilder } from 'filefy';

var csvBuilder = new CsvBuilder("user_list.csv")
  .setColumns(["name", "surname"])
  .addRow(["Eve", "Holt"])
  .addRows([
    ["Charles", "Morris"],
    ["Tracey", "Ramos"]
  ])
  .exportFile();

A: In case anyone needs this for knockout js, it works ok with basically the proposed solution:
html:
Download

view model:
// for the download link
this.filename = ko.computed(function () {
    return ko.unwrap(this.id) + '.csv';
}, this);
this.csvContent = ko.computed(function () {
    if (!this.csvLink) {
        var data = ko.unwrap(this.data),
            ret = 'data:text/csv;charset=utf-8,';

        ret += data.map(function (row) {
            return row.join(',');
        }).join('\n');

        return encodeURI(ret);
    }
}, this);

A: I added to Xavier Johns function to also include the field headers if needed, uses jQuery though. The $.each bit will need changing for a native javascript loop
function exportToCsv(filename, rows, headers = false) {
    var processRow = function (row) {
        row = $.map(row, function(value, index) {
            return [value];
        });
        var finalVal = '';
        for (var j = 0; j < row.length; j++) {
            if(i == 0 && j == 0 && headers == true){
                var ii = 0;
                $.each(rows[i], function( index, value ) {
                    //console.log(index);
                    var fieldName = index === null ? '' : index.toString();
                    //console.log(fieldName);
                    var fieldResult = fieldName.replace(/"/g, '""');
                    //console.log(fieldResult);
                    if (fieldResult.search(/("|,|\n)/g) >= 0){
                        fieldResult = '"' + fieldResult + '"';
                    }
                    //console.log(fieldResult);
                    if (ii > 0){
                        finalVal += ',';
                        finalVal += fieldResult;
                    }else{
                        finalVal += fieldResult;
                    }
                    ii++;
                    //console.log(finalVal);
                });
                finalVal += '\n';
                //console.log('end: '+finalVal);
            }
            var innerValue = row[j] === null ? '' : row[j].toString();
            if (row[j] instanceof Date) {
                innerValue = row[j].toLocaleString();
            };
            var result = innerValue.replace(/"/g, '""');
            if (result.search(/("|,|\n)/g) >= 0){
                result = '"' + result + '"';
            }
            if (j > 0){
                finalVal += ',';
                finalVal += result;
            }else{
                finalVal += result;
            }
        }
        return finalVal + '\n';
    };
    var csvFile = '';
    for (var i = 0; i < rows.length; i++) {
        csvFile += processRow(rows[i]);
    }
    var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, filename);
    }else{
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", filename);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
}

A: This is a modified answer based on the accepted answer wherein the data would be coming from JSON.
            JSON Data Ouptut:
             0 :{emails: "SAMPLE Co., peter@samplecompany.com"}, 1:{emails: "Another CO. , ronald@another.com"}

            JS:
            $.getJSON('yourlink_goes_here', { if_you_have_parameters}, function(data) {
            var csvContent = "data:text/csv;charset=utf-8,";
            var dataString = '';
             $.each(data, function(k, v) {
                dataString += v.emails + "\n";
             });

            csvContent += dataString;

            var encodedUri = encodeURI(csvContent);
            var link = document.createElement("a");
            link.setAttribute("href", encodedUri);
            link.setAttribute("download", "your_filename.csv");
            document.body.appendChild(link); // Required for FF

            link.click();
        });

A: This library helps a lot: https://www.npmjs.com/package/json-to-csv-in-browser
It automatically convert an array of jsons to an csv file and it even gives you the download functionality in case you want to prompt the web user to download the csv file.
It works like a charm with very little code.
import { JsonArray, download } from 'json-to-csv-in-browser'

const arr = [
    {name : ` vader`, age : 53},
    {name : "what", age : 38},
    {name : "ever", age : 22}
]
const jsonArray = new JsonArray(arr);
const str = jsonArray.convertToCSVstring();
download("my.csv", str);

Cheers!
EDIT: testing it a little bit more, it doesn't work that well if your values have comma on them

redpajama_set_name: RedPajamaStackExchange


text:
Heterotextus peziziformis är en svampart som först beskrevs av Miles Joseph Berkeley, och fick sitt nu gällande namn av Lloyd 1922. Heterotextus peziziformis ingår i släktet Heterotextus och familjen Dacrymycetaceae.   Inga underarter finns listade i Catalogue of Life.

Källor

Basidiesvampar
peziziformis

redpajama_set_name: RedPajamaWikipedia


The process of forgiveness varies from person to person. However, many go through the steps that follow. It can be helpful to see each one, let us know we aren't alone with how we feel; that others have and do feel similiar things and that there is light at the end of the tunnel. There is hope.
Steps to opening your heart to forgiveness, How do we begin to forgive?
First step is to recognize that forgiveness is a choice, remember that the pain of the past is inescapable, but continuing to suffer is optional.
The essence of forgiveness is the ability to be resilient when things don't go the way we want and wisdom arrives when we can have a memory without the emotional charge.
Forgiveness is a process, a verb. It is not a one time event. It takes time and work and practice.
We must believe that we have been forgiven if its ourselves. All major faith traditions include forgiveness as a central value.
Waking up: We have an awakening of sorts, we recognize that something is blocking us and we start to feel more (or again). We begin to change the story we tell as a (helpless) victim. That story is really the worst thing we can do, a story of a helpless victim creates a helpless immune system. Our body becomes trained to this, but the good news is, once we change this, we begin to give our body new pathways to take.
Anger and resentment: Emotions are very high during this stage. Anger and resentment are real and raw. They seem to infiltrate all parts of your mind.
Sadness and hurt: You may feel sad and hurt now. If you can, tell the offender how you feel. What this offense has done to you. How it has impacted your life. Otherwise tell a trusted friend, your dog or a stuffed animal. Just say what you feel. In some studies, venting in a journal has shown to have the same effects as venting to a therapist. Shout your emotions. Throw eggs at a tree. Let it out!
Integration: You get it. You are working your way thru the process and you begin to feel less and less preoccupied and resentful and start to feel that freed up energy. What happened happened, wanting reality to be different is hopeless. Thinking is should have been different is useless. It is what it is. When you stop fighting what is, acceptance begins to arrive. This doesn't mean you agree with, condone, or like what happened. It just means you are no longer fighting with the fact that it did. This is the time to look at the value of forgiveness. Ask when I loose the resentment and anger, what will I gain? Every situation in life, especially the painful, negative ones, can teach us something. Especially in the case of not being able to forgive easily…ask when you are ready, when you have went through the emotions, through the anger, through the hurt and normal range of emotions, ask "What is it I'm being taught?", "What is the lesson?" Start practicing serious gratitude. Say thank you. Often. The world has given you enough. When you say I am ok, this is ok, you create a mind body experience that is healthy and positive and feels good. It suddenly matters very little what happened when you were 22 years old, or 5 years ago, or yesterday.
Reinvestment: We take our new found energy and apply it to something else, better, more empowering and positive. You are finally valuing your own peace of mind, more than a grudge. The decision is that you have decided to love yourself more than anything else. Forgiveness is peace in the present. No matter what has happened, I am at peace now. Forgiveness is no longer allowing someone to walk through your mind with their filthy boots. It is truly comprehending the fact that pain is inevitable, but suffering is optional. You have let go and now you are going to reinvest in you!


text:
Please leave me alone.... is a durational performance inspired byぐでたま, a 'lazy egg' character by Sanrio created in 2013. The performer dressed in yellow/orange Zentai suit will hold raw egg white on his palm in a secluded corner. Idling and almost doing nothing, the work aims to portray human's expectation in growing up. Taking inspiration from kawaii character, the artist aims to play the character of a child-like figure and the egg as a symbol of life. The Zentai suit will strip all identity of the artist, turning his body into the egg yolk as the performance will invite audience to think about life like either a broken or hatched egg as a representation of nature.
The egg is also a fetus stage of mammal life, this performance comes from the inner exploration of the artist, about his own gender; he is dressed as an egg to symbolise the pre-birth stage of life. There will be no nudity or sexual content.
Kelvin Atmadibrata (b.1988, Jakarta, Indonesia) recruits superpowers awakened by puberty and adolescent fantasy to assemble formidable armies of outlaws. Equipped by shōnen characters and macho ero-kawaii, his antiheroes contest the masculine and erotica in Southeast Asia. He works primarily with performances, often accompanied by and translated into drawings, mixed media collages and objects compiled as installations.
Kelvin Atmadibrata graduated with Bachelor of Fine Art (Honours) majoring in Interactive Media from School of Art, Design and Media in Singapore's Nanyang Technological University. Previously based in Singapore for a decade, he now lives and works in Jakarta, Indonesia and runs PADJAK (Performance Art di Jakarta), a bi-monthly performance art gathering in the city.
www.kelvinatmadibrata.com

redpajama_set_name: RedPajamaCommonCrawl


text:
Fantastic Worlds for you to explore!
Bone Sliver
by Debra Chandler
The World is Changing.... Maxwell Edison, agent of The Office of Human Protection is given an assignment. Sent to Tulsa, Oklahoma, he's staking out a spreading rash of anomalous activity unprecedented in the world so far. With agents and civilians dying all around him, it's up to him to find a way to stop the oncoming paranormal cataclysm that has been engineered by a mysterious shadow organization. In the face of unstoppable magic, can he hold on to his humanity?
Nova Wave
The Office of Human Protection has come to small-town Oklahoma, but the situation is anything but stable.When agents go missing, Maxwell Edison must investigate. When Max goes missing and a coup is staged from within, everything depends on a woman waking up in a changed world. A woman who has suffered a grievous injury, A woman with no training. Can she possibly save him?
Rogue Pawn
by Wendy Blanton AKA Elizabeth Joy
Forced from her home, Sieger faced a long road paved with lies and manipulation. Desperate, she did the only thing she could: She turned the tables on her enemies and forged her own fate.
Sword & Scabbard
When Nyakas killed his father to protect his wife and son, he wasn't thinking about the consequences. Because Malitor was a Divine Steward, Nyakas had two choices: take Malitor's seat, or defend himself against those who wanted it. Reluctantly, he and Robyn have moved to Mhovan Rosk. He knows that the other Divine Stewards have their own agendas, but it is not until he arrives that he realizes how corrupt the council is. When his advisors discover a hidden prophecy, the solution to the corruption becomes clear, but it may come at a price none of them are able to pay.
The Dragon's Lady
A young army officer, heading a team in search of missing CIA agents, is captured by intergalactic slave traders. Her team is sold to a man who is much more than he seems.


We love GoGuardian for our Chromebooks. We would love a client that we can install or add to our Windows and Mac devices. Another idea would be for iPads and Androids.
Windows/Domain level filtering would be great. I know other filters have done this via security certificates and DNS addresses that get put on DC's.
I would like to filter other devices too, windows/mac/phones. Instead of having a separate internet filter for other devices, it would be awesome if we have one format that filters everything.
For our Macs, I created a script that will not allow students onto the internet until they log into Chrome. This, then, forces GoGuardian filtering.


text:
The 10,000th Syrian Refugee Is Set To Arrive In The U.S. This Week
Raad Adayleh
Five members of the Jouriyeh family, who are Syrian refugees headed to the U.S. from Jordan this week as part of a resettlement program.
The 10,000 th Syrian refugee is set to arrive in the U.S. on Monday, fulfilling a goal set by the Obama administration one year ago.
The U.S. Ambassador to Jordan, Alice Wells, made the announcement after she met with families bound for California and Virginia. The group of several hundred fleeing violence in Syria will depart from Jordan in the next day, she said, according to The Associated Press.
"Soon they will land in the United States to start their new lives," she said, as the AP reported. "And we wish them the best of luck as they settle in their new homes."
Wells emphasized the exhaustive screening process refugees go through ahead of departure. "The immediate goal of resettling 10,000 Syrian refugees did not come at the cost of our comprehensive, robust security measures. Refugees are the most thoroughly screened category of traveler to the United States," she said, as the wire service reported.
Raad Adayleh / AP
The U.S. ambassador to Jordan, Alice Wells, shakes hands with Syrian refugees Sunday ahead of their departure to the United States.
Former construction worker Nadim Fawzi Jouriyeh is part of the group bound for California with his wife and four children. He told the wire service that he feels "fear and joy, fear of the unknown and our new lives, but great joy for our children's live and future."
As NPR's Deborah Amos reported, the resettlement program had a "slow start" this year, but "accelerated to 8,000 by early August." She added that "more than half of the arrivals are under 18."
The administration has "been under intense pressure from aid agencies and advocacy groups that raised doubts the resettlement goals would be met," as Deborah reported.
On the other hand, Republican lawmakers have pushed back against refugee resettlement, Deborah said. She explained:
"The Republican nominee for president, Donald Trump, wants to ban anyone coming from an area with terrorism ties and a majority of governors, all but one a Republican, insist Syrian refugees are not welcome because some could pose a security threat. The opposition has grown after last year's terrorist attacks in Paris. State legislatures have proposed laws to bar refugees, but state governors have no legal authority to halt federal immigration programs."
Opponents to the resettlement program argue that it opens the door for militants to enter the country, while supporters emphasize the thoroughness of the security screening process.
As Deborah reported, "Leon Rodriguez, director of U.S. Citizenship and Immigration Services, said that 'hundreds' of Syrians have been denied entry based on rigorous security checks." Rodriguez told reporters at a recent briefing that "our approval rates are 80 percent, our denial rates are 7 percent, with the remainder on hold."
According to government figures, the number of Syria refugees resettled in fiscal year 2016 stood at 9,902 as of Sunday. That's in comparison to 389 in fiscal year 2015.
It's important to note that the number of Syrians resettled in the U.S. is a minuscule percentage of the total number of Syrian refugees who have fled from the ongoing war.
There are currently more than 4,800,000 Syrian refugees registered with the U.N. refugee agency. The vast majority of them live in Turkey, Lebanon and Jordan. In Lebanon, one in five people in the country is a Syrian refugee, according to Amnesty International.


cocktail-christmas-party-dresses- Uploaded by Dresscab on Sunday, June 12th, 2016 in category Party.
See also Crystals-Sheer-Red-Christmas-Party-Dresses- from Party Topic.
Here we have another image christmas-party-dress-for-women- featured under cocktail-christmas-party-dresses-. We hope you enjoyed it and if you want to download the pictures in high quality, simply right click the image and choose "Save As". Thanks for reading cocktail-christmas-party-dresses-.


text:
Letilene tetrafluoroetilene (acronimo ETFE) è un polimero parzialmente florurato.
Si tratta di un materiale plastico progettato per avere un'alta resistenza alla corrosione in un ampio spettro di temperature.
Si caratterizza per essere trasparente; è più leggero e più resistente del vetro e di altri materiali plastici trasparenti.
Rispetto al vetro è più isolante e più semplice ed economico da installare.

ETFE è anche noto con i marchi commerciali Tefzel di DuPont, Fluon di Asahi Glass Company e Texlon di Vector Foiltec.

Struttura molecolare

L'ETFE è un copolimero alternato 1-1 derivato dalla polimerizzazione radicalica di etilene e tetrafluoroetene.

CF2=CF2 + R° --> R-CF2-CF2-CF2°

R-CF2-CF2-CF2° + CH2=CH2 --> R-CF2-CF2-CF2-CH2-CH2°

Se la reazione chimica di polimerizzazione procede in modo poco controllato si possono avere delle anomalie.

R-CF2-CH2-CH2-CH2-CH2-CF2-R

Queste anomalie contribuiscono in maniera significante a ridurre la resistenza agli agenti chimici, nella fattispecie agli ossidanti.

Applicazioni
L'etilene tetrafluoroetilene è utilizzato frequentemente per la produzione di coperture antipioggia di impianti sportivi anche di grandi dimensioni: tra le strutture che adottano tetti chiusi in ETFE figurano il Centro acquatico nazionale di Pechino in Cina e il Forsyth Barr Stadium di Dunedin in Nuova Zelanda.
Tetti mobili prodotti in tale materiale (cuscini di ETFE gonfi d'aria) sono installati, ad esempio, alla sommità del Mercedes-Benz Stadium di Atlanta, negli Stati Uniti.
Fuori dall'ambito sportivo, le biosfere del complesso turistico Eden Project in Cornovaglia sono rivestite di cuscini di ETFE.

Voci correlate
 Politetrafluoroetilene

Altri progetti

Collegamenti esterni

Materie plastiche


Employment Rate in Malta increased to 72.80 percent in the third quarter of 2018 from 70.60 percent in the second quarter of 2018. Employment Rate in Malta averaged 58.26 percent from 2000 until 2018, reaching an all time high of 72.80 percent in the third quarter of 2018 and a record low of 53 percent in the first quarter of 2002.
In Malta, the employment rate measures the number of people who have a job as a percentage of the working age population. This page provides - Malta Employment Rate- actual values, historical data, forecast, chart, statistics, economic calendar and news. Malta Employment Rate - actual data, historical chart and calendar of releases - was last updated on April of 2019.


If you're at a local event this summer, you may see a few dogs and cats waiting for their forever homes.
The Pensacola Humane Society is taking its show on the road with a van that allows the community to meet and play with adoptable animals.
The van made its debut at a VIP unveiling event Wednesday afternoon, but will be full of pups waiting to find their forever home at its first stop Saturday at Paws on Palafox.
The van, which cost about $140,000 and was funded in large part by an Pensacola Bay Area Impact 100 grant, has room for 25 to 30 animals depending on size and if the staff need to use partitions to separate them.
It will allow the Humane Society to use fewer volunteers at adoption events, which would free them up to help in other areas like doing yard work at the shelter, cleaning or walking and socializing the dogs.
"Typically at an event we have 21 kennels, so then we'd need about 21 volunteers to transport them all, but with this van we could potentially go with one or two volunteers," said PHS volunteer coordinator Emily Shelton.
Shelton said the plan is to bring the big orange and white van to every public event possible, to bring adoptable pets to the community in addition to having the community come to the pets at PHS.
At Wednesday's debut, terrier mix Prisca was the only adoptable pet on site, but that's because a litter of puppies was getting spayed and neutered before Saturday's event, according to PHS executive director Jennifer Bitner.
Judging by Prisca's popularity at the event, Bitner believes the van will draw attention and hopefully increase adoption rates. She said at any one time there are up to 75 animals waiting for adoption through PHS.
"It's amazing to see it come to life, it's something we've been working on since the grant process started about this time last year," she said.
PHS board chair Joshua Carter said the van makes the second Impact 100 grant awarded to the organization, following the low-cost spay and neuter program that in two years has seen 15,000 surgeries performed on local animals.
Shelton said the next project on the list is a thrift store that could help generate revenue for the shelter, but that's in its early stages.
PHS began running its monthly bathe-ins this month, which offers baths as well as a flea dip during the warm summer months.
The events will be the third Saturday of each month through October, and are an important fundraiser for PHS, Shelton said.
Baths, flea dips and groomings are on a first-come, first-served basis and vary in price by the weight of the dog.
Paws on Palafox will begin at 10 a.m. Saturday at Plaza de Luna.


text:
December 6 2021 EC Adopted Resolutions
Resolution Honoring Richard Franklin Dillon, Jr. WHEREAS, Richard Franklin Dillon, Jr., was born in Indianapolis, Indiana, on August 16, 1954 to parents Richard Sr. and Blanche and was a devoted son who cared for his parents' well-being; and WHEREAS, Richard became a naturalized Texan and married Genoveva on December 21, 1979, and with her shared
Keep up with Harris County GOP
Our Latest Activity on Facebook and Twitter.


text:
Q: How to load javascript not present in localhost domain in chrome? I am running a tomcat server and my localhost base domain is :
C:/apache/webapps/ROOT/

My webpage is also present here.
However the javascripts are present in an external location.
D:/something/something

And i am importing them the following way
<script src="D:/something/something/js1.js"></script>

In IE the page loads fine and able to locate the scripts, however with chrome it fails.
On debugging I see that chrome tries to append the following:
http://localhost:8080/D:/something/something

How do i get it to work on chrome without copying the scripts to base location?

A: For doing anything useful from within the JS code, you'll most likely have to obey the same origin policy. This means you'll have to configure your Tomcat so that it serves the scripts, too.
If you really insist on reading the scripts from local files, that's what file:// URLs do.

A: You can't do this because you will search for D:/something/something/js1.js in the user/client computer.
You can do it calling (read and print) the file via PHP (D:/something/something/js1.js.php) or any other server side programming language or installing a webserver in your external location to call the file via URL like myCDN.mydomain.com.
EDIT: If you will only work in localhost, use @Pointy and @Konstantin K solutions :)