Jon Aquino's Mental Garden

Engineering beautiful software jon aquino labs | personal blog

Wednesday, August 22, 2007

Books that have been major influences on me

Here are some books that have been major influences on my life.
  • What Color Is Your Parachute? Working through this book helped me to realize that the right career for me was what I had been passionately interested in since Grade 4: computer programming.
  • Extreme Programming Installed. My current way of approaching software projects is rooted in the principles taught in this book. Things like unit testing, estimates that can be calibrated, how to estimate anything (break it down), letting the customer steer, and how "We'll try" can be the saddest words a programmer has ever spoken.
  • The 7 Habits of Highly Effective People. Mainly the importance of crafting a personal mission statement – mine begins with "Engineering beautiful software". But much of the time-management techniques have been supplanted by...
  • Getting Things Done. Truly changed the way I manage the gazillion tasks in my life. I've been practicing it for 3 years and am still trying to master it – but I am keeping up my weekly reviews. The GTD system funnels all your tasks into a small number of buckets: lists, tickler, calendar, filing cabinet.
  • Design Patterns. An epiphany in how I think about software design. Here is a catalog of beautiful object structures that come in handy for many standard problems.
  • The Pragmatic Programmer. Picked this up on a whim, and it turned out to be a super-useful collection of tips, tricks, and tools for the software developer. Ideas like the DRY principle (Don't Repeat Yourself!), domain languages, "The Power of Plain Text" (Unix text tools and the importance of having a good text editor), code generation, blackboards, and signing your work ("[Jon Aquino 2007-08-22]").
  • About Face. Alan Cooper's opinionated book on user interface design. Affordances, rooms, modality, arrowing, command vectors, and the importance of undo. Good stuff.
  • The New Testament. It's been an interesting ride. My high school girlfriend encouraged me to read this in Grade 9. Changed my life.
  • The Visual Display of Quantitative Information. Tufte's magnificent book on visualizing data showed me the power and pleasure of good infographics.

Thursday, August 16, 2007

[Windows] JumpWin: moving windows between dual monitors using WinKey+Enter

JumpWin - it lets you move a window from one monitor to the other by pressing WinKey+Enter.

(via Oren Eini)

W00t! I have 6 good fonts

smashingmagazine.com has a good article on 80 Beautiful Typefaces For Professional Design (feed). I've always wanted to know which of the fonts installed on my system are considered good by designers. After painstakingly comparing their list of fonts with what's on my system, I have found that six of my fonts pass muster - yay!

Fli1F0

TrueType Font from the Apple II Computer of the 1980s

This is amazing. I can use the font from my beloved 1988 Apple IIc computer for my Win XP and Putty command prompts. (If you had a Commodore, TRS-80, or other computer from the pre-GUI days, you can probably find its font and install it on your computer.)

FliA8

Here's the Apple font showing Haskell code on a Java-based editor (jEdit). We've come a long way since the days of BASIC programming.

FliC1

Wednesday, August 15, 2007

Why the jEdit Text Editor Rocks

Here I describe the reasons why jEdit is almost certainly the best text editor in the world. jEdit's creator, Slava Pestov, is a genius – you can tell from the power and extensibility of his creation.

jEdit lets you use both monospaced fonts and proportional fonts. Here it is with one of my favorite fonts, Franklin Gothic:

SnagIt Capture

Everything that this text editor does can be assigned to a shortcut key of your choosing. And even a second shortcut key, if you desire.

Fli650

You can turn on rectangular-selection with Alt+\ (or Ctrl+dragging with your mouse). This lets you type in several lines at once.

Fli692

You can also turn on multi-selection with Ctrl+\. This lets you create multiple selections and type on them at the same time.

Check out jEdit's powerful Search And Replace window below. Yes, that search field contains a regular expression with multiple newlines. And yes, that replacement field contains real Java code. Being able to replace text with the result of an arbitrary Java expression is tremendously powerful.

Fli6A5

jEdit offers syntax highlighting for more than 130 languages. Here's some Haskell code, for example:

Fli6B0

I love jEdit's integrated FTP/SFTP support. The file tree below is for a remote SFTP server. It's better than the SFTP support in UltraEdit, which lets you see the contents of only one tree node at a time (painful!).

Fli6B9

I quite like the Highlight Occurrences function, which I've assigned to Alt+5. It lights up every occurrence of the word at the cursor. Below I'm highlighting the word "dojo". And see those little triangles on the left? Those are code-folding buttons – press them to fold up the code, to make it easier to see the structure.

Fli6C2

One of the nicest features about jEdit is its PlugIn Manager. Here you can choose from 150 plugins to add various capabilities to jEdit. And best of all, you don't need to restart the editor – the plugins are ready for immediate use.

Fli6CD

The plugins I've installed are: Code2HTML, Console, Editor Scheme, FTP, Highlight, MacroManager, PHPParser, SwitchBuffer, TextTools, and WhiteSpace. Here are the options added by the TextTools plugin, for example:

Fli6F9

I often find myself using Sort Lines, Delete Duplicated, and Shuffle Lines.

If you don't like the color scheme, the Editor Scheme plugin gives you 22 others to choose from; or you can create your own. Here's the "Emacs" color scheme:

Fli6D8

You can configure the number of Recent Files listed. I've set mine to 120:

Fli6E1

Pressing Ctrl+Space will autocomplete the current word, using keywords from the current language as well as other words found in the current file.

Fli6EE

The Console plugin adds a handy terminal window. Here I've docked it at the bottom of the editor:

Fli702

The Buffer Options window lets you choose the line terminator, character encoding, and other options:

Fli779

Often it's useful to be able to split the window horizontally or vertically, so you can see another file (or a different part of the same file). Ctrl+2 splits the view horizontally; Ctrl+3 splits the view vertically; Ctrl+0 removes the splits. You can also duplicate the view in a new window by clicking View > New View

Fli15

And I haven't even mentioned incremental search, macro recording, HyperSearch, incremental switch-to-buffer, and many other features. Plus it's free and it works on Windows, Unix, and Macs.

jEdit. Those who like it, like it a lot.

Tuesday, August 14, 2007

RSS feed for book "Getting Real" by 37signals

I've created an RSS feed for the book "Getting Real: A smaller, faster, better way to build software" by web-app wunderkompany 37signals.

Two Windows Programs I'm Trying Out: Directory Opus, Button Boogie

  • Directory Opus - It's the Rolls Royce of file managers, and it's pretty pricey ($75). But it has the little luxurious touches. I'm also thinking about trying out XYplorer - half the price, and also well spoken of.
  • Button Boogie 2 - I just bought this one for $8 from PC Magazine. It arranges my taskbar buttons alphabetically. I think I've found window-management nirvana - my taskbar is docked to my right, showing the titles of all my windows, and they are organized alphabetically so I can easily find any open window.

Funny how window-management has remained essentially the same for the past 20 years - overlapping windows. The drawback of course is that it's hard to find windows hidden behind others. So having an alphabetically sorted list of windows always visible is a major step forward in ease of use.

Tuesday, August 07, 2007

Fred Brooks quote: The programmer, like the poet, works only slightly removed from pure thought-stuff.""

The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be. ... The computer resembles the magic of legend in this respect, too. If one character, one pause, of the incantation is not strictly in proper form, the magic doesn't work. Human beings are not accustomed to being perfect, an few areas of human activity demand it. Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.
-Frederick P. Brooks, "The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)"