Category Archives: Pragmatism

Optimizing On Time

Time is irretrievable once it is gone. Your goal should be to reduce the time your users must spend. This doesn’t just mean increasing output on the backend, but maximizing data throughput on the interface.

We all take time for granted, and even those who don’t tend to focus on our individual time-costs. As creators, though, we should also look at the time-cost of our products because if you think about it the math shows that to be even more important. Time is a limited resource, variable to perception, but limited to roughly 24 hours available to every person.

To break down my point, if you can reduce the time a person has to spend with your product, that effect is multiplied for all your users. This multiplication effect makes it quickly achievable to save time, in the global sense, over a set of uses. You might lose an hour or two, but assuming frequent enough use, or enough users, there is a possibility for that time to be reclaimed. Humans are constantly working with technology and further progressing, to achieve this goal; even if it isn’t the direct goal.

Automation means that you can remove a users usage at some scale, possibly even fully. If a user does something every day, and it takes 2 minutes, that adds up to an hour over the course of a month. If you can remove the process completely, you just saved the person 12 hours a year.

For example, I started buying similar sets of clothes, black t’s and cargo pants. I only have to think about what to wear maybe once or twice a month. I saved about 90 seconds a day, in getting dressed. I removed the selection process, so that the choice became automatic.

At scale though, with lots of people using it, even a second, or a few milliseconds can add up. If you cut 0.1 second out of a loading time, that happens 5 times per user a day, you save them 15 seconds a month. If you implemented this in an hour, and it was only you, it would take you 20 years to reclaim that hour. If you had 100 users, it would only take 72 days. So even a very small scale, the global availability of time can be increased.

You can’t just tweak the backend though. Eventually, the time-cost won’t work out mathematically to spend more time trying to get more data across the same channels. You can still manage this by increase the capacity you present, if you do it logically, this is why designers are important. An engineer can get stuff done, but they aren’t always focused on the cost of time for a user. Designers should focus on the user-first, to help increase the fluidity, and thus remove hidden time-costs.

Another option for modifying the time-cost is in condensing the data, in a loss-less manner. Think about he way we use compressors to shrink the data we send over the wire. If we can shrink the details down without losing the context; still conveying the message. We can take huge steps in create a total time-value, vastly greater.

These are the goals that I feel should be focused on. And I do not disregard the fact that the tendencies are when time is saved, to spend it on even more information. This could be said to be good, or bad. I feel it’s negative, but that requires a additional capacity to prevent continued indulgence. That’s a topic for another time.

What Is Your Narrative

I’ve long held a set of narratives, stories that I tell. I sometimes feel bad about using specific ones, and have admitted previously to the fraud that I am. It’s by lies of omission or using a selective narrative, always honest. Here are all the major narratives that I tell regarding college.

I’ve been out of school for 4 years now, and the question that often comes up is what happened. This here is where the story starts. Depending on who it is that I am speaking, and other context. There are several reasons, each with their own story to detail. I could discuss all of them, but it’s often in idle banter, so it would be overkill. In the end, I normally resort to only one or two.

The most common story is that my back went out the night before finals. While it’s the truth, and it’s the simplest to discuss, I don’t prefer it. I don’t like it because it generates sympathy, which is nice, but it always makes me feel like I’m lying.

Another story, that is common is that I decided the system is broken. This one obviously isn’t simple to explain, but I can just spit out a line or two about the system, as almost everyone agrees it’s broken. This is also the honest truth, I had saw the precursors of the 2008 financial collapse and wanted to get a job as soon as possible to shelter myself and family.

The reason I wanted to help my family is the 3rd story, that I rarely discuss. I’ve mentioned it only once or twice. My mom had quit her job so that she could help in taking care of my great-grandparents, and after their passing at the beginning of 2006, had struggled to find another position for 2 years. This weighed on my mind heavily, and is partially the reason I had such a negative reaction to the ridiculousness of the academic system.

Another story is that I had a hard time adapting, because I was tossed into the deep end, even after trying to explain this would be negative. During course registration, they placed me in Calculus, and I had asked for remediation in Trig, as I had 0 experience with Trigonometric identities after being fucked around with in high school. Upon my asking, I was told that my standardized test scores in mathematics were too high for me to be placed in remediation. Of course, that wasn’t their last blunder, they stuck me in a general Calculus program, that moved more slowly than that of my college and with a professor outside of my college. So any discussions I had with my academic adviser resulted in confusion.

All the while I was dealing with a rather inept teacher, in a course without recitation and lacking the same pace as the engineering program. My first 4 weeks I spent 60+ hours a week trying to brute force my way through that one course. The last time I went to a scheduled course, was during the second semester, when I asked a Trig question to the professor of the remedial Calculus teacher and he responded, “You don’t know Trig, then why are you here?” I don’t blame him, and explained the registration situation, but didn’t like being attacked for something I knew was wrong but couldn’t get changed. I still respect him, and he was one of the best professors I had while in school. After that interaction I stopped attending my courses. I started dropping in freely to other courses that seemed more interesting or that my friends were attending so that we had something else to discuss outside our general topics.

Lastly, and another one that I rarely mention, definitely not outside of family and friends. I partied a bit too much to try and help cope with all the other stress I was dealing with. It helped me feel better, but it didn’t help in the long run, there was at least a few times where I was too hungover at exams in the middle of the week. There are plenty of individual stories I have that I could share, but in general this is it.

While each story is true, they also each evoke different responses. Some result in sympathy, others questions, and some with just a shrug and now you know better. It’s up to you to choose. Ultimately, I’m responsible for every choice I made, but not all of them were by choice or even mine.

Every event has more than one perspective, and sometimes an individual has more than one thread that they can weave their cloth. The narrative of our fate is presented in whatever way that we choose to narrate it. Stories abound, but it’s up to you to choose which you want to tell.

Learn Along The Way

Over the past month and a half, I’ve been working on a new project, one which is a composition of several smaller projects. One thing I’ve noticed is that I’ve learned more in that month and a half, than I have in quite a while, out of a necessity to fulfill my wants. Some of the things I’ve learned, or are learning, I had previously avoided do to my distaste for having to deal with them; now that I understand them, I actually try to help others get on board. OAuth is a good example, I’ve been avoiding this for over two years, just because I thought it was a messy annoyance, but now that I’ve implemented it in several libraries, I actually don’t mind.

The true inspiration for this post though, was actually a compounding of thoughts from various things I’ve read recently, and thinking upon things I’ve read in the past. The recent thing that really kicked it off was a presentation by the people at Skillshare, embedded below. While looking through it, I had an epiphany, “Learning shouldn’t be the goal, it should just happen naturally on your way to some practical goal, with real results.” Maybe it was because I’ve been steeped in such things and that I have a distaste for the ‘general’ waste that is higher education, but the thought really struck a chord.

“Today the pinnacle of education is getting into college.” – Skillshare Presentation, Slide 8

That is really my issue with higher education. Once you get in, there are many ways to subvert the system, so what good is it. The only real boundary presented is making that initial pass through the gates. Once there, it’s more business as usual, where you can skim your way through the majority of it, most of it is a waste of time. I find practical learning to be much more enthralling, and it can be done on a just in time basis.

Why waste 4 years learning what will be mostly stale by the time you leave; if you can learn it as you go, while it’s still fresh? Because, everyone says that college is the key to being successful. Sounds a whole lot like the story of the fisherman and the businessman, to me.  If you’re already doing something, you’ll gradually learn how to do it better, but they ask you to pause what you’re doing for a few years, and do it and other things so that you can be better.

So be practical, focus on what you want, and when you have trouble, focus on understanding the issues you’re having. Understanding is way better than rote memorization. Understanding allows you to expand on the concept, in ways that rote memorization wouldn’t allow. If you have too much trouble find a mentor, and prove that you’re willing to try. In the end, all that should really matter, is if you can actually do what you say you can do. That’s it. So learn along the way, that way you have not just your education, but lots of other things to show for it.

The Future Of Search Can Be Found In Dungeon

Earlier today, I made a comment asking, “Could it be that Zork* is the search of future,” then deleted it. Louis Gray ended up calling me out on the deletion, which was for no real purpose other than not wanting to fully explain myself. I might as well lay out my thoughts on what I meant, lest I forget it.

A problem with search currently, is that we’re being trained to speak to the engine, with a penalty to using regular phrases as your query strings. Various terms are stripped from the query strings, and you end up with items that aren’t relevant or hardly related, when you just haphazardly place your key terms in.  This is an issue that I find frustrating; I often end up banging around for hours on end trying to get proper query terms to bring me the results I’m looking for. Search is simply hit or miss, even for the new guys, such as Blekko and DuckDuckGo, trying to beat the incumbent which is Google. The new guys have better quality, but it does come at a cost of having special syntax, Blekko with the slash modifiers and DuckDuckGo with the bang modifiers.

Why don’t we have a search system that uses a more intricate text parser, to parse the queries. It’s obvious that we have the technology, just look at how amazing the parser for Zork and other text-based adventure games were. Why can’t we use grammar that we are used to, and let the software parse the elements out, where necessary? Simply put, I’ll trade off the ability for instantaneous results if you provide a simple text parser that makes it easier for me to input my queries in a more natural form.

Let me put in something like one of these:

  • “Louis Gray’s latest post about Friendfeed.”
  • “Most recent blog post from Louis Gray about Friendfeed.”
  • “Latest blog post on louisgray.com containing Friendfeed.”

All of those should return similar results, but they all share a common set of elements, that humans often have to convert into their queries if they want to get a valuable response. A decent Google query for this would look like, {site:”louisgray.com” Friendfeed}, but this requires that you also select an option outside of the query box, to narrow it to most recent. All of those queries I would like to use return very noisey results, even the modified query is noisy, and is more closely related to “containing” than about.

My question is why don’t we have a text parser, probably client-side, that helps us out in getting the content we want? If you look at my preferred queries they break down in to relative elements.

  • A source. Signified by ”s,’ ‘from,’ and ‘on’ in the relative examples. They all signify that your looking for something from Louis Gray, in some form.
  • A temporal modifier. Signified by “‘latest’ and ‘most recent,’ in the examples. Signifies that the period is a significant element of your query.
  • A  source modifier. Signified by the ‘post’ and ‘blog post, in the examples; easily could be Tweet, Status, Image, to search for.
  • A search method. Signified by ‘about,’ ‘containing,’ or ‘with.’ These signify how the elements that follow should be interpreted.
  • A set of query elements. In my example I only used Friendfeed, but it is what follows the search method signifier.
  • A system of set logic. Using ‘and,’ ‘or,’ or ‘commas,’ as a way to modify the way the sources and queries are handled.

Why aren’t we using this now? Sure, some of what I suggest is harder to manage, because it requires the ability to know who Louis Gray is, and what sources he has, but this only requires having a somewhat decent image of his set of profiles. Google happens to have just that, as do many other aggregating services, but Google has the power here, being a search provider. I don’t know if it will enhance the results we receiver from such services, but wouldn’t it be wonderful to talk to the system in a way that is at least halfway normal, and get decent results even without a solidly designed query.

Search providers please give us a half decent text parser, even if it’s only as advanced as that of the 70’s. Hell, it’s already common enough to see simply text parsers that pull hashtags, and @user strings, and converts them to links. Why not something that takes a more English approach to the query, and does the conversion for us to get the perfect query strings, that the system wants?

“What a (ahem!) strange idea!”

Notes:

*= Zork’s original title after completion was Dungeon, but a trademark violation saw that it was changed back.

The Simple Styleguide I Follow

I was asked to provide an overview of a project that I was working on and I ended up providing a style guide in the overview documents and thought it was worth sharing. It’s in no way all encompassing, but it provides a good core for self documenting code, in my opinion.

Simple Styleguide
Naming Conventions
-   Files
   -   Always lowercase
   -   Words seperated by an underscore
   -   Controllers
       -   Named after the functional  area they are meant to add
   -   Models
       -   Named after the table they access in the database
       -   Tagged with a _model to denote the file as a model
   -   Views
       -   Named after the controller which requires that views
       -   At most 1 primary view per controller
       -   You can provide a sectioned views using the sections folder
       -   Sections should be stored in a folder named after the primary view
           -   e.g. /views/sections/{primary view name}/logged_in.*
       -   Tagged with a _view to denote the file as a view

-   Classes are capitalized version of file name

-   Function/Method
    -   Words seperated by an underscore
    -   Generally use a verb at the beginning to describe functionality

-   Variables
    -   Normally named after the field they access
    -   Create model objects as m_{model name}

Spacing
-   Indenting
    -   Uses spaces instead of tabs, 2 or 4 spaces
    -   Classes
        -   Brackets start on next line at the same level as the class
        -   Brackets end on the same level as the class
    -   Functions
        -   Brackets start on the next line at the same level as the function
        -   Brackets end on the same level as the class
        -   Add a new line to split functions up for readability purposes
    -   Control Blocks
        -   Brackets start on same line as the beginning of the block
        -   Provide one space between the end of the logic and the bracket
        -   Brackets end on the same level the control block

Extra Bits
-   Functions that have a similar focus should be close to each other