Tuesday, August 13, 2013

Reading PDFs on iPhone: Kindle vs iBooks

Over the years I've found myself reading more on the iPhone. This is driven by excellent free access to classic literature ebooks through Project Gutenberg

After going back to school in 2012 I realized there is a treasure trove of free academic material in large PDF's that I would never read in front a traditional PC screen. With my new digital reading patterns I began craving to read these on my iPhone. But the legacy 8.5 x 11 formatting of PDF's does not lend itself to readability on a 3.5" screen. The text is far to small, requiring constant zooming and scrolling.

This is a show stopper for longer documents.

Placing the device in landscape, combined with double tap to zoom offers a glimmer of hope. But as always, the devil is in the details.

Here's a standard PDF starting in landscape mode:

My digital reading habit began in the Kindle app on iOS devices before iBooks was released. Never having any reason to switch, I've stuck with the Kindle app.

In the Kindle app, double tapping anywhere on the text (or anywhere on the document for that matter) will zoom in only on the document itself (margin included):

On a 3.5" screen, this text is still unmanageable for extended reading; requiring constant finger pecking.

In iBooks, a double tap on text will zoom in past the margin, to the edge of the text that was tapped. It also subtly locks vertical scrolling, as if the zoomed state was the original size of the document.

This detail is a habit breaker. iBooks has become my new default reading app.

Thursday, April 11, 2013

Passage To India

Lo, soul, seest thou not God's purpose from the first?
The earth to be spann'd, connected by network,
The races, neighbors, to marry and be given in marriage,
The oceans to be cross'd, the distant brought near,
The lands to be welded together.

- Walt Whitman (Passage to India)
Could he even fathom...?

Sunday, March 17, 2013

Clever Use of Space by Mailbox

 Clever ideas seem obvious in retrospect.

For example, first look at a screenshot from Apples native Mail app. In this screenshot on my iPhone 4S I just refreshed the inbox:

Note the space held by the persistent status bar in the bottom, the temporary space held by the loading icon below "All Inboxes", and the doubly redundant loading icon in the status bar.

Now contrast that with Mailbox on the right, in the same state of refreshing the inbox:

Active feedback is provided consistently at one location in the status bar, conserving precious real estate, while still displaying the standard status bar information when in it's neutral state.

Personally, I also found that Mailbox's less intrusive status indicators invited me to continue interacting with my inbox, regardless of what state it is in. I never thought of clicking an item or writing a message in Apples Mail app while it is loading. Instead I find myself staring at the loading indicator waiting for it to finish before proceeding with my business.

Friday, March 15, 2013

Why Do We Hashtag?

I originally understood hashtags on Twitter and Instagram as a functional way to link your personal experience to a larger shared experience. This is in line with the positive sociological trend, towards a more global consciousness, that I wrote about a few years ago.

Then people began to be clever; creating unlikely tags, daring you to click and find out whether anyone else in the world had concocted such a string of characters.

But then the meme made a radical evolutionary jump that left me awestruck.

Someone intentionally wrote a status update on Facebook followed by a series of hashtags. Not because it provided any functional linking, but because it was a way to provide commentary.

Digital social networks are changing us in a way that is compelling us to provide witty commentary on our own commentary before anyone else can.

And it is the sociological significance of this that I am still grappling with. Honestly, I'm struggling to find a positive take on this trend. Thoughts?

Tuesday, March 12, 2013

Zara: The Apple of Fast Fashion

Six years ago I bought a used pair of Zara cords, knowing nothing about the brand. They quickly became my favorite pair of pants. With no stores in the Pacific NW, I have always been curious about this mysterious brand behind my favorite pair of pants.

In January I was browsing the Bloomberg Billionaires and was shocked to see the 3rd richest individual in the world (displacing Warren Buffet) was the founder of Zara. I became insatiably curious about how this self made founder of a clothing brand, that does not even have a store in Seattle, much less Portland, could become so wealthy.

When NPR did a segment on The Reclusive Spanish Billionaire behind Zara, I tuned in.

It is interesting to note that Zara embodies a few core Apple-like traits:
  • Methodical focus on Supply chain efficiency; 15 days from design to shelf.
  • Vertically integrated; tightly controlling supply chain from factory to retail.
  • Spending relatively little on advertising, instead focusing on flagship stores.

Saturday, March 02, 2013

Why Hackers Hate Driving, And Why I Love It.

"Imperfect systems infuriate hackers, whose primal instinct is to debug them. This is one reason why hackers generally hate driving cars-the system of randomly programmed red lights and oddly laid out one-way streets causes delays which are so goddamn unnecessary that the impulse is to rearrange signs, open up traffic-light control boxes . . . redesign the entire system." - Hackers: Heroes of the Computer Revolution by Steven Levy. 
My wife can testify how much of my daily life is dominated by this primal instinct to debug imperfect systems. Reading this excerpt even resurrected a favorite soap boxes of mine, about why traffic jams are a senseless waste of resources. But there is a pragmatic strain in me as well, because at the same time I genuinely do like driving; yes, even in a traffic jam.

When I am driving I will attempt to maximize my own efficiency within the broken system. On freeways specifically, a large part of this is by outsmarting the other users of the system1. But it's the next stage of my curse that infuriates my wife even more than the traffic. I'm not content to be deluded by a half-baked theory about which lanes are are more efficient at a particular time on a particular stretch of freeway2. I am constantly testing my theory by setting baseline cars in each lane to monitor and refine the effectiveness of a theory.

Instead of being infuriated; I embrace the problem as a challenge to first study, and then develop and test theories on how to subvert the system.

1You could also define the driver, not as a user, but as a component of the transportation system which has a goal of expediency and efficiency. Then autonomous cars would indeed be a significant system upgrade.

2If you ever travel North on I-205 during evening rush hour, I have some tips for you. I'm also working on abstracting what I have learned to general rules that can be applied elsewhere. But that is for another post.

Friday, February 22, 2013

PSA: Watch Shaun of the Dead

There are few films that I will begrudgingly watch a second time, even fewer that I actually enjoy watching again every few years.

Shaun of the Dead is one of them, from start to finish, never slow and always funny. Easily makes my top 10, and is surely the most under-appreciated of my favorites. It came out in 2004, presciently on the leading edge of the zombie craze of our time.

The Walking Dead desensitized my wife to zombies (thankfully), so I was able to convince her to watch Shaun of the Dead last weekend.

My PSA: If you are among the millions enjoying The Walking Dead, do yourself a favor, and watch Shaun of the Dead this weekend as well.

Added bonus for some of who might be enjoying my other favorite series; I discovered a new treasure that gives me much joy:

Yes, Sean and Matthews mum are both played by the timeless English mother, Penelope Wilton (Barbara and Isobel Crawley respectively).

Wednesday, February 20, 2013

Text Editor to Practice Writing Better

Over the last few years I have been learning: You do not need big words to say something great. If the idea is important; it is just as important to say it with clear and simple words that all can understand.

The Up-Goer Five text editor is the perfect way practice this.

The challenge is worth your while.
  • Can the same idea be stated more simply? The more work you put into making the words simple, the more work the reader can put into the idea.
  • Are the less common words appropriate for your audience? The more time you invest in the selection of every word, the more value your reader will receive.
And there is truth in this for much creative work in any medium:
"It is a false and foolish but widespread misconception that “innovation” goes only in the direction of additional complexity."

Wednesday, February 13, 2013

My Failed Nextdoor Experience

Last year we tried, and failed, to establish our neighborhood on Nextdoor. This review covers what we learned from the experience.
  • Our neighborhood is more insular then we ever imagined

We're stuck in a web we spent decades spinning. Our social norms and architectural choices stand against us. A lot more than good intentions are needed to turn this titanic.
  • Our neighborhood is composed of an older disinterested and offline demographic

About half of our neighbors are retired, and many more aren't far behind. Much to my surprise, many from the older generation simply couldn't get excited about a vision for a better neighborhood. The few that were interested in actively making the neighborhood a better place, had no interest in using a digital tool to do so.
  • Many people worked very hard to make it this way, and don't want it to change.

After all, who built all those houses with garages as front doors, private back porches, and fenced in yards? That's a reality we have to face, even those who are online, some actually want the neighborhood to be this way. All you can do is communicate the benefits of the connected and collaborative vision you have for the neighborhood, then accept and respect theirs.
  • Everyone assumes you are selling something, even if it's not obvious what

While going door to door to invite people to the network provided a good excuse to talk to our neighbors and meet many people for the first time, that also might have been our biggest mistake. Without an existing repertoire, I put myself in their shoes, peaking through my half opened door at stranger trying to get me to sign up for something. I would naturally be skeptical and suspicious too.
  • Those who want a more vibrant neighborhood, are thirsty for it!

Despite the barriers we encountered, three households were anxious to get online and interacted through the platform for a couple months. One of whom was so excited they signed up just from the flier I left on the door when they weren't home. Those first messages exchanged on the site led to a great friendship. A flier really can work!
  • Even though our digital neighborhood failed, our physical neighborhood is better for it

Meaningful connections were made. Neighbors got invited over for dinner. Pets got fed when neighbors were out on vacation. A great tile contractor was recommended. When a house was burglarized, concerned neighbors came together.

As a testament to the lasting impact, some of this has even occurred after the plug got pulled on our digital neighborhood after failing to signup the minimum required neighbors.

Even if our neighborhood is not quite ready; now is increasingly becoming the right time and place for many to use Nextdoor as a tool to help turn their barren streets and locked doors into thriving neighborhoods.

I wrote a reflective post explaining why I began learning to code, but looking forward, a job at somewhere like Nextdoor that is changing the world for the better, is something I aspire towards.

At this point I'd be happy with an internship too.

Friday, February 08, 2013


Masterfully made. Fascinating personalities. Thought provoking subject.

For me, documentaries always raise more questions than answers.

But one things I am sure of: You can't put new wine into an old wineskin; you can't force a new idea into an old institution.

Learn Code the Hard Way

When I praised the merits of a textbook, I did not mean to invoke the commonly associated image of an overpriced stodgy physical book. Truly, a textbook need not have any of those three attributes.

A series of works which are the antithesis of that common definition is Learn Code the Hard Way.

Learn Code the Hardware is an amazing standard introduction to various programming languages. I found the basic methodology of "code first, explain second" to be effective for my learning style.

I first utilized Learn Python the Hard Way as a companion to Udacity courses CS 253 and CS 258, which both require a basic proficiency in Python.

And then, coming from a background in C++, I dove in to Learn C the Hard Way to prepare for a 300 level Operating Systems course at PSU. The other must read when learning C is the definitive, and refreshingly short, original manual by Kernighan and Ritchie: C Programming Language (2nd Edition) (also commonly known as K&R C).

Sunday, February 03, 2013

The Merits of Reading a Textbook

I got hooked on coding through engaging and interactive tools that are freely available. The feedback and gratification is instant which is valuable for overcoming the initial barrier of learning a new skill.

However, I quickly hit a ceiling.

When I began my formal Computer Science courses in a more complex language I initially thought I could get by with the lectures and hacking it together with Google searches along the way.

I quickly discovered the breadth of subject matter is so wide, the levels of understanding so divergent, and the variables for a specific learner are so great that you simply won't get very deep this way. At least not very quickly.

I am convinced that patiently chewing chapter by chapter, paragraph by paragraph, word by word through textbooks that were hand selected by my professors, explicitly for my level of knowledge gave me an accelerated edge over many of my peers who chose to disregard the text. This is also a barrier for someone hoping to learning to code on their own outside of a formal program.

That being said, there are still many horrible textbooks I wouldn't wish on my worst enemies. There is still something to be said for a textbook that is human, approachable, and well structured. Finding the right textbooks with content that is not too far out of reach is a challenge worth enduring.

Nothing beats the density and comprehensive nature of a textbook if you hope to drill a deep well of knowledge.

Make the time and do the reading.

Friday, February 01, 2013

The Angst of An Anakin Generation

Years before J.J. Abrams was pegged to direct the Star Wars sequels, he provided some thought provoking social commentary about the unique role of the first two trilogies to their respective generations:
“Obviously, [Anakin's] fall was inevitable and you learn that from the early films,” Abrams says. “You know it’s going to happen and watching it happen is tragic. What’s fascinating to me is that I grew up in a time when my friends related to Luke and now, my kids relate to Anakin. There is an interesting social comment there — that when I grew up the hero was an optimistic young neophyte who becomes this hero and the new generation’s hero is a strong-willed, ambitious and ultimately vilified protagonist who is misled and, for reasons of ego and heartbreak, literally becomes the very villain that my generation fought against.” - J.J. Abrams
It's ironic then that Malcolm David Kelley (Of "Walt" fame from Lost) captures this angst of the Anakin generation:

Lets hope the hero in the third trilogy is more redemptive, for humanities sake.

Tuesday, January 29, 2013

JavaScript: The Beginning

In my missions statement on Why I'm Learning to Code I stated that early on in my journey I began dabbling in JavaScript.

To be more specific, it all began through the insanely approachable and free interactive JavaScript lessons at Codecadamy. Codecademy was still a fresh start-up, posting new JavaScript courses every week. It was exactly what I needed at exactly the right time.

But I quickly got hungry for something meatier. I found the remarkably enjoyable Eloquent JavaScript: A Modern Introduction to Programming before finally cracking into the textbook JavaScript: The Definitive Guide.

By then I was enrolling part time as a Post-Bac for Computer Science courses at PSU. Thanks to Codecademy I was able to skip a couple introductory classes, saving half a year and a handful of cash.

Now, a year later, Codecademy has a full array of courses across various technologies. Between terms, I still log in for a crash course in a new skill.

Thursday, January 24, 2013

A Complete Introduction to Command Line

I once heard an author say that when you are a child you use a computer by looking at the pictures. When you grow up, you learn to read and write. Welcome to Computer Literacy 101. Now let's get to work.
- William E. Shotts, Jr
If you've made it past the initial confusion of the command line, then you are likely beginning to see it's value as a programmers tool and are ready to start wading towards the deep end. This is the comprehensive text that will take you there: The Linux Command Line: A Complete Introduction.

And don't let the title scare you away if you aren't committed to Linux. A lot will be the same and all the concepts are still relevant for any UNIX-like system (OSX, Solaris, BSD).

Shotts' has also contributed his hard work to the free knowledge of humanity by releasing it under a Creative Commons license. You can download the PDF if you are student short on cash or just want to kick the tires.

Monday, January 21, 2013

Micks Death Valley Pepper Jelly

If you like a sweet and spicy kick to just about any food you eat, then this is a must buy. We sampled Micks jelly at Seattle Pikes Place market and walked away with a bag full of jars. All were easily above average, very well balanced and full flavors.

But the Death Valley Pepper Jelly is out favorite. Delicious whether it's with crackers and cheese, added to bland canned vegetables before serving, with any cold veggie you'd eat with cream cheese, or my personal favorite; on a simple piece of buttered toast with a side of cottage cheese.

Moss, Every CS Graders Best Friend

This term I have the exciting opportunity to be a grader for my favorite class so far in my formal CS education. It was the final class in the main track teaching C++/Java/Object Oriented Design. It was affirming to spend time polishing the fundamentals of these languages because it gave me the opportunity to reflect in how much I have learned. And the design process for increasingly complicated programs is proving to be a very satisfying experience.

I jumped at the opportunity because, as a grader, I will be able to pour over a immense amount of code. It's fun to explores various solutions and perspectives to the same problem; while also expanding my own frame of reference for approaching a problem.

There is a dark side to grading code. Plagiarism is extremely tempting because of the convenience with which is can be done. A software engineer at work, who also has experience grading, directed me to a plagiarism detection tool that Stanford facilitates: Moss (Measure Of Software Similarity).

It scans code, and generates a report on similarities between any number of source files. The algorithm is more sophisticated then just a line by line text comparison. It's actually looking for patterns (renaming variables and functions would be a vain effort) and rules out content that is expected to be similar (such as a common library).

It allows me to spend more of my time giving thorough feedback to the genuine effort of many, because I don't have to spend as much time weeding out the plagiarism of a few.

I did run in to some issues getting my Moss user ID generated. The instructions are rather terse, and the first time I sent the request I received no response. After a few more attempts I learned the trick is to make sure the email is in plain text (If you copy and paste the html text from the site the request won't go through).

Saturday, January 19, 2013

Command Line Confusion

One of my earliest childhood memories about our computer was a treasure chest full of secret codes scrawled on post it notes. They were actually chains of command line entries so I could navigate DOS and play my favorite games while he was at work. But without these cryptic commands, an abyss stood between me and DuckTales: The Quest for Gold.

For many who grew up in the 90's and later, even those as myself who are predisposed with an interest in technology, the concept of the command line evokes some colorful adjectives: Intimidating, Confusing, Antiquated.

When my first Computer Science class at PSU threw me head first into the command line I began to question my life goals. I endured, and a year later, is still feels foreign.

But I am at least now compelled forward with the understanding that the command line is a necessary step if you hope to pull back the curtain that shrouds technology in magic.

LinuxCommand.org has a great introduction to the command line concept and terminology. Then I recommend heading over to the UNIX Tutorial for Beginners (University of Surrey). It is the best tutorial I have found that is practical in it's scope and pace, without quickly overwhelming a reader who is truly a beginner.

Working at the command line places you at an intimate proximity to the heart of a computer. Understanding that the commands used are merely concise programs that operates on data, equips you with a new perspective. You start to see the foundation and basic building blocks that all software is constructed upon. More importantly, you begin to imagine how you could build more sophisticated programs with those blocks on that same foundation.

Wednesday, January 16, 2013


Why I'm Learning to Code had many purposes. One was simply to open wide the floodgate of resources and reflections I have been accruing over the last year. I will be tagging post categories and eventually plan to aggregate a reference guide for others who might find themselves somewhere along the path I am on. 

That's an around about way of saying you can expect to see me posting more frequently, and specifically on the topic of computer programming.

My apologies, dear reader, if this is not your cup of tea. I hope you can endure this season of life with me. If not, stop back by in a year or two.

Saturday, January 12, 2013

Why I'm Learning to Code

2011 was a year of self discovery; defined by voracious reading. Once I hit my stride I was consuming an average of 2.5 books a week. I was intentionally reading widely with the hope of finding signposts to guide my long term career goals.

One of the more pivotal moments was reading The Information: A History, A Theory, A Flood. In it James Gleick argues that our relationship to information transforms the very nature of human consciousness.

Historically, not being able to read and write rendered you a mere user of the social systems dictated by those who wielded the system for their benefit. Increasingly so, the systems we depend on are being shrouded behind a technological layer of "magic" (Apple/Steve Jobs first touted the iPad as "Magical"). Not having a basic literacy of the reality behind this curtain of magic relegates power to the few who understand and wield the magic.

By the time I read Program or Be Programmed: Ten Commands for a Digital Age, the author Douglas Rushkoff was preaching to the choir: "Computer Programming is literacy for the 21st century."

I began learning JavaScript, hoping simply to peak through the curtain. I was propelled by the basic conviction that this is a necessary basic skill for understanding, interacting, and impacting the world. I didn't have a plan beyond that, but what happened next radically changed the trajectory of my life.

It started small as I moved past "hello world." I began to be conscious of what was happening as I progressed into conditional statements and control structures.

But first to understand what happened next, a quick flashback even further to 2005. My senior year in high school.

All through high school I had my sights set on engineering. I focused all my energy on math and science. But my mind felt horribly off balance, and I decided to focus at least equal energy into history and writing; subjects I had always easily achieved A's with little to no effort. Reading, researching, and writing an essay on Crime and Punishment lit up a part of me that had been dormant. The thrill had me furiously flipping through stacks of books and kept me chained to my keyboard, hours on end, with my heart racing. I had experienced the writer's high.

It was the realization that I had power in writing. After learning and synthesizing new ideas; every word choice can carry immense weight in the transmission of an emotion or an idea to the reader. It's a thrilling endeavor, balancing creativity and logic.

Still I continued engineering for the first two years of college, but finally gave in to my deeper interest in social sciences. I had begun a journey out of the safe pastures of hard sciences, into the mysterious wilderness of liberal arts and social sciences like foreign language, literature, and sociology. I discovered the creative drive, and began awakening to the profound and subtle beauties in art. However, the deeper I went in social sciences, the more I understood the complexity to even understand the problems problems much less having the tools to solve them. In this disillusioned and wandering state I completed my liberal arts education in 2010.

Towards the end of 2011, by the time I was dabbling deeper in JavaScript I saw how everything I love about writing prose was true for coding; the research, the design, the logic, the editing for exacting simplicity and efficient clarity. But even further, the power to build tools.

In January of 2012 I began the year as if training for a marathon. I narrowed my focus and furiously launched into a holistic computer science education; a combination of home-brewed self driven learning and formal academics at Portland State University.

So 2013 marks the beginning of my sprint towards the intersection of technology and liberal arts.