<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Daniel Nordstrom, Web &amp; iOS Creator</title>
 
 <updated>2013-04-11T07:09:55+02:00</updated>
 <id>http://mrnordstrom.com</id>
 <author>
   <name>Daniel Nordstrom</name>
   <email>d@madebydrop.com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/mrnordstromcom" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="mrnordstromcom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Siri on iPod, Yes You Can</title>
   <link href="http://mrnordstrom.com/2013/04/11/siri-on-ipod/" />
   <updated>2013-04-11T00:00:00+02:00</updated>
   <id>http://mrnordstrom.com/2013/04/11/siri-on-ipod</id>
   <content type="html">&lt;p&gt;About three years ago, an application called Siri went into the final stages of testing at a company with the same name: Siri, Inc. It was a seemingly simple personal assistant created for the iPhone and planned for other smartphones. As they submitted Siri to the App Store, little did its inventors know about the impact it would eventually have on smartphone technology.&lt;/p&gt;

&lt;p&gt;Back then, voice recognition was dominated by applications such as today&amp;#8217;s Dragon Dictate. These were large, complex applications for voice commands. They weren&amp;#8217;t particularly smart, and they definitely weren&amp;#8217;t anything you would slap on a smartphone just for the fun of it. Suddenly arrived this new, virtually unknown kid on the block; at half the size and claiming to have twice the brains.&lt;/p&gt;

&lt;p&gt;The claims must have been true, because the application caught the attention of Apple, who ended up acquiring Siri, Inc. shortly after the release. As they say, the rest is history.&lt;/p&gt;

&lt;p&gt;When iOS 6 was released, some people were glad that Siri would be available on the iPad. Others, like myself, remained disappointed that Siri was still unavailable for the iPod. The bad news is that this is still the case; the good news is that it doesn&amp;#8217;t have to be.&lt;/p&gt;

&lt;p&gt;Brilliant software, despite being useful to anyone, isn&amp;#8217;t always available to everyone. It can&amp;#8217;t be; such is reality. However, I&amp;#8217;m a firm believer that when it easily can be, then it most often should be.&lt;/p&gt;

&lt;p&gt;Therefore, a second story will now be told: the story of how an impatient and stubborn believer may enable Siri on her iPod Touch 4G. Fortunately, it&amp;#8217;s a short and simple story.&lt;/p&gt;

&lt;h1 id='how_to_install_siri_on_an_ipod'&gt;How To Install Siri on an iPod&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Jailbreak your iPod using &lt;a href='http://www.redsn0w.us' title='Redsn0w'&gt;Redsn0w&lt;/a&gt;, following the simple instructions provided in the app. More extensive guides &lt;a href='https://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=redsn0w+guide&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8' title='Redsn0w Jailbreak Guides'&gt;can be found&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Remember to use Redsn0w to boot the iPod when you want access to jailbreak applications such as Cydia. If you are running iOS 6, you will want to &lt;a href='https://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=original+ios+firmware&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8' title='Official iOS Firmware'&gt;download&lt;/a&gt; the official firmware IPSW file for your device and use it in Redsn0w (by clicking "Extras" and "Select IPSW"), whenever you boot your device, to enable the jailbreak features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Launch Cydia and add the Siri repository as a source. Go to the "Manage" tab, tap "Sources," "Edit," and then "Add." Use the following URL: "http://repo.siriport.ru".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install Siri by searching for, and installing, the "SiriPort (Original) iOS 6" package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to Settings.app and choose "SiriPort.Ru Original." Tap to "Install Certificate" to allow Siri to talk to Apple's servers.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;#8217;s all. While it may not work as flawlessly as the original Siri on a late model iPhone, it&amp;#8217;s still Siri and it&amp;#8217;s now on your iPod. Have fun with your new friend!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Value of Being a Human Typewriter</title>
   <link href="http://mrnordstrom.com/2013/01/13/the-value-of-being-a-human-typewriter/" />
   <updated>2013-01-13T00:00:00+01:00</updated>
   <id>http://mrnordstrom.com/2013/01/13/the-value-of-being-a-human-typewriter</id>
   <content type="html">&lt;p&gt;It was back in the old days&amp;#8212;we were two sixteen year old hackers in an IRC chat room, and it was probably long past midnight. My friend half-jokingly told me my writing looked like that of a human typewriter, and at the time I took it more as an insult than a compliment. But that statement stuck with me, and with time my view of it has changed.&lt;/p&gt;

&lt;p&gt;She didn&amp;#8217;t mean that my writing was sterile or boring, or at least I hope she didn&amp;#8217;t. She meant that I used capital letters at the beginning of sentences, that I tried to put a comma where it was supposed to be, and that I used em-dashes and semi-colons religiously (I always have). She meant that, as a young Swede caught up in a global web, I was constantly striving to perfect my writing. Formal or informal, in Swedish or in English&amp;#8212;none of it mattered, and it still doesn&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;For some reason, this will occasionally make people think you are weird. That never stopped me, and neither should it stop you. Catch a football enough times and it will eventually seem magnetically attracted to your hands, at which point it doesn&amp;#8217;t matter that some think you&amp;#8217;re weird: you&amp;#8217;ll be a receiver for the New England Patriots, they won&amp;#8217;t be. The same principle applies to writing. Strive for perfection in both formal and informal writing, and soon enough it will become a reflex.&lt;/p&gt;

&lt;p&gt;Soon enough formal and informal will fade away. You will start thinking in better terms, terms like efficiency and comprehension. Your choices and decisions will become based on making your reader get what you&amp;#8217;re trying to say. That is the goal of most of our writing, yet many of us pay little attention to it. We get caught up in our own thoughts, forgetting that our readers are not as familiar with them as we are.&lt;/p&gt;
&lt;figure class='quotation'&gt;
&lt;blockquote&gt;&lt;p&gt;What we want is writing that fits the occasion and the readership---and whether it's "formal" or "informal" by any individual's definition should not be a concern. Our primary concern should be clarity; the next should be economy.&lt;/p&gt;&lt;/blockquote&gt;
&lt;figcaption&gt;Richard Lauchman, &lt;cite&gt;Punctuation at Work&lt;/cite&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;By paying more attention, you will be better understood in any situation&amp;#8212;that is a fact, a simple consequence of consistent effort. I would go as far as to say it will also improve, though to a lesser degree, your verbal communication skills. If doing something takes a little more effort and makes you a lot more efficient, common sense should tell you to do it. That is also my advise to you, and why I&amp;#8217;m writing this right now.&lt;/p&gt;

&lt;p&gt;I still have a long way to go, but being an obsessively compulsive typewriter has taught me a lot. It has taught me about the art of writing, and about the science and value of efficient communication. The statement that started this article, however, still to this day makes me remove a comma here and there, just to at least &lt;em&gt;sound&lt;/em&gt; human in a world that increasingly is not.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Fix iTunes Error 16xx on iOS Custom IPSW Restore</title>
   <link href="http://mrnordstrom.com/2012/12/25/fix-itunes-error-16xx-on-ios-custom-ispw-restore/" />
   <updated>2012-12-25T00:00:00+01:00</updated>
   <id>http://mrnordstrom.com/2012/12/25/fix-itunes-error-16xx-on-ios-custom-ispw-restore</id>
   <content type="html">&lt;h2 id='the_problem'&gt;The problem&lt;/h2&gt;

&lt;p&gt;Attempting to restore your iPhone, or other iOS device, using a custom IPSW firmware file will cause iTunes to choke on an error in the 16xx range, such as error 1600 or 1604. Most people are experiencing this issue while performing a jailbreak of their iPhone or iPod, which is the main reason why you would be restoring your device using a custom firmware file. I was installing &lt;a href='http://whited00r.com/'&gt;whited00r 6&lt;/a&gt; to bring a more productive experience to my old iPhone 3G, since I can&amp;#8217;t officially update it past iOS 4.3.2, when I suddenly bricked it.&lt;/p&gt;
&lt;figure class='bordered rounded'&gt;&lt;img alt='Fix iTunes 1600 Error' src='/img/posts/itunes_1600_error.png' /&gt;&lt;figcaption&gt;Fix your iTunes 16xx error on restore.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id='the_solution'&gt;The solution&lt;/h2&gt;

&lt;p&gt;The problem behind these error messages is that, when restoring from a custom IPSW file, the device needs to be put into a modified DFU mode, which a jailbreaking tool would normally do while guiding you through the process. Luckily, Redsn0w is a tool that helps you do this quickly and easily so you can get back to restoring your device using iTunes.&lt;/p&gt;

&lt;p&gt;If you are getting the error message without attempting to restore your device using a custom firmware file, I suggest you first try the troubleshooting instructions on &lt;a href='http://support.apple.com/kb/TS3694'&gt;Apple&amp;#8217;s website&lt;/a&gt;. Otherwise follow the instructions below to fix the issue.&lt;/p&gt;

&lt;p&gt;The necessary software is available for both MacOS X and Windows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download &lt;a href='http://www.redsn0w.us/2010/03/download-direct-links-jailbreak-guides.html'&gt;Redsn0w&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Download the &lt;a href='http://jaxov.com/2011/04/download-ios-4-3-2-stock-ipsw-for-iphone-ipod-touch-ipad-direct-links/'&gt;official IPSW file&lt;/a&gt; for your device and firmware, e.g. 4.3.2.&lt;/li&gt;

&lt;li&gt;Launch Redsn0w, click &amp;#8220;Browse&amp;#8221;, and open the official firmware file you just downloaded.&lt;/li&gt;

&lt;li&gt;When prompted to select your options, tick &lt;em&gt;only&lt;/em&gt; &amp;#8220;Just enter pwned DFU mode right now&amp;#8221;.&lt;/li&gt;

&lt;li&gt;Follow the instructions. Be ready to hold down the power button when prompted.&lt;/li&gt;

&lt;li&gt;Once Redsn0w is done putting your device in DFU mode, relaunch iTunes and the custom firmware restore will work.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class='bordered rounded'&gt;&lt;a href='http://www.redsn0w.us/2010/03/download-direct-links-jailbreak-guides.html'&gt;&lt;img alt='Redsn0w for Mac will solve your iTunes 16xx error' src='/img/posts/redsn0w.jpg' /&gt;&lt;/a&gt;&lt;figcaption&gt;Redsn0w for Mac solves your iTunes 16xx error.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Easy as pie.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Book Review, Telling Lies by Paul Ekman</title>
   <link href="http://mrnordstrom.com/2012/08/13/book-review-telling-lies-by-paul-ekman/" />
   <updated>2012-08-13T00:00:00+02:00</updated>
   <id>http://mrnordstrom.com/2012/08/13/book-review-telling-lies-by-paul-ekman</id>
   <content type="html">&lt;p&gt;It was several years ago that I started reading &lt;a href='http://www.amazon.com/Telling-Lies-Marketplace-Politics-Marriage/dp/0393321886'&gt;Telling Lies&lt;/a&gt; after finishing Paul Ekman&amp;#8217;s more recent book &lt;a href='http://www.amazon.com/Emotions-Revealed-Paul-Ekman/dp/0753817659'&gt;Emotions Revealed&lt;/a&gt;. While Emotions Revealed can be considered a relatively light read on the subject of emotions and their relation to deception, Telling Lies is fascinatingly deep on the subject of lying itself.&lt;/p&gt;
&lt;figure class='quotation align-right'&gt;&lt;a href='http://www.amazon.com/Telling-Lies-Marketplace-Politics-Marriage/dp/0393337456'&gt;&lt;img alt='Telling Lies by Paul Ekman' src='/img/posts/telling-lies-paul-ekman.gif' /&gt;&lt;/a&gt;&lt;figcaption&gt;Telling Lies by Paul Ekman.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The cover reads &amp;#8220;clues to deceit in the marketplace, politics, and marriage&amp;#8221;. While this subtitle is accurate, it does not quite reflect the complexity of what is described within the frames of the book. More so than just clues to deceit in both everyday and highly deadly historical situations, it to my delight goes into detailed discussion on the morality and rationality of the described predicaments.&lt;/p&gt;

&lt;p&gt;When Lyndon B. Johnson lied about the Vietnam war, did he deceive only the American people or did he also deceive himself?&lt;/p&gt;

&lt;p&gt;Should the ignorance that lead to the explosion of the Challenger space shuttle be blamed on the single person ignoring the many warnings from engineers, or should NASA managers be held accountable for creating an atmosphere where lying was authorized and even encouraged?&lt;/p&gt;

&lt;p&gt;Though this book was published in 1985, it may still be the most accurate and thorough book on the subject of behavioral clues to deceit. This because it&amp;#8217;s based on solid research leading up to, and building upon, the discovery of micro facial expressions and other clues in body, voice, speech and autonomic nervous system that changed the way behavioral scientists view deception, and because it bravely questions past research for being focused on utility as opposed to accuracy.&lt;/p&gt;

&lt;p&gt;An important fact clearly stated throughout the book is that there is no universal sign of deceit. There are only universal signs of emotion. The polygraph machine does not detect deceit; it detects arousal of any emotion. The book goes into fascinating depth on what questions we may ask ourselves and others to not misinterpret or misunderstand emotions and the motives behind them.&lt;/p&gt;

&lt;p&gt;This book was not written just for Norwegian investigative journalists. Anyone will benefit from learning how to be more understanding and sensitive to the behavior of others. As a word of caution, if you believe that ignorance is bliss you may want to stay far away from this book &amp;#8211; it opens the door to many questions regarding ethics and an individuals right to emotional privacy.&lt;/p&gt;

&lt;p&gt;Last but not least, literally, the epilogue of the book is full of insight and gives us a glimpse into the mind of one of our time&amp;#8217;s greatest scientists:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My sympathy is more with the lie catcher than the liar. Perhaps it is because my scientific work is a search for the clues to how people truly feel. The disguise interests me, but the challenge is to uncover the real, felt emotion beneath it.&lt;/p&gt;

&lt;p&gt;Discovering how felt and false expressions differ, to find that concealment is not perfect, that the false only resembles but differs from real expressions of emotion is satisfying.&lt;/p&gt;

&lt;p&gt;The study of deceit, in these terms, is about much more than deceit. It provides an opportunity to witness an extraordinary internal struggle between voluntary and involuntary parts of our life, to learn how well we can deliberately control the outward signs of our inner life.&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>Vim Segmentation Fault On Mac</title>
   <link href="http://mrnordstrom.com/2012/02/20/vim-segmentation-fault-on-mac/" />
   <updated>2012-02-20T00:00:00+01:00</updated>
   <id>http://mrnordstrom.com/2012/02/20/vim-segmentation-fault-on-mac</id>
   <content type="html">&lt;p&gt;Ever used the Vim text editor on Mac? If you haven&amp;#8217;t, you have at least heard of it. It&amp;#8217;s an old, yet amazing and popular piece of software that compiles and runs on practically any OS. As you probably know, it can (and will) greatly increase the productivity of anything text-based you may need to do.&lt;/p&gt;

&lt;p&gt;Besides the classical &lt;a href='http://vim.org'&gt;Vim&lt;/a&gt;, there&amp;#8217;s also a &lt;a href='http://code.google.com/p/macvim/'&gt;MacVim&lt;/a&gt; version for MacOS based on the GUI version of the application, &lt;a href='http://vim.org'&gt;gVim&lt;/a&gt;. It offers some conveniences such as Command-S saving, tabs, and a tad bit of a GUI. However, since I spend much of my time on the command line, I much prefer working with classical Vim in iTerm2&amp;#8211;more about that another time.&lt;/p&gt;

&lt;p&gt;Now, there have been a couple of different situations where I&amp;#8217;ve occasionally gotten segmentation faults which killed the Vim process. A nasty problem when you use it as much as I do, especially if you have disabled swap files. The good thing is that these segfaults are easily solved.&lt;/p&gt;

&lt;h2 id='situation_1'&gt;Situation 1&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Segmentation fault in Vim after upgrading your OS.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The first time I came across this issue was when I started using Vim, which was after my upgrade to MacOS X Lion. Back then I was simply using Terminal and the pre-installed Vim of MacOS, and I kept getting segmentation faults intermittently for no apparent reason&amp;#8211;sometimes when saving files, sometimes when opening them.&lt;/p&gt;

&lt;p&gt;It turns out the segmentation faults occured simply because Vim was compiled for Snow Leopard; this is another one we can stack on the pile of reasons why we should always do clean installs of MacOS. The solution is as simple as the problem. Just recompile Vim and it will work happily ever after.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Recompile Vim, or install it with Homebrew.&lt;/em&gt;&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='sh'&gt;&lt;span class='c'&gt;# Download Vim 7.3 (latest at the time of writing)&lt;/span&gt;
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2

&lt;span class='c'&gt;# Unpack the archive&lt;/span&gt;
tar jxvf vim-7.3.tar.bz2

&lt;span class='nb'&gt;cd &lt;/span&gt;vim-7.3

&lt;span class='c'&gt;# Configure (with Ruby support for plugins)&lt;/span&gt;
./configure --prefix&lt;span class='o'&gt;=&lt;/span&gt;/usr/local --enable-rubyinterp --enable-gui&lt;span class='o'&gt;=&lt;/span&gt;no

&lt;span class='c'&gt;# Build and install&lt;/span&gt;
make
sudo make install

&lt;span class='c'&gt;# Remove the archive&lt;/span&gt;
rm -rf vim-7.3.tar.bz2 vim-7.3

&lt;span class='c'&gt;# Good to go!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='situation_2'&gt;Situation 2&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Segmentation fault when using Ruby plugin.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The second time I got these segmentation faults was when I had installed the Command-T plugin which is written in Ruby. First of all, for the plugin to work it needs Vim to be compiled with Ruby support, which we did above. That however wasn&amp;#8217;t the problem that caused the segfaults.&lt;/p&gt;

&lt;p&gt;The problem was that the plugin was built and installed with Ruby 1.9.3 which I had installed with RVM. The solution is rather simple this time as well; you just need to use Ruby 1.8.7 as you build the plugin.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Use Ruby 1.8.7 when building the plugin.&lt;/em&gt;&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='sh'&gt;&lt;span class='c'&gt;# Switch to system default Ruby. You can also install and&lt;/span&gt;
&lt;span class='c'&gt;# switch to Ruby 1.8.7 using `rvm (install|use) 1.8.7`.&lt;/span&gt;
rvm use system

&lt;span class='c'&gt;# We&amp;#39;ll assume here that we&amp;#39;re dealing with the Command-T&lt;/span&gt;
&lt;span class='c'&gt;# plugin and you manage it using Pathogen. If you&amp;#39;re not&lt;/span&gt;
&lt;span class='c'&gt;# using Pathogen, `cd` to ~/.vim/ruby/command-t instead.&lt;/span&gt;
&lt;span class='nb'&gt;cd&lt;/span&gt; ~/.vim/bundle/command-t/ruby/command-t

&lt;span class='c'&gt;# Configure&lt;/span&gt;
ruby extconf.rb

&lt;span class='c'&gt;# Install&lt;/span&gt;
rake make
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='conslusion'&gt;Conslusion&lt;/h2&gt;

&lt;p&gt;Vim is a truly amazing piece of software and it has been since 1991, or even since 1976 when Vi was first created. If you spend a reasonable amount of time typing, I recommend that you try if for a week or two. It will be frustrating at first but when you get used to the keyboard mappings and the many great plugins and configurations, I guarantee you, you will be hooked!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Part 2. Writing Nijs JavaScript</title>
   <link href="http://mrnordstrom.com/2011/11/28/part-2-writing-nijs-javascript/" />
   <updated>2011-11-28T00:00:00+01:00</updated>
   <id>http://mrnordstrom.com/2011/11/28/part-2-writing-nijs-javascript</id>
   <content type="html">&lt;p&gt;&lt;a href='http://mrnordstrom.com/2011/11/27/part-1-writing-nijs-javascript/'&gt;Last time&lt;/a&gt; we talked about JavaScript as a beautiful but often misunderstood language. Today we&amp;#8217;ll review our first piece of code; &lt;em&gt;a simple foundation&lt;/em&gt; we&amp;#8217;ll later add more features to. We&amp;#8217;ll start with just a few snippets, simplified from the commented JSLint-valid source available in the &lt;a href='https://github.com/dnordstrom/nijs'&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find useful references at the bottom of this post.&lt;/p&gt;

&lt;p&gt;First of all, we want to create the object we&amp;#8217;ll build upon. But before we do that, we should check if the object already exists (e.g. if we have already declared it in another file.) If it does not exist, we create a &lt;code&gt;Function&lt;/code&gt; object just as we normally would declare a function (because that&amp;#8217;s essentially what we&amp;#8217;re doing.)&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;===&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='p'&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This first line of code already breaks two of our conventions&amp;#8212;&lt;em&gt;always use curly braces&lt;/em&gt; when writing if-statements and other code blocks, and &lt;em&gt;always put the opening curly brace on the same line&lt;/em&gt; as the statement. Not only does it enhance the readability of our code, it also prevents semi-colon insertion issues&lt;sup&gt;&lt;a href='#footnote_1' title='Beware of Semi-Colon Insertion Issues'&gt;1&lt;/a&gt;&lt;/sup&gt;. We are making an exception here since it&amp;#8217;s a very simple one-liner that we want to keep compact and include in other JS files as well.&lt;/p&gt;

&lt;p&gt;There are a few more details we should notice here. First of all, we &lt;em&gt;always use the typeof operator when checking for undefined variables&lt;/em&gt;, as oopposed to &lt;code&gt;undefined&lt;/code&gt; or &lt;code&gt;null&lt;/code&gt;. &lt;code&gt;undefined&lt;/code&gt; is simply a variable that can be overwritten, meaning our code would break. Second of all, we &lt;em&gt;use the &lt;code&gt;===&lt;/code&gt; equality operator instead of &lt;code&gt;==&lt;/code&gt;&lt;/em&gt;. We do this because &lt;code&gt;==&lt;/code&gt; compares the values after any necessary type conversion. In other words, &lt;code&gt;0 == &amp;#39;0&amp;#39;&lt;/code&gt; would produce &lt;code&gt;true&lt;/code&gt;, which in most cases is undesirable.&lt;/p&gt;

&lt;p&gt;Finally, as already mentioned, we are declaring NI as a &lt;code&gt;Function&lt;/code&gt; instead of using object notation syntax (e.g. &lt;code&gt;var NI = { };&lt;/code&gt;. By doing so we can, if necessary, define a constructor, but more importantly, we get access to the &lt;code&gt;prototype&lt;/code&gt; property we&amp;#8217;ll use next. We could also have written the line like this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;===&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='p'&gt;};&lt;/span&gt;
&lt;span class='c1'&gt;// or&lt;/span&gt;
&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;===&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nb'&gt;Function&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;

&lt;span class='c1'&gt;// This is the JSLint valid version used in the GitHub repository&lt;/span&gt;
&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt; &lt;span class='o'&gt;===&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;use strict&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt; &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='nx'&gt;NI&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Let&amp;#8217;s move on to extending the NI object with our first library component&amp;#8212;an object called NI.JS that will contain our core functionality.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&lt;span class='nx'&gt;NI&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;prototype&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;JS&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
  &lt;span class='cm'&gt;/* Core component goes here */&lt;/span&gt;
&lt;span class='p'&gt;}());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This object will be the core of the library, and unrelated features will be added as separate members of the NI object&amp;#8217;s prototype. We are adding it to the prototype since we want it readily available to all instances of &lt;code&gt;NI&lt;/code&gt; and those inheriting from it in one way or the other.&lt;/p&gt;

&lt;p&gt;Now, if you are new to the module pattern&lt;sup&gt;&lt;a href='#footnote_1' title='JavaScript Module Pattern In-Depth'&gt;2&lt;/a&gt;&lt;/sup&gt; and prototypal inheritance you may be wondering just what the hell is going on here. It&amp;#8217;s actually very straight-forward.&lt;/p&gt;

&lt;p&gt;We insert &lt;code&gt;()&lt;/code&gt; immediately after the closing curly brace because we want to call the function right away. To make this obvious, we &lt;em&gt;always enclose a self-evoking function in parenthesis&lt;/em&gt;, which greatly enhances readability. This means the return value of the function, not the actual function, will be assigned to &lt;code&gt;NI.prototype.JS&lt;/code&gt;. The function then acts as a constructor and we don&amp;#8217;t need to use the &lt;code&gt;new&lt;/code&gt; keyword to instantiate the object.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s add the first core method of the library; a simple shortcut for &lt;code&gt;document.getElementById&lt;/code&gt;.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&lt;span class='cm'&gt;/* Public */&lt;/span&gt;
&lt;span class='nx'&gt;NI&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;prototype&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;JS&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
  &lt;span class='s2'&gt;&amp;quot;use strict&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;

  &lt;span class='cm'&gt;/* Private */&lt;/span&gt;
  &lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;self&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='p'&gt;};&lt;/span&gt;

  &lt;span class='cm'&gt;/* Privileged */&lt;/span&gt;
  &lt;span class='nx'&gt;self&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;find&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;element&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;!&lt;/span&gt;&lt;span class='nb'&gt;document&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getElementById&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='kc'&gt;false&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='nb'&gt;document&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getElementById&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;element&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
  &lt;span class='p'&gt;}&lt;/span&gt;

  &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='nx'&gt;self&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This is a pattern I like to use at the moment for instantiating our object. At the top of the self-evoking function we enable strict mode, introduced in ECMAScript 5. I recommend reading up on strict mode and always using it, but this library will enable it on a per-object basis to keep it optional.&lt;/p&gt;

&lt;p&gt;Now to the more interesting parts, starting with a &lt;code&gt;var self = { };&lt;/code&gt; declaration. At that point in the function, &lt;code&gt;self&lt;/code&gt; is a private variable. However, the purpose of &lt;code&gt;self&lt;/code&gt; is to be returned at the end of the function, effectively exposing it to the public.&lt;/p&gt;

&lt;p&gt;By returning &lt;code&gt;self&lt;/code&gt;, we can use it to &lt;em&gt;define the public interface&lt;/em&gt; of our object. Any method added as a member of &lt;code&gt;self&lt;/code&gt; will be privileged, meaning it has access to both public and private variables within its scope&lt;sup&gt;&lt;a href='#footnote_3' title='Private Members in JavaScript'&gt;3&lt;/a&gt;&lt;/sup&gt;. We could also have written the self-evoking function as follows:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&lt;span class='cm'&gt;/* Public */&lt;/span&gt;
&lt;span class='nx'&gt;NI&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;prototype&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;JS&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
  &lt;span class='s2'&gt;&amp;quot;use strict&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
  
  &lt;span class='cm'&gt;/* Private variables go here */&lt;/span&gt;
  
  &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='cm'&gt;/* Privileged */&lt;/span&gt;
    &lt;span class='nx'&gt;find&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
      &lt;span class='k'&gt;if&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;!&lt;/span&gt;&lt;span class='nb'&gt;document&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getElementById&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='kc'&gt;false&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
      &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='nb'&gt;document&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getElementById&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;element&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
  &lt;span class='p'&gt;};&lt;/span&gt;
&lt;span class='p'&gt;}());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The above function would result in an equivalent object. This is actually a popular and quite nice way of separating private variables and functions from the public interface. However, I prefer defining a public interface using &lt;code&gt;self&lt;/code&gt; as it reduces the level of indenting and gives the code a more natural flow. In the end it comes down to personal preference as both produce an equivalent object.&lt;/p&gt;

&lt;p&gt;As for the &lt;code&gt;find&lt;/code&gt; method, it simply checks if &lt;code&gt;document.getElementById&lt;/code&gt; exists and if it does, calls it and returns the resulting element node. Otherwise, we just return false. If we want to be extra picky, we can use the &lt;code&gt;typeof&lt;/code&gt; operator to test for both the &lt;code&gt;document&lt;/code&gt; (DOM) object and its &lt;code&gt;getElementsById&lt;/code&gt; method. We&amp;#8217;ll keep it simple for now.&lt;/p&gt;

&lt;p&gt;Ideally we should also have &lt;em&gt;only one exit point per function&lt;/em&gt;, a convention which we are violating by having multiple return-statements. While conditional one-liners like this one is a farily clean and valid exception, this should be kept in mind.&lt;/p&gt;

&lt;p&gt;A minor note; ideally, to be compatible with JSDoc Toolkit, we would comment our private variables and functions with &lt;code&gt;@private&lt;/code&gt;, and our public ones with &lt;code&gt;@public&lt;/code&gt;. Unfortunately, Pygments which I use for syntax highlighting can&amp;#8217;t parse those comments, and neither does JSDoc Toolkit support the &lt;code&gt;@privileged&lt;/code&gt; tag.&lt;/p&gt;

&lt;p&gt;If we would run this through &lt;a href='http://www.jslint.com/' title='JSLint'&gt;JSLint&lt;/a&gt;, which I suggest you do with any JavaScript code you write, it would give errors. However, most of the errors reported have to do with spacing/indenting and the missing curly braces mentioned earlier&amp;#8212;things we do intentionally.&lt;/p&gt;

&lt;p&gt;The GitHub repository mentioned in the first paragraph contains the JSLint-valid revision of this code, using the conventions listed below.&lt;/p&gt;

&lt;p&gt;That will be all for today&amp;#8212;we now have a basic foundation to build upon. If you have any suggestions on how to improve the code or what to do next time, feel free to leave a comment!&lt;/p&gt;

&lt;h2 id='conventions'&gt;Conventions&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Always use curly braces.&lt;/li&gt;

&lt;li&gt;Always put the opening curly brace on the same line as the statement.&lt;/li&gt;

&lt;li&gt;Use the typeof operator when checking for undefined variables.&lt;/li&gt;

&lt;li&gt;Avoid type coercion by using &lt;code&gt;===&lt;/code&gt; instead of &lt;code&gt;==&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;Always enclose a self-evoking function in parenthesis.&lt;/li&gt;

&lt;li&gt;Separate public, privileged and private members for proper encapsulation.&lt;/li&gt;

&lt;li&gt;Have one exit point per function, avoiding multiple return-statements.&lt;/li&gt;

&lt;li&gt;Validate your code using &lt;a href='http://www.jslint.com/' title='JSLint'&gt;JSLint&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='footnotes'&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;a href='http://robertnyman.com/2008/10/16/beware-of-javascript-semicolon-insertion/' id='footnote_1' title='Beware of JavaScript Semi-Colon Insertion'&gt;Beware of JavaScript Semi-Colon Insertion&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href='http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth' id='footnote_2' title='JavaScript Module Pattern In-Depth'&gt;JavaScript Module Pattern In-Depth&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href='http://javascript.crockford.com/private.html' id='footnote_3' title='Private Members in JavaScript'&gt;Private Members in JavaScript&lt;/a&gt;
  &lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>
 
 <entry>
   <title>Part 1. Writing Nijs JavaScript</title>
   <link href="http://mrnordstrom.com/2011/11/27/part-1-writing-nijs-javascript/" />
   <updated>2011-11-27T00:00:00+01:00</updated>
   <id>http://mrnordstrom.com/2011/11/27/part-1-writing-nijs-javascript</id>
   <content type="html">&lt;p&gt;Douglas Crockford tells us that JavaScript is the &lt;em&gt;most misunderstood programming or scripting language&lt;/em&gt; available today. I suppose this is because of its popularity among beginners and the seemingly strange and uncommon concept of &lt;em&gt;prototypal inheritance&lt;/em&gt; which is at the core of JavaScript, as opposed to the class based approach used in languages like Ruby and PHP.&lt;/p&gt;

&lt;p&gt;JavaScript is one of those languages many people either have a hard time fully grasping, or they believe they are proficient enough to not need to learn more about. However, since JavaScript is pretty much the only client-side scripting language running in web browsers these days, it is a great idea to learn more about it. Besides that, JavaScript is actually also a very useful and beautiful object-oriented language that many people underestimate.&lt;/p&gt;

&lt;p&gt;To gain a better understanding of how JavaScript works and what the best practices are, and to put that knowledge to good use, I have started writing a &lt;em&gt;library called NI::JS&lt;/em&gt; (pronounced &amp;#8220;nice&amp;#8221;) that will incorporate good conventions and provide a set of helpers/tools for Javascript development.&lt;/p&gt;

&lt;p&gt;Of course, there are many libraries already out there. &lt;a href='http://www.prototypejs.org/'&gt;Prototype.js&lt;/a&gt;, &lt;a href='http://jquery.com/'&gt;jQuery&lt;/a&gt;, &lt;a href='http://twitter.github.com/bootstrap/'&gt;Bootstrap&lt;/a&gt; and &lt;a href='http://ender.no.de/'&gt;Ender&lt;/a&gt; are just a few examples. It is my opinion that many of these libraries and &lt;em&gt;frameworks tend to over-abstract and obscure JavaScript&lt;/em&gt; as a language. Prototype.js for example offers class-based inheritance.&lt;/p&gt;

&lt;p&gt;I am not saying that this is necessarily a bad thing. Actually, I enjoy developing with Prototype.js and other libraries. The chaining and abstraction featured in jQuery can be useful, especially to beginners but also to more serious developers.&lt;/p&gt;

&lt;p&gt;What I am saying is that I personally like JavaSript as a language and I would like to stick with the prototypal philosophy. That is what this library is all about&amp;#8211;&lt;em&gt;embracing the language, and providing conventions and tools to solve common problems&lt;/em&gt;. Perhaps this will promote greater knowledge of the fundamentals that many fail to understand.&lt;/p&gt;

&lt;p&gt;This post is simply a reminder to myself about my intentions for the NI::JS library. The plan is to build it as I go along, solving problems in a modular way, and posting code reviews on this blog to describe why, and what, I am doing. Hopefully readers will jump in an suggest improvements to the code&amp;#8211;I appreciate all suggestions!&lt;/p&gt;

&lt;p&gt;So let us begin rocking with JavaScript!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Review Of Day One For Mac And iOS</title>
   <link href="http://mrnordstrom.com/2011/09/17/review-of-day-one-for-mac-and-ios/" />
   <updated>2011-09-17T00:00:00+02:00</updated>
   <id>http://mrnordstrom.com/2011/09/17/review-of-day-one-for-mac-and-ios</id>
   <content type="html">&lt;p&gt;To start off with, let&amp;rsquo;s just say &lt;a href="http://dayoneapp.com/" title="Day One, Journaling for Mac and iOS"&gt;Day One&lt;/a&gt; is a top notch application for both Mac and iOS. That&amp;rsquo;s enough for this introduction because it&amp;rsquo;s the simple truth&amp;mdash;Day One is a damn great journaling software.&lt;/p&gt;

&lt;figure&gt;&lt;a class="image" href="/img/posts/day-one.jpg"&gt;&lt;img src="/img/posts/day-one.jpg" alt="Day One, Journaling for Mac and iOS"&gt;&lt;/a&gt;&lt;figcaption&gt;Image copyright Bloom Built, LLC.&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;When I first heard of Day One, I wanted to compare it to Evernote since they&amp;rsquo;re both enter-text-daily-and-save-it applications.  But I now understand that it&amp;rsquo;s not a competition between the two of them&amp;mdash;they&amp;rsquo;re two different applications altogether. They may seem similar in many ways but they&amp;rsquo;ve got completely different purposes in my opinion.&lt;/p&gt;

&lt;p&gt;While Evernote is there to catch anything and everything that is on your mind, Day One is more of a pure journaling application. You add entries and they&amp;rsquo;re organized by their date, simple as that. It&amp;rsquo;s really simple to use. In fact, what I like most about Day One is that the interface is so much better than Evernote&amp;rsquo;s&amp;mdash;it&amp;rsquo;s a bliss to use as a journaling software of any kind, no matter if you&amp;rsquo;re writing a project log book, keeping a diary of your nastiest dreams, or whatever you may want to type down regularly.&lt;/p&gt;

&lt;p&gt;One of those small details that I love is that when you launch the app, the first thing you see at the top is an inspirational quote to get you to start writing what&amp;rsquo;s on your mind. Really love that. You can of course remove it, as well as refresh it to a new quote, but I think it&amp;rsquo;s a wonderful and unique feature that sets it apart from its competitors. Very cute.&lt;/p&gt;

&lt;p&gt;As mentioned, it&amp;rsquo;s very simple to use. Basically, you&amp;rsquo;ve got a your calendar with days and entries, and you have your starred entries plus a few reminders. That&amp;rsquo;s it. That&amp;rsquo;s what&amp;rsquo;s in the Twitter-app style sidebar, along with a button for adding a new entry. And that&amp;rsquo;s kinda the beauty of it all&amp;mdash;its simplicity. It seems to be completely designed for daily journaling of any kind&amp;mdash;making it as comfortable as possible&amp;mdash;beating any competitor that tries to be more.&lt;/p&gt;

&lt;p&gt;So what about the Preferences? One awesome thing is that you can enable password protection for you entries, which you may want to do if they&amp;rsquo;re really private, like mine are sometimes (or maybe I&amp;rsquo;m just a paranoid IT security freak). You can also enable or disable reminders, setting up when they start and end. General preferences include things like where to keep the database file, whether or not to show the menu bar icon, and a global entry hotkey which is always nice to have, to quickly make a note of anything&amp;mdash;again, kinda like Evernote.&lt;/p&gt;

&lt;p&gt;At this time and point in it&amp;rsquo;s lifespan, Day One is very simple to use and in my opinion it&amp;rsquo;s very targeted towards mere journaling. It can of course be used for much else, but journaling is what it excels at and it&amp;rsquo;s also what it&amp;rsquo;s better than Evernote at.&lt;/p&gt;

&lt;p&gt;Bottom line, will I replace Evernote with Day One for journaling? I&amp;rsquo;m not sure. On on hand, I love having everything in one place, and on the other hand I love the interface that Day One offers me. Synchronization is a feature that I really miss, but maybe that&amp;rsquo;s somewhere down the roadmap.&lt;/p&gt;

&lt;p&gt;Day One is really an excellent app for journaling on both Mac and iOS. For that purpose it&amp;rsquo;s likely the best out there. Let&amp;rsquo;s just leave it at that!&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="http://dayoneapp.com/" title="Day One, Journaling for Mac and iOS"&gt;dayoneapp.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Meeting People Online Is Easy, Right?</title>
   <link href="http://mrnordstrom.com/2011/08/28/meeting-people-online-is-easy/" />
   <updated>2011-08-28T00:00:00+02:00</updated>
   <id>http://mrnordstrom.com/2011/08/28/meeting-people-online-is-easy</id>
   <content type="html">&lt;p&gt;The internet has completely changed how many of us meet people. It used to be a matter of a real-life get-together kinda thing, and now it can be a matter of replying to someones blog post or tweet. That changes things substantially but does it really make it all any simpler?&lt;/p&gt;

&lt;p&gt;At a first glance at the subject, it seems so. It&amp;rsquo;s faster and easier to &amp;ldquo;meet&amp;rdquo; and become &amp;ldquo;friends&amp;rdquo; with someone you&amp;rsquo;re in contact with over the internet, whether it&amp;rsquo;s via Facebook, Twitter, Skype or whatever&amp;mdash;pick your poison. But do you really, I mean really, get a complete sense of who that person is until you&amp;rsquo;ve met him or her in person or talked over the phone?&lt;/p&gt;

&lt;p&gt;I don&amp;rsquo;t think so. And that&amp;rsquo;s where it gets complicated for people like myself who practically hate phones and everything resembling them. Why? Fuck knows. I suppose it&amp;rsquo;s a feeling of insecurity mixed with control-freakiness.&lt;/p&gt;

&lt;p&gt;You don&amp;rsquo;t know how the person on the other end sounds. If you&amp;rsquo;re using a webcam, you don&amp;rsquo;t know how they dress until the moment is right there. You thought you knew it all, and suddenly you don&amp;rsquo;t know shit, and it&amp;rsquo;s frightening to some people. Now, is this where I&amp;rsquo;m supposed to come in and comfort those people and tuck them in?&lt;/p&gt;

&lt;p&gt;Fuck that. I used to be, and part of me still am, one of those people that for some stupid-ass reason are nervous about something as natural as human contact, and I say &amp;ldquo;fuck it, just do it&amp;rdquo;. I know the last part is trademarked by Nike but I&amp;rsquo;ve said it so many times it should be trademarked to me by now. Just. Fucking. Do. It. Why? Do you really need me to spell that shit out for you?&lt;/p&gt;

&lt;p&gt;OK, then. If you don&amp;rsquo;t take it from chatting to the phone or webcam, you&amp;rsquo;ll be stuck without progress when it comes to knowing the person. At some point, you&amp;rsquo;re gonna need to take it a step further. And what have you really got to lose? I mean, what&amp;rsquo;s the worst shit that could happen? Rejection? Maybe&amp;mdash;but rejection is something you&amp;rsquo;ve gotta learn how to deal with in life, otherwise you&amp;rsquo;ll get nowhere, and get nothing or no one.&lt;/p&gt;

&lt;p&gt;Truth is also that the person on the other end may be just as frightened as you are, if not more so. Who knows? So just take the fucking chance and do it, OK? Take my word on it; it&amp;rsquo;s not something you&amp;rsquo;re likely to regret. I met my first fianc&amp;eacute;e through the web and I don&amp;rsquo;t regret meeting her in person&amp;mdash;it was fucking amazing, a magic moment never to be forgotten. An angel had fallen from the web and landed right in my lap (literally).&lt;/p&gt;

&lt;p&gt;Besides, I&amp;rsquo;ve always lived by the motto that I&amp;rsquo;d rather regret something I&amp;rsquo;ve done than something I haven&amp;rsquo;t done. Isn&amp;rsquo;t that a much more fun way to live than ending up 90 years old and regretting the million chances you never took? That&amp;rsquo;s what I thought. So fuck it, just do it.&lt;/p&gt;

&lt;p&gt;As the amazing role-model I am, I&amp;rsquo;ve taken the first step and set up a Skype date with sweet young Ally on Sunday. It&amp;rsquo;ll be out of this world, I&amp;rsquo;m sure of it.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Don Juan of Design and Development</title>
   <link href="http://mrnordstrom.com/2011/08/25/don-juan-of-design-and-development/" />
   <updated>2011-08-25T00:00:00+02:00</updated>
   <id>http://mrnordstrom.com/2011/08/25/don-juan-of-design-and-development</id>
   <content type="html">&lt;p&gt;The other day Ally again chatted with &lt;a href="skype:d.nintera?chat"&gt;me on Skype&lt;/a&gt;, and the name Don Juan came up for some strange reason. And now&amp;hellip; a few days later; I felt I could relate that to web design, development and programming&amp;mdash;anything &amp;ldquo;work&amp;rdquo; really.&lt;/p&gt;

&lt;p&gt;Have you read anything about the tales of Don Juan? I hadn&amp;rsquo;t, so I Wikipedia-ed the shit out of it and there are loads of information in there. Basically, he&amp;rsquo;s the world&amp;rsquo;s greatest lover and he&amp;rsquo;s a natural born seducer. I can relate to that too but that&amp;rsquo;s not what I&amp;rsquo;m talking about.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m talking about us, the cyber-maniacs of the web-design-verse. It hit me like a Rolling Stone lick&amp;mdash;we are the fucking Don Juan&amp;rsquo;s of it all. Otherwise, why are you doing what you do, whether it&amp;rsquo;s designing, programming, or working in a Red Light District booth? We are it.&lt;/p&gt;

&lt;p&gt;Do you do it just because &amp;quot;satisfaction&amp;quot; of surviving another pay-day? Then get the fuck out. Seriously. Get. The. Fuck. Out. Because we, right here, we care, and we should be the Don Juan&amp;rsquo;s of whatever it is we do.&lt;/p&gt;

&lt;p&gt;Once upon a time, Steve Jobs&amp;mdash;the IT-superhero of the last three decades&amp;mdash;so honestly and humbly put it like this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;ldquo;We&amp;rsquo;re here to make a dent in the universe. Otherwise, why even be here?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As usual, he&amp;rsquo;s precisely spot on, just like I was when I was competing at the shooting ranges years ago.&lt;/p&gt;

&lt;p&gt;If you&amp;rsquo;ve read this far&amp;mdash;have come so far down the lines of text and all that&amp;rsquo;s in-between&amp;mdash;then you&amp;rsquo;re most likely in it for the love. The love of the game, &lt;em&gt;the life&lt;/em&gt;, baby. Congratulations, that&amp;rsquo;s fantastic, dear!&lt;/p&gt;

&lt;p&gt;And I mean that, I really do. Because by being in it for the love of your work&amp;mdash;and possibly hate of others work&amp;mdash;you&amp;rsquo;ve gone from 0-60, my friend. It doesn&amp;rsquo;t matter how fast you got, or will get, there. It&amp;rsquo;s only that you are there that matters, and nothing else.&lt;/p&gt;

&lt;p&gt;Money and the love for it, the greed, or just the necessity of having a job, may get you to 60, that&amp;rsquo;s for damn sure. It will get you far further too if you have enough of that shit in you. But there&amp;rsquo;s nothing like being in it for the love, the hate, the opinion-ation of you inner crazy self.&lt;/p&gt;

&lt;p&gt;Money is a great motivator&amp;mdash;you need it for survival&amp;mdash;it&amp;rsquo;s primal instinct. All-too-natural-mindfuck of the 2000 or so past years.&lt;/p&gt;

&lt;p&gt;But it&amp;rsquo;s not &amp;ldquo;the real deal&amp;rdquo;, you know. I&amp;rsquo;m right now above the clouds, watching the sun set outside my window seat on the plane I&amp;rsquo;m riding. It&amp;rsquo;s beautiful to the point of undescribable-ness so I won&amp;rsquo;t even try. Point is, is your work that beautiful, in your own opinion? If not, do you want it to be?&lt;/p&gt;

&lt;p&gt;Then you&amp;rsquo;re on the right track, baby&amp;mdash;your very own track, just where you should be. You&amp;rsquo;re doing something right; you&amp;rsquo;re in it for the love. Continue down that path and nobody else&amp;rsquo;s, and you&amp;rsquo;re already my own personal idol.&lt;/p&gt;

&lt;p&gt;Money is numbers. Love is magic. Do the math, and then continue down your path. Pretty please with cherries on top.&lt;/p&gt;

&lt;p&gt;Fuck &amp;ldquo;show me the money!&amp;rdquo;&amp;mdash;&amp;ldquo;Show me the love&amp;rdquo; instead!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/mizwizzy" title="Fantastic web designer and developer!"&gt;@mizwizzy&lt;/a&gt; mentioned something on Facebook relating to me and something called &amp;ldquo;profanity&amp;rdquo;&amp;mdash;had to Google that. Personally, I care about crazy-ass-wise-ass-ness, and throwing in an F-grenade at someone tends to make them think just a lil&amp;rsquo; bit more about what you&amp;rsquo;re saying. My love to you though, Ms. Wizzy! :) And I think this post kinda tuned it down a bit actually, but don&amp;rsquo;t get used to it!&lt;/p&gt;

&lt;p&gt;Wow, this sunset is love(ly). &lt;time datetime="2011-08-15T21:38:00+01:00"&gt;9.38 PM&lt;/time&gt; and about to land but I&amp;rsquo;ll remain in the clouds because this is a great day, and a great decade for all of us. Rock on.&lt;/p&gt;</content>
 </entry>
 
 
</feed>
