My Place

Simple thoughts

Great Tools: Instapaper

The short, go here and buy instapaper

Instapaper, my number one app

Instapaper is a simple concept that is an amazing product. It takes webpages, archives them for later and redisplays them in a easily read format. Pretty much strips all that useless HTML crap and leave you with images that make sense and the text. I can only assume it works by magic, since it generally will pick up the good stuff and leave the bad stuff. For example, here is a recent article I told instapaper that I wanted to read later.

Original

The website is actually pretty clean, nothing really over the top and everything seems tasteful. But now looks whats happens when it goes through instapaper.

Instapapered

Super clean and uncluttered.

This app is the most important app on any iOS device I own. If I see something remotely interesting on my iPhone, iPad or work/home computers the article is sent to instapaper. Within a minute I have a nicely formatted item to read. I don’t even really read most websites anymore, I read a few sentences and if it looks interesting I know I can watch it at my leisure later.

Simple, effective and cheap. I send Marco Arment $3 every so often on the subscription plan just because I feel that this is such an awesome utility. If you have an iOS device you owe it to yourself to buy this app and use it for a week.

How do I find articles?

For those who don’t want to install bookmarklets, then instapaper has a built in browser with a dedicated read later button plus it has an awesome list where some excellent articles are curated, I especially like the long read option. In the past few weeks I have read some excellent before bed reading on a pair of twenty something international arms dealers and a collection of articles on the nuclear disaster in Japan.

If I could read everything through instapaper I would.

Keyboards

Keyboards

I love keyboards. I have to many right now and am thinking of buying a KBC Poker at some point. Even though I really don’t need another one, but the thought of the minimalist layout and the fact at home I have a large BlackWidow which is a large keyboard, at least compared to the Filco Tenkeyless I use at work. The Filco is brown cherry switches which make a more hollow sound, whereas the BlackWidow is blues and has a very clicky noise. I am not sure which I like better, I like the Filco overall better than the black widow, but the build quality on it is better.

Let us meet the keyboards

Note: All credit given to respective sites

Here is the KBC Poker – I want this, I will probably buy one and then unload it if I don’t want it.

KBC Poker

Now for my current favorite and champion, the Filco Tenkeyless

Filco TenkeyLess

Then the indestructible unicomp, this thing will outlast the others combined.

Unicomp

Finally my at home daily driver, the BlackWidow

BlackWidow

Why I switched from membrane dome?

99.99% of all home computers have a membrane keyboard, these are cheap keyboards that use a pcb and when the rubber membrane makes contact it closes a tiny gap. At one point I used a scissor switch keyboard but one of the keys went bad and I tried to fix it and it never felt right after that.

So then I found a website, GeekHack and became hooked, within a month I had almost $300 worth of keyboards. Plus on top of that I had an accumulation of Apple keyboards I have collected over the years. I found that I disliked membrane pads, because they did’t feel as smooth, I like the thud/click has my hands fly over the keyboard in emacs, it is something magical.

What is a mechanical keyboard?

Whereas mechanicals use a variety of methods, the two most common are cherry switches and buckling springs. I have a Unicomp that I used for several years but I like the lighter touch of the cherry springs. A great little overview is on overclock.net.

A mechanical keyboard will last longer than any mass produced membrane keyboard, it will allow most people to type quicker, and generally has better quality. That being said it is not for everyone, some people enjoy membranes and almost every membrane is quieter than a mechanical. Also most mechanicals do not come with media features, wireless and other options that might be a necessity.

Finally

Find a mechanical keyboard and give it a try, see what you think. You may be surprised. I plan on writing individual reviews as time goes on. I particularly like using the unicomp on the iPad, don’t ask me why, I think it is the absurdity of it all.

Also you can find all you need to know at geekhack

Great Tools: Slickrun the Windows Launcher

Slickrun – The Windows Launcher

Part of my great tools series is a little launcher called Slickrun. The quick and short is This is the simplest tool that could get the job done There are other tools that have reams of features and refined interfaces, Colibri and Launchy are examples of two. Also on OSX I use Alfred which I find indispensable, even though it shares more with launchy than Slickrun.

What is slickrun?

Slickrun is a simple launcher that associates a command with a short text. You invoke it by hitting a keyboard combination, in my case alt+space. Then type in a command and boom an application is there waiting to be used. Slickrun has replaced my Windows start button I no longer use the Windows Start button on a daily basis. I use slickrun.

Why is slickrun better than the alternatives?

Any of the launchers are pretty good and for the most part an improvement over the stock windows experience. This one though is simple, unobtrusive, fast to load and slow to anger. Written in delphi it has a bit of a dated look, but then again I never really see Slickrun. Its a small blue band that does my bidding and then I have it set to autohide, I never notice it, A blue blip that does my bidding is what slickrun is. The other alternatives always seemed too slow and obtrusive for what I wanted for a windows launcher.

I have used Enzo, Colibri and Launchy and yet my needs were small and Slickrun did it with minimal fuss, almost no overhead and with killer speed. In short, Slickrun does one thing, but does it well I tend to look for apps that do one thing and do it well.

Go grab slickrun and give it a try, once you install it the less you notice the better of a job it is doing.

On a total aside I am writing this in Elements on my iPad using a Unicomp Customizer (Model M clone) that weighs more and is larger than the iPad. My how the world turns.

Emacs - the Editor That Can

One Text Editor to Rule Them All

Stream of thought about emacs

I love emacs. I loathe it at times. I never could get used to Vim. All my computers now remap caps lock to control. Org mode is amazing.  Gar, why is it written in lisp. Can I write something in python. I wish it was as small as vim.

Preface up front, I am no emacs guru most of my .emacs is stolen from people wiser than myself.

emacs for those not in the know

emacs is one of the holy two text editors. Vim being the other. Both are extremely capable editors, every programmer should know one of them, to be honest I don’t care which. The history of emacs is best documented here. emacs could best be described as an archaic editor that offers unlimited customization if you spend time with emacs. At the heart emacs is a text manipulator, beyond that it can answer email, read newsgroups, play tetris and act as a shell plus a thousand other options. If you have read my other posts you will know I love small tools that do one thing exceedingly well, that are simple and to the point. emacs is the exact opposite of this, I will try to explain why I love emacs.

Why do I think every programmer needs to know emacs (vim)?

A programmers tool for putting ideas into action is the lowly text editor. Everything we do centers around entering text and having a computer process that and help someone do something. But what of IDEs? asks the peanut gallery. I love IDEs, software would be difficult without top notch IDEs like Eclipse and VS, but every programmer needs to have a secret weapon in the closet. Something powerful, something emacs.

  • emacs is cross platform, via usb drive/dropbox I can have a live emacs ready to go wherever I go. The commands are all the same and it all looks the same. Everyone needs a stable text editor.
  • emacs is stable, emacs has been around a long time, it also has some of the worlds best developers working on it. The core code is solid, this is a program you can leave running for months without blinking an eye, I mean it is practically an OS anyways! 
  • emacs is customizable, if there is some software more customizable than emacs I don’t know what it is. Granted most people just cut and paste bits from other people but you can change the very foundations of emacs with knowing just a bit of lisp and how emacs functions.
  • emacs will go where no files have gone before, need to open enormous files. emacs is up to the task. Need to work with python, xml, c#, java or just good ole txt. emacs can handle that.
  • emacs is free of distraction. The actual ui is very simple. Some text buffers and then a command buffer at the bottom. 

All that being said I know plenty of good, perhaps great programmers who never touch emacs(vim). emacs is not for everyone, it has plenty of faults, and speaking of faults.

emacs, the archaic

Ever get the feeling that a program is secretly trying to kill you? emacs sometimes likes to do that. For instance emacs should just pop up and say, oh I notice you have not remapped the caps lock key, let me fix that for you before your pinky falls off. If you haven’t remapped that key do so now SharpKeys for windows or Keyboard Options for OSX. Now thats better, now you don’t have to stretch that pinky all the way down there. Feels better doesn’t it? Now go read an article on emacs, download some extensions, include them in your emacs. Put in some random lisp command that you got from Paul Graham. Now boom something awesome happens and you don’t really know why or how, and if you try to look at the lisp your head spins because they went way over the qouta on parantheses.

emacs is archaic and has a lot of history that no longer seems pertinent. That being said it has one mode that is more awesome than awesomo.

org mode

Just go read about it here. I will wait. This is one of the best tools available. I use org mode more in emacs than text mode. It is that important to me. My coworkers think it is mystical how I can create an html report detailing what I have done and when I completed it on the fly. Then I show them the deep linking and nesting and all the other awesome things org mode can do. I can see the envy in their eyes, the same way they envy my filco ten keyless keyboard. Yet when I show them emacs they cringe and decide to find other ways.

Are you interested yet?

If you try emacs and hate it then try vim. If you hate both then give emacs a try a few months down the road. Fiddle with it, try to do some simple text editing read the tutorial. I spent months maybe a year in an on and off relationship with emacs. I hated it with a passion but I read how people loved it. Then I got OSX and started doing some development via ssh logging into the OSX box and writing python or objective-c and needed a command line text editor. So I jumped in and have only peeked back once or twice. All the while letting my fingers remember archaic commands.

Android - Thoughts on Development

At my workplace, HCHB, we are rewriting our product for Android since windows mobile 6.5 is pretty much dead and even finding hardware is becoming an increasingly difficult task. So 8 months ago we jumped into the world of java, android and eclipse. The shift from c++ to java has been nothing but smiles and unicorns. We will have a 1/3 less code. Plus the code is properly layered and more readable, but that is mainly from the benefits of starting with a good framework and not coding things in the ui layer like the winmo product is.

That being said I have some thoughts on android programming concepts.

XML layout is pure win

This is awesome, and a very powerful tool once you get the hang of it. Granted the eclipse plugin to view your layout is useless but its easy enough to look at a layout on the device. The whole R resource thing is mostly great, though when you have something like 200 screens it is cumbersome and you have to practice good naming convention.

Intents are great for small apps, killer (in a bad way) for large ones

If you are not familiar with the android way, when you enter a new screen information is passed along via intents and when you exit it can be passed back via intents. The same concept is also used when you rotate the screen. This means the UI really drives the creation and destruction of the business logic and you generally have to keep the cached object in the intent or in your sqlite instances.

For most small apps this works great, for ours, we chose a different road

The Long Road – The path we took

Our product has to maintain backward compatibility with the winmo code at a database layer so we couldn’t easily use sqlite to store state, and it needed to behave semi-close to winmo to make coding quicker. Also we have grandiose plans to implement this on other platforms that may never happen. Plus we didn’t really like the way the stock android handles everything so…

Everything hangs off the Application

The application is a built in singleton for every android application, we subclass this and all of our business logic hangs off of this application object in some form of another. How does this all work? Whenever a parent kicks off a child screen, we create what we call presenter objects which determine the flow of business logic to the actual screen. We put the hash code of the child presenter into the child views intent, the child presenter is then thrown into a list. Once the child view is created it grabs the hash code out of the intent, looks it up in the global list and then marries itself to the presenter via interfaces.

Presenter and View Marriage

This way we keep the presenter/business logic separate from the ui. We can also better support different screens, for instance on a Droid we generally show a list, then tapping on a item takes you to a details screen. So we have a presenter that handles phone type devices with a business object handling validation, moving the data to and from the database etc. On a tablet though we might want to integrate the list and details onto the same screen. So we just right a new presenter that uses the same underlying business objects as the first.

Once the child view is closed we pass the child presenter to the parent presenter in a child finished method, then divorce the two so garbage collection can take place.

What does this all buy us?

  • We get well seperated logic, the Views handle their internal state. Controls keep track of themselves and redraw on views.
  • In our case the business logic is actually on a different thread so we can do long running queries without adversely impacting the gui.
  • We can theoretically support multiple platforms.
  • The application is pretty easy to unit test and we try to write it in a way that makes it easy. Though we do not unit test every corner we generally unit test the tough stuff, crosses fingers will unit test the other things when we get the time.

On Writing About Great Tools

Every week I intend to write about one great tool I use on a daily basic. It can be a gadget, software or something incredibly simple.

Great Tools: Alpine an Email Client

Alpine

Preamble

This is Alpine my email client of choice. A few years ago my work computer was a P4 with 2 gigs of ram. Whenever I opened Outlook with Visual Studio open plus a web browser and all the other cruft that is open daily I would hear the grinding of my hard drive and know my computer was about slow down. Outlook was eating roughly 60-100 megs of memory loading all the various things it does, and on top of that I did not like the interface.

That triggered a quest to find a light email client that I could live with. I tried the emacs client, but it was to arcane even for emacs. I tried sylpheed, thunderbird and claws. None of them scratched an itch. Then I happened to find Alpine, and it changed how I handle email.

What is the secret of this app? That each screen focuses on one thing and one thing only. You don’t get a 3 pane layout. You see the list of messages and have to view them to see the text, but you get the whole real estate when you do so. Every screen is razor sharp and focused on doing whatever it needs to do without muddying the waters. That is the secret.

But first the bad

This is a keyboard driven product, and the editor pico is unwieldy for most users. Pico lacks most decent editing capabilities, it is functional but spartan. Viewing HTML message requires you to view the HTML in your browser and responding in HTML is almost impossible. The other big issue that when you view images that are referenced within the email you cannot see them inline.

The Good

Keyboard Centric

To someone like me the keyboard is your main entry with the mouse being there for support. I can fly using Alpine. Set me say I want to search all messages that contain the text “design”, here are my keystrokes ; T A Design ENTER. Without moving the mouse, plus when the results come up I can use the keyboard to scroll through them.

Speedy and Lean

This thing uses little memory and is very fast, saving to the mbox can sometimes take a second or two but for searching, scrolling through results and most other tasks it does extremely fast. Also consumes about a tenth of the memory Outlook did. Mine generally sits around 4-8 megs depending on what folder I have open.

Extremely Rich Filtering Rules

Alpine has an extremely rich filtering system where you can filter by specific headers, push to an external program or do other crazy things. My needs are pretty tame, move into this folder, flag this or delete that.

Small Install and Portable

Tiny install with a pine.rc and you are good to go. You can also store your configuration on the mail server if you wish.

Stable

I have never had it crash, ever.

Wishlist

HTML View insert the images

It is a pain, would be nice if it could copy the html over and auto link the images so they are view inline. In an ideal world it could even display the HTMLized view when I open the message and show it there.

Replace Pico with Windows Specific/OSX Specific Editor

Give some native editing, the ability to cut and paste using the normal OS commands. Maybe some basic HTML commands or at least the ability to insert pictures. Basically make it look more native while retaining the keyboard navigation and focus on showing just a single thing.

Update on Weekend Goal

Sunday was a bust because I got sucked into the superbowl but Saturday I made excellent progress and recovered a chunk of my lost obj c knowledge. Plus got to play with Xcode 4.