Inspiration

Whenever I hear Hans Zimmers' Day One in my play-list, I am unsurprisingly reminded of the movie Interstellar. More precisely, however, reminds me teaser trailer from a year earlier. If you have a moment, give it a watch (embedded video below).

Chuck Yaegar breaking the sound barrier in the Bell X-1, Alan Shepard launching into space on the Freedom 7 Mercury rocket, the successful launch of the Gemini 6 (after failed previous attempts), the crew of Apollo 11 ascending the launchpad, the ultimate moon landing and Walter Cronkite emotionally reacting to it are among the cut footage of the clip. These great moments are contrasted with the final mission of Space Shuttle STS-135 and the idea that maybe we have lost our way.

In pitch perfect delivery, Matthew McConaughey exhorts us, "Perhaps we have forgotten that we are still pioneers, that we have barely begun, and that our greatest accomplishments cannot be behind us, but our destiny lies above us."

Think about that as you prepare for your work today.

Intersteller Teaser Trailer


Year in Review

About to tick off another year and head into 2015.

Highlights for 2014 (in bulleted list form because I am lazy) At least what I can remember.

Footnote: Just switched the blog over from using nanoc to middleman. Instead of hosting on Amazon S3, I am now using GitHub pages. I am now running four sites this way.


Things to do

I use a Mac program called OmniFocus to organize what I need to get done. Some weeks I'm better than others. When you get behind the ball, an easy trap to fall into is thinking you must get everything done at any cost. This is a mistake. A to do list is one of personal possibilities. It's a tool that helps you mindfully shape the parts of your future that you have control over rather than letting it arrive completely unannounced.

There is no universally best way to systematically schedule tasks. Don't worry. You will get 90% of the benefit just by knowing what the tasks are and accept the fact that you can't do everything. Don't give up. Keep coming back, keep prioritizing, and occasionally review even the less important tasks. Sometimes what might seem impossible can actually be done if you keep your subconscious working on it.


Social Learning

Humans are wired to be social. When I was studying Japanese in college, we needed to learn hundreds (perhaps thousands) of vocabulary words, kanji, and grammar rules. I would carry lists and flash cards around with me everywhere I went and cram whenever I could. (No smart phones back then.)

Most of the time I studied by myself but I noticed something astonishing. When I paired with someone and studied, my learning rate and retention would be significantly better than my solo sessions. Part of the reason would be that the person quizzing me would go back to the card that I missed or had trouble after an appropriate amount of time. (The fancy name for this is "spaced repetition.") But there was something else at play too. When I would have trouble with a question, maybe because I felt slightly embarrassed, the next time I was more likely to get that question right. The material would just seem to stick faster and I would remember it longer. I am sure Akemi would tell me that it all has to do with my amygdala working overtime. (Aside: Certainly there must be actual data on this phenomenon. If you know of any please tweet me @rayfix or send an email to rayfix @ gmail com).

Saren, a fellow organizer from the Orange County iOS group is Kickstarting an app called Kanjilicious. It rose out of the need to help his six year old son, Genji, and himself learn the hiragana, katakana, and kanji. If you watch the video you will see he is doing a lot of things right. Given my above observations I think his plan of gamification and adding a social play component is right on the mark. It would be great for him to realize this dream. Please give him your support if you can.

The whole idea of social learning and productivity, whether it be pair programming, attending a meetup or conference has enormous application. I hope to explore this in greater detail in future blog posts. But if I had to some up my thinking in one rule, it would be: If you really want to learn something, find a community.


Swift Probability

At today's OC iOS Breakfast coding session I decided to build simple Swift framework that helps compute precise probabilities. I had been thinking about this for a while and I wanted to see what it would look like in Swift.

As John Gruber and Guy English lament on The Talk Show, languages with operator overloading can be abused. However, if you use your overloads for doing actual math operations on well defined types, the results can be quite elegant.

I wanted a some simple methods that would let me compute, for example, the odds of drawing an ace of diamonds, in a poker hand. The odds are 5/52. Here is a unit test using the framework available on Github that shows how this can be computed.


Open Swift for Education

Last year, An Hour of Code took the country by storm producing over 1.8 billion lines of code from almost 38 million participants. The campaign video begins with the famous quote by the late Steve Jobs, "Everbody in this country should learn how to program a computer… because it teaches you how to think." He understood that with the power of technology, one could literally control billions of dollars of infrastructure and change the world.

Since it's founding Apple, Inc. has long been fierce proponents of tech and education stating that a dedication to learning has always been part of their DNA. Not long ago, Steve Jobs offered to give OSX to the one laptop per child project, but was turned down because the founders were determined to keep the platform completely open and not locked to a vendor. (Sadly, the project floundered, and in a last ditch effort, offered Windows XP as an install option.) The OLPC project is gone and widely considered a failure. While it was great to see technology in the hands of underprivileged children in the third world, it really needed the best tech that the world had to offer. Not, as it was perceived by many, an inferior, toy product.

Last week Apple held their World Wide Developer Conference (WWDC) with the tag line "Write the Code. Change the World." This seems like it could be a slogan straight from the Hour of Code site. They announced, among many other initiatives, Swift, a new, high performance, interactive programming language. It is the real deal. This language is purported to have been development from four years by more more language experts than I can list.

Despite being an industrial strength, full featured language, Swift is fun and interactive to use. The syntax is built for minimal typing and Xcode has a feature called Playgrounds that let you readily visualize what your code is doing. You can create interactive textbook-like documentation that lets you experiment with code right inline. This seems ideal for education. Yet, in just the same way OLPC rejected OSX, I worry that Swift will miss out on wide scale adoption in education. Chris Lattner let us know that Apple has not yet taken a position on whether Swift will be available on non-Mac platforms. It seems like they could strike a balance where the libraries (UIKit, Foundation, etc) were not exposed but the language itself was. Tomorrow night I will be speaking at the Orange County iOS meetup about news from WWDC and iOS8. I hope to share my thoughts on this subject and also brainstorm with educators on how we might convince Apple that opening up Swift would a big win for everyone.

Once again, Apple has the opportunity to write another verse that changes the world. I can't help but wonder, what their verse will be? :)


Swift at WWDC

Last week I was lucky enough to attend Apple's WWDC. The most exciting development was the announcement of the Swift programming language. Suddenly the conference tag line, "Write the code. Change the world." made sense. Although they billed it as re-imagination of Objective-C without the baggage of C, it is fundamentally much more than that. Swift is a world changing development and it has the potential to be something even bigger than Apple, if they allow it.

Me at WWDC

Over the last several years, Apple had been stockpiling C++ language experts whose work I very much admire. I can't imagine how hard it must have been to keep this project in secret for all of these years and I am sure they are glad it has finally been announced to the world.

Strong typing, generics, type inference, closures, optionals, interactivity, efficiency, predictability, safety. These are all great features. Bjarne Stroustrup, when asked why he created C++ said that it was to create a language in which you could make an abstraction but still afford it. For all of the greatness of C++, it does have its wrinkles brought on by time and enslaved to compatibility requirements of C and older versions of itself.

Like C++, Swift too paves the way to affordable abstractions. In a future where we measure performance in terms of operations per watt, Swift will do very well. Attempts have been made to make ruby faster (and I love ruby) but the language definition fundamentally constrains how fast it can be. It is difficult to optimize a number that might dynamically morph into a string.

Swift isn't afraid to break with the past. For example, one of my biggest complaints with Objective-C (other than manual reference counting in the pre-ARC days) was the handing of passing messages through nil. Although this was touted as a strength, it always seemed wrong to me. Many times it has been a source of strange errors. Swift goes pretty much in the other direction. Although with the ?. chaining syntax, it is still possible to parsimoniously express the intent of expecting nil objects explicitly.

For all its strengths the language is expected to evolve significantly over the next few months. I am looking forward to seeing how access control is implemented and how frameworks that don't expose implementation can be shared. Java has a solution for this and Swift will likely follow a similar path. What the Swift team was able to accomplish for WWDC was amazing and I looking forward to what upcoming developments await.

In the coming days I will be learning much more about Swift as well as teaching others what I learn. Definitely at the Saturday meetup, and perhaps a little bit here.


The Power of Writing

Today's Google doodle honors Rachel Louise Carson on her 107th posthumous birthday. Rachel Carson changed the way the world thought about man's relationship the environment though her writing. Her book, Silent Spring ushered in a sea-change in America, kick-starting the environmental movement, changing the national pesticide policy, and leading to the ban on DDT as a pesticide.

Go into any supermarket today and witness the ever expanding, vast offering of organics. The demand for these products and the awareness of why we should desire them loudly echoes forth from Silent Spring. Fifty years after her passing it is something still worth celebrating. Such is the power of writing.

Rachel Carson and Cat


The Importance of Regular Practice

By far, regular practice is the most important thing you can do to master a skill. This is true for learning a language, building a business, acquiring a skill, or achieving pretty much any desired goal.

To learn English, instructor Tetsuya Yasukouchi advises his students to study everyday. When asked for how long, he replies, "30 seconds." In truth, he hopes his students study for an hour or more but doesn't advise this high threshold because it leads to failure. On the other hand, even the busiest person has the chance to commit 30 seconds. If that 30 seconds ends up turning into a couple of minutes, or even a couple of hours it is even better.

Mastery of a skill seems to follows something like a logistic curve where at first progress is very slow and requires concentrated effort. At a certain point, however, improvement comes rapidly and even a small amount of effort pays dividends. Finally, that last little bit that gets one to complete mastery gets hard again, and can even take a lifetime.

For most things we find ourself at the beginning of the curve. This is why the 30 second rule makes sense, especially in this first, fragile phase of learning where effort doesn't seem to be paying off. Steady regular practice might be the trick that gets us to that second all important phase of skill acquisition.

It would be interesting to do an experiment in which you learned something two different ways. First, sit down for 50 minutes and try to learn the material. Second, spend 10 minutes a day for five days studying the material. My own experience tells me that the later would be much more effective in re something long term.



Hello, World

Hello, world. This is my new blog that I plan to post to semi-regularly. But I must warn you, chances are this blog is not for you as I am creating it for nearly all selfish reasons. It is a place to sort out my thoughts, scratch an itch, record important happenings, and to improve my communication skills. Topics will range from the highly technical (C++, Objective-C, ruby, electronics, physics) to the totally mundane.

I decided to hack this thing together using a static site generator called nanoc and host it using Amazon S3. As you can see, it is really basic at the moment, and hopefully that will improve over time. Right now I am enjoying the technical aspects of putting it together as much as I am writing it.

Actual entries using Markdown for the most part. Back in the 90s a very-wise colleague told me that the only file format that lasts is plain old, human-readable text. It is a sentiment that I hear echoed again and again. Markdown strikes a deft balance between the needs of formatting and human readability.

I will have a lot to say about later on.