ADMIN

I have a number of JavaScript projects that require an API key or other secret information that I don't wish to share with the outside world. This is a problem if I share the rest of the source code in a public GitHub repository.

Here is how I handle it.

Create a getkey.js file with a single getKey function.

Include getkey.js in my HTML document(s).

Call getKey() from another JavaScript file, but wrap the call in a try/catch block. If an error occurs, warn the user that they must add this file / function.

Add a .gitignore file to my project to exclude getkey.js

Check the rest of the project into GitHub.

Create a getkey.js file

Here are the contents of my getkey.js file:

var getKey =function(){
return"3899084ab2353243735944a95b0eba51";
}

Of course, the return value will be your appropriate key.

Include getkey.js in my HTML document(s)

JavaScript is called from script files referenced in my HTML documents. I typically have a file named "script.js", which contains the main functions for my page. So I include both that file and getkey.js within the <head> tag as shown below.

Call getKey() from another JavaScript file

From script.js, I add code to call the getKey() function within a try/catch block. This will throw an exception if the script cannot find the getKey function (usually because it cannot find the getkey.js file). In this example, I output a useful error message in a DIV with an ID of "OutputDiv".

Add a .gitignore file to my project to exclude getkey.js

I want to keep the getkey.js file locally, but I don't want to check it into GitHub. Adding a file named ".gitignore" in the root of my project allows me to list any files or folders that I don't want to include in my GitHub repository.

Add the following line to the .gitignore file

getkey.js

Check the rest of the project into GitHub.

Once the above steps are completed, it is safe to check it into GitHub. The getkey.js file will not be checked in. When another user checks it out, they will need to create this file. I recommend creating a read.me file and pointing this out.

Even if they forget, the error message should give them an idea why their code is not working.

There are other ways to address this issue, but this way works for me.

I remember reading Watchmen by Alan Moore and Dave Gibbons 30 years ago, when it was originally released as a 12-issue series. I waited for each issue and it took me a year to get through the entire story. But this week, I read the complete saga as a single volume and I think this is how Moore and Gibbons intended it. The story is complex enough that mysteries are introduced in one chapter and resolved several chapters later.

Although published by DC Comics, the story takes place outside the DC superhero continuity.

The main difference from the DC universe is the impact that superheroes had on their world, since first appearing on the scene in the 1930s. Originally, they were a group of costumed people with excellent athletic abilities and desire to fight crime. But things changed when Dr. Manhattan appeared on the scene. Dr. Manhattan was a physicist caught in an atomic experiment that gave him nearly godlike powers of strength, invulnerability, the ability to transport himself and other people and objects; and the ability to see forward and backward in time.

Dr. Manhattan working for the U.S. government greatly shifted the balance of power during the Cold War. In this world, the U.S. won the Vietnam War and Richard Nixon remained president for decades (Woodward and Bernstein's bodies were found in a parking garage and the Watergate scandal never came to light).

Costumed heroes eventually lose favor among the general public, which distrusts their great power; and by the police, who are frustrated by them operating outside the law as vigilantes.

The story follows a number of costumed heroes and former heroes:

The aforementioned Dr. Manhattan

The cynical and amoral Comedian, who works for the government or whoever will pay him the most

Retired hero Nite Owl - the second of that name

Ozymandias, who hung up his costume to start a business and become a billionaire

Rorschach, a psychopath with a strong moral compass that justifies him murdering criminals.

The Silk Spectre, who inherited that name from her mother, who pressured her into the superhero business.

It's a fascinating story, made better by all the little details - the graffiti on the wall in the background; the minor subplots (Rorschach’s psychiatrist is so troubled by his interactions with the hero that his marriage begins to crumble); the easter eggs (The pages of Chapter 5 are symmetrical, such that the last page mirrors the first, page 2 mirrors the second last, and so on); and stories within stories (a minor character reads a pirate comic throughout the series, which tells a morality play, not dissimilar to the one acted out by the major characters). One gets the feeling that multiple readings would reveal even more layers to the story.

But the strength of Watchmen is in the conflicting morals of each of the characters and the conflict this causes among the group. Some, like Ozymandias and Rorschach are absolutely convinced of their moral high ground; Dr. Manhattan loses his connection with the human race as he loses his humanity, and this affects his morality; The Comedian and the first Silk Spectre are in the superhero business for the fun of it; while others, such as Nite Owl and the second Silk Spectre, wrestle with questions of right and wrong and how to respond to evil.

The reader is confronted with moral questions, most of which go unanswered:

Watchmen changed the perceptions many had about comic books and graphic novels in the 1980s. Its dark themes and complex plots and characters were more than other titles at the time. As a result, the entire industry was challenged to produce at least some more titles that were heavier and higher quality than their normal super hero fare.

3 decades later Watchmen still stands up - not just as a graphic novel, but as a novel.

Henry DeTamble has a genetic disorder that causes him to spontaneously be thrust backwards or forwards in time. This causes many problems. Henry often finds himself naked in unfamiliar surroundings where he must steal clothes, money and food to survive. He often returns to the same places - sometimes at a particular date and time; sometimes at varying points in time. For example, he has witnessed the death of his mother in a car crash dozens of times.

Henry is drawn repeatedly to a home near Grand Haven, MI, where he meets a little girl named Clare. Henry and Clare develop a friendship over the years as Henry appears in her life at random times and at random ages of Clare's childhood. Eventually, the two meet in real time, where they fall in love and marry.

When Henry and Clare meet in real time, it is Henry's first encounter with her; yet Clare has memories of a relationship with an older Henry that spans to her early childhood.

The novel is written entirely in the first person, alternating between Henry and Clare's perspective - sometimes describing the same scene from each point of view. This gives us a good look at how Henry's disorder affects each of them differently and how they choose to deal with it.

The book is also written entirely in the present tense, as if they are narrating the events that are happening in their own timeline - wherever that happens to take them. This gives the story an immediacy and removes the certainty that either character will survive into old age.

Each chapter begins with the age of the characters who appear. Although Henry is 8 years older than Clare in real time, he is decades older in many of their encounters. Sometimes, Henry encounters a version of himself at different ages. The storytelling is necessarily far from linear. Often one character has memories of prior encounters that the other does not possess, which makes for an interesting dynamic.

The Time Traveler's Wife is one of the most imaginative novels I've read. In her first novel, Audrey Niffenegger has created both a science fiction story and a love story. As a time travel story, it covers the obligatory questions of free will, predestination, cause and effect, and the consequences of interacting with your own past. But those are secondary themes to the relationships of the people affected by Henry's sudden disappearances and appearances and the disruptions in their lives.

Much of the story covers how people deal with loss. Henry's father never recovers from the death of his wife; Henry deals with his disability by drowning in drugs, alcohol, and wanton sex - until he meets Clare, who inspires him to straighten himself out and live as normal a life as possible. Clare spends her life dedicated to and supporting Henry, even though he repeatedly disappears and she never knows if and when he will return.

I grew to care about this couple, who were blessed to be thrust together by destiny, but cursed by a unique affliction. Henry and Clare suffer through a relationship hampered by Henry's affliction and Clare's uncertainty; but they are held together by an honesty I found refreshing.

This was my second reading of The Time Traveler's Wife and it may not be my last.

The narrator of The Ocean at the End of the Lane returns to his childhood home and is surprised by the return of repressed memories. He was a sad and lonely child; He preferred books over sports and no one came to his seventh birthday party and his parents mostly ignored him; He did manage to befriend his neighbor Lettie Hempstock and her mysterious family.

The story quickly turns much darker.

A family boarder steals the family car and commits suicide in it; then a monster uses the boy's body as a means to enter this universe and terrorize the local people. The monster takes on a human form, calling herself Ursula Monkton and injects herself into the boy's family, moving into the home and seducing the father.

Lettie's family proves to be more than they seem as they battle Ursula and protect the boy from her/its threats.

I really enjoyed this novella, which began as a childhood memory and turned into a horror / monster story. The characters could have come from the dark fairy tales of Roald Dahl and the creatures and magic could have been found in the fantasy animated films of Hayao Miyazaki

I liked the moral ambiguity Gaiman presented. Ursula arrives with good intentions. She wants to give people what they want; but when she discovers that people want money, she hurls coins at them and makes money appear in their throat. Lettie summons creatures to defeat Ursula, but they are all then threatened by these powerful creatures.

The Ocean at the End of the Lane is one of NeillGaiman's shortest novels, but he packs a lot into the story.

Hundreds of people packed the ballroom at the Four Seasons ballroom in downtown Seattle for the World Finals of the 2018 Imagine Cup competition.

Hosts Kate Yeager and Corey Sanders paused.

"And the winner is…"

The crowd leaned forward in anticipation.

They stomped their feet in a simulated drumroll.

They had met the judges; they had heard from Microsoft CEO Satya Nadella and Olympic Gold Medalist Chloe Kim; and they had seen presentations from the three finalists.

Over 40,000 students from almost 200 countries around the world had signed up for this competition, but only the top 40 teams were invited to the Seattle area for the finals. These teams represented 33 different countries, and each pitched their projects - a combination of hardware, software, and business ideas - to a panel of judges. The judges culled the field to 18 semi-finalists; then to 3 finalists and these 3 delivered their final pitches on Day 3.

The 3 finalists were

iCry2Talk, a team from Greece that developed a system to analyze the crying of babies, determine what triggered the crying, and communicate that to parents via text, image, and voice messages.

Mediated Ear, a team from Japan that developed software to help hearing-impaired people listen to a single voice in a room full of other voices and noises.

SmartARM, a team from Canada that built a prosthetic arm with a camera in the palm, capable of recognizing images and positioning the fingers to pick up the item correctly on a muscle flex.

And now it was time to learn the winner.

And the winner was…

"SmartArm!"

A cheer erupted. Confetti flew from the ceiling. Music played.

SmartArm consisted of Hamayal Choudhry and Samin Khan, students at the University of Ontario Institute of Technology and the University of Toronto respectively.

I was especially pleased to see them take home the world championship. Months ago, I helped mentor them at a hackathon at the University of Toronto, where they won a prize for best use of Microsoft technology; and I've followed them as they put in countless hours of work and great ideas to advance their project to where it is today.

SmartArm took home the top prize - $85,000 cash, $50,000 Azure credits, and a mentoring session with Satya Nadella; but there were many winners beyond them and the other 2 Finalist teams. Many of the teams will return home to turn their projects into business. And many will inspire their classmates to compete next year.

The Last Enchantment by Mary Stewart's concludes the Merlin Trilogy begun with The Crystal Cave and The Hollow Hills.

The story begins just after young Arthur's ascension to the throne of Britain. It covers Arthur's first decade as high king as he battles the Saxons and unites Britain.

But Arthur is a minor character in this novel, as Stewart focuses on Merlin, the king's cousin, mentor, advisor, prophet, and friend.

Arthur is betrayed by both his half-sisters; but we hear much more about Morgause, because she tries to poison Merlin than about Morgan, who steals the king's legendary sword.

In The Last Enchantment, as in the previous novels, Merlin's mystical abilities are never as powerful as in the familiar legend; his abilities limited to his education, his wisdom, and the ability to occasionally see visions of the present and future. In this novel, he loses his clairvoyant power, yet retains his value to Arthur as a trusted advisor and mentor.

Despite Merlin's power and stature within the new kingdom, he shows considerable humanity. He confronts the loss of his mystical powers; He confronts his own mortality and how the kingdom will fare when he eventually passes; and he falls in love for the first time in his life. He even deals with his accidental entombment after an Morgause's assassination attempt leaves him in a deathlike state.

I loved this whole series.

I loved Stewart's ability to take a story as familiar as the Arthurian legend and make it fresh and make it her own.

I loved the way she combined the different versions of the Arthurian legend into a coherent tale.

I loved the humanity with which she injects all her characters - even those with special abilities.

I loved the action and the politics and the romance.

I loved the relationship and loyalty between Arthur and Merlin.

I was fortunate to have discovered this series and I'm happy to have seen the trilogy through to its conclusion.