Airport Security for Parents

By Jacob Cohen | July 23, 2008

I’ve recently been following a thread on one of my company’s internal mailing lists about tips and tricks for air travel with small children or infants. One of the major stress points seems to be getting through security.

This is stressful because parents are usually traveling with a whole bunch of extra stuff, and have to somehow get all of this through the security checkpoint one-handed while dealing with an unhappy child. The TSA staff is often inconsistent on what sorts of liquids can be brought through the checkpoint, and the parents are stressed about keeping their kid happy and not irritating all of the people behind them in line by taking forever.

I think a solution to this would be to dedicate at least one, and probably some percentage of all available security gates to serving only people who are traveling with small children (e.g. young enough to need strollers or car seats or other similar bulky items). This would have many advantages.

First, the security checkpoint could be set up to cater to these travelers, with more room to get everything packed down and through the scanner. The TSA agents staffing the station could be trained specifically to the sorts of things parents are usually trying to bring through the checkpoint.

Also, since it would separate parents and children into a new line, it would take a lot of stress off of the parents trying to get through the checkpoint. Everyone behind them in line is in the same situation and would be understanding if they needed to take a little extra time to make it through security. However, since the line is comprised of *only* parents traveling with small children, there would be fewer people in line and the whole process would not take longer.

Topics: General | No Comments »

iTunes Store requires WiFi

By Jacob Cohen | July 17, 2008

To access the iTunes store from an iPhone, you need to be connected via WiFi. It won’t let you connect over the 3G internet connection.

This restriction baffles me. Why would they do this? The 3G internet connection is perfectly fast enough. You can connect to the App store over 3G. It seems like they are leaving a lot of business on the table.

As an example, if you are listening to a song on Pandora, wouldn’t it be useful to be able to buy that song immediately from iTunes without having to wait until you’re connected to a WiFi network? And there are several applications already (such as Shazam) that will identify a song if you hold your phone up to the speakers for a moment. Wouldn’t it be useful to be able to buy that song right away?

It may very well be that there is some valid business reason for this, but from a customer’s point of view, I can’t see it.

Topics: General | 1 Comment »

Rock Band Wish List

By Jacob Cohen | July 9, 2008

I’ve been playing a decent amount of Rock Band recently. I’ve been staying away from the vocals, but I can get through almost all of the songs it comes with on “hard” on bass, guitar, and drums. This game is a great way to build or maintain hand-eye coordination.

But it has left me wanting more. This game is in dire need of more songs available for download. The total catalog is only a few hundred songs. I’m sure it’s a pretty decent chunk of work to get a song, secure all the appropriate distribution rights, cut it up into its various parts, create the track information for each instrument on all of the different difficulty levels, etc, but it would definitely keep the game fun for a much longer time if the catalog of songs was larger.

In addition to more songs, I hope they are working on expanded instrument capabilities, particularly around the drum set, which comes with 4 drum pads and a kick drum pedal. I would love to see an expansion drum set that attaches a hi-hat pedal, a hi-hat drum pad, and drum pads for one or two cymbals. This would allow the four main drum pads to be used for snare, toms, and percussion without their assignments changing in the middle of a song like they do now. It would also allow for a more complete drumming experience, using both feet and a greater variety of drums.

For the guitar and bass instruments, it would be pretty fun to have the ability to use the microphone and add a backing-vocals track. Many of the songs that come with Rock Band have multi-part vocal tracks, but only the lead vocals are available to perform.

Topics: General | No Comments »

Disable Menu Items

By Jacob Cohen | July 5, 2008

In a recent post on his blog, Joel Spolsky writes that you should not “hide or disable menu items”. His alternative is to leave all of the menu options in place, and provide messaging to tell the user why an action can’t be completed.

I have to respectfully disagree with his assessment. I think that leaving menu items active all the time is actually harder to use and understand. It requires the user to spearfish through the menu and live in fear of clicking the “wrong” menu item that triggers a warning message. Worse, it actually makes it harder to understand what the various options do if they are always available. Take your typical application Edit menu, for example. Many of these will have Undo and Redo options available. If you leave these active all the time, it can even be confusing before the user tries to click. If you’ve just opened the application, what would Undo actually undo? If you haven’t undone any actions, what would Redo actually redo?

Now don’t get me wrong, I don’t think that hiding menu options that can’t be used is any better. Looking for an item in a menu and not seeing it where you expected it to be undermines your ability to get accustomed to how an application works. It derails your mental schema of how the application works, even if the application’s behavior hasn’t in fact changed at all.

I think the most reasonable way to handle this is to provide the “disabled menu item” design that almost all applications are already using. This can be augmented by visual aids to indicate why an option is not available. A subscript text to say something like “already at oldest change” under a disabled Undo option, or a subscript that says “nothing is selected” under a disabled Cut option.

But if that is not feasible, I think just leaving menu options disabled in the appropriate context is the best compromise. The confusion of seeing a disabled menu item to me is preferable to the uncertainty of not knowing whether clicking a menu option will actually do something, or just pop up a warning message telling me why I can’t do that right now.

Topics: General | No Comments »

Fedora Update

By Jacob Cohen | July 4, 2008

The Fedora system has been running for a few days now. One minor annoyance I’ve encountered so far is the way the system uses yum. It’s not that I find yum to be a bad package manager. On the contrary, it is very easy to use. The problem comes from how yum will create a lock file whenever it is doing anything, and no other yum operation will proceed until that lock is available.

I can understand the purpose behind such a lock. After all, you wouldn’t want concurrent modification of the system’s picture of what is installed and what version everything is, and so on. However, the problem arises from the fact that the lock is held for absolutely everything. I started a routine system update, and it held the lock for the entire time it was downloading all the new packages. It was waiting for network data while holding an exclusive lock on the whole system.

It is generally considered best practice to hold an exclusive lock for the minimum amount of time necessary to ensure correct behavior. It seems yum is going far beyond this limitation and just trying to acquire the lock before anything happens at all.

Topics: General | No Comments »

Set up a Fedora development box

By Jacob Cohen | June 26, 2008

I decided to switch my spare (old) PC to run Fedora for development purposes. I was able to set up a reasonable approximation using Cygwin, but this will more closely resemble the environments to which I deploy my projects.

Getting Fedora running was more difficult than I expected, though this was not entirely Fedora’s fault. The first issue I was having was that the computer did not want to boot from a burned CD-R with the installation image. I tried two different CD burners and even verified that the computer would still boot from a OEM Windows XP cd, but it just wasn’t going to boot up from the burned disc. Fortunately, I had a couple spare USB keys lying around, so I used one of them to create a bootable drive for the installation.

Installing to the hard drive was trivial once I had booted from the USB key. After installation, I rebooted, which is where I encountered my next set of hurdles. The new package manager front end that comes with Fedora 9, called PackageKit, would not show me any software to install. It just sat there with a status message saying “Waiting for other tasks to complete”. What other tasks? Can I see what their progress is? Apparently not.

I wanted to get going with git and ruby on rails, so I checked out my environment. Hmm. It barely comes with anything. Not even make or gcc. I added myself to my sudoers file to make installing my necessary software easier. At least I appear to have yum installed, so I used that to get myself back to a reasonable starting point.

(snipped the password prompts and output from these for brevity)
[cohen@localhost ~]$ sudo yum install git
[cohen@localhost ~]$ sudo yum install ruby
[cohen@localhost ~]$ sudo yum install rubygems
[cohen@localhost ~]$ sudo gem install -y rails

Now I’m back to a reasonable baseline and can continue development.

Topics: General | No Comments »

Ruby on Rails, Cygwin, and Git part 1

By Jacob Cohen | May 9, 2008

This is the first of what will probably become a series on using Ruby on Rails under Cygwin, with source control managed by Git. This might raise a couple of questions, which I will attempt to answer here.

As for getting it all running, I’ve covered that in a previous post.

For now, I’ll just cover the basics of getting a Rails project started under Cygwin, using Git for source control.

First, I’ll create the directory which will hold the rails application, git repository, and everything else I’m working on. Then, I’ll initialize a git repository, and see that everything is working.

cohen@ceres ~
$ mkdir paste

cohen@ceres ~
$ cd paste

cohen@ceres ~/paste
$ git init
Initialized empty Git repository in .git/

cohen@ceres ~/paste
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

As you may have guessed, I’m going to be using my Nopaste application as a project, rewritten using Ruby on Rails. Next, I’ll run rails to initialize my project and check what Git thinks has changed. (Note: I originally had an issue under Cygwin where rails couldn’t read from /dev/urandom, but I was able to get around it by removing the :urandom entry from the GENERATORS line in the random generator file. Running rails -t will print a backtrace on errors so it’s easy to find the right files to tinker with.)

cohen@ceres ~/paste
$ rails .
      exists
      create  app/controllers
      create  app/helpers
      create  app/models
  ... snip ...
      create  log/production.log
      create  log/development.log
      create  log/test.log

cohen@ceres ~/paste
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add …” to include in what will be committed)
#
#       README
#       Rakefile
#       app/
#       config/
#       doc/
#       log/
#       public/
#       script/
#       test/
nothing added to commit but untracked files present (use “git add” to track)

Git is saying it has noticed a bunch of new stuff that it currently isn’t tracking. We need to get this stuff into our Git repository. I’ll do that, then commit it all onto the master branch.

cohen@ceres ~/paste
$ git add *

cohen@ceres ~/paste
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached …” to unstage)
#
#       new file: README
#       new file: Rakefile
#       new file: app/controllers/application.rb
#       new file: app/helpers/application_helper.rb
    … snip …
#       new file: script/runner
#       new file: script/server
#       new file: test/test_helper.rb
#

cohen@ceres ~/paste
$ git commit -m “Generated an initial Rails project”
Created initial commit cf547ba: Generated an initial Rails project
 43 files changed, 8339 insertions(+), 0 deletions(-)
 create mode 100644 README
 create mode 100644 Rakefile
 create mode 100644 app/controllers/application.rb
 create mode 100644 app/helpers/application_helper.rb
    … snip …
 create mode 100755 script/runner
 create mode 100755 script/server
 create mode 100644 test/test_helper.rb

Now I can test my new rails project and see what I get.

cohen@ceres ~/paste
$ ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-05-09 00:56:59] INFO  WEBrick 1.3.1
[2008-05-09 00:56:59] INFO  ruby 1.8.6 (2007-03-13) [i386-cygwin]
[2008-05-09 00:56:59] INFO  WEBrick::HTTPServer#start: pid=3012 port=3000
127.0.0.1 - - [09/May/2008:00:57:01 GMT-8:00] "GET / HTTP/1.1" 200 7557
- -> /
127.0.0.1 - - [09/May/2008:00:57:01 GMT-8:00] "GET /javascripts/prototype.js HTTP/1.1" 200 125605
http://localhost:3000/ -> /javascripts/prototype.js
127.0.0.1 - - [09/May/2008:00:57:01 GMT-8:00] "GET /javascripts/effects.js HTTP/1.1" 200 38916
http://localhost:3000/ -> /javascripts/effects.js
127.0.0.1 - - [09/May/2008:00:57:01 GMT-8:00] "GET /images/rails.png HTTP/1.1" 200 1787
http://localhost:3000/ -> /images/rails.png

Next, I’ll start using branches to make some modifications, such as creating my database configuration.

Topics: General | 2 Comments »

Interviewing, Part 1

By Jacob Cohen | May 3, 2008

This is the first installment in what may become a series of posts on how to do better in technical interviews.

Most technical interviews have a few key areas in which you need to demonstrate some skill or experience, such as problem solving, algorithms, data structures, programming language concepts, dealing with ambiguity, writing code, and communications skills.

Let’s take an example problem that might come up in a technical interview situation: printing a binary tree in depth level order. This type of problem tests several areas at once. First, do you know what a binary tree is, and how to perform various operations on them? Next, do you recognize that this requires a breadth-first search algorithm instead of the usual depth-first searches you would use to, for example, print the tree in value order? Then, can you pick relevant and useful data structures to help attack the problem, and can you write code that had a reasonable chance of compiling and solving the problem correctly?

If you’re weak in any of the above areas, you will have difficulty with a problem like this, even though it seems like a basic coding problem on the surface. Other problems will cover different combinations of various technical skills and aptitudes, so you need to be pretty well versed in everything to pass a technical interview.

So to prepare for a technical interview, take some time to make sure you are adept in all of these areas. Tackle unfamiliar problems and make sure you write code to solve them. Be familiar with standard data structures and how they are found in the programming languages you expect to use to solve the problem. (e.g. it’s difficult to solve a graph problem in Java if you don’t know how to represent or manipulate a graph in Java).

And make sure you are solid in your programming language of choice. Nothing makes an interview go bad faster than forgetting how to do simple things like string/integer conversion, sorting, basic arithmetic operations, memory allocation/deallocation (if applicable), and so on. A candidate for a programming position is expected to already be solid at programming. You need to give the impression that the time the company will invest in getting you up to speed is going to be spent familiarizing you with the company’s code base and particular way of doing things, *not* teaching you how to write basic code.

Topics: General | No Comments »

Added Remove Paste Capability to Nopaste

By Jacob Cohen | April 17, 2008

Every so often I receive an e-mail from someone who has posted something they didn’t mean to to my Nopaste site, and they want it taken down. Since I don’t check my rafb.net e-mail very often, I usually can’t catch these before they have been deleted by the 24 hour expiration period anyway.

However, as a means of helping these people out, I’ve added the ability to remove pastes that you have created. At the top of the page there is a “Remove this paste” link which will remove all publicly-visible traces of the file from the system, and indeed the content is absolutely gone. I don’t archive the content of pastes.

Topics: General | No Comments »

Word’s Ribbon seems to be missing an important feature

By Jacob Cohen | February 29, 2008

Microsoft’s Office software has been redesigned with a new “Ribbon” instead of the old toolbar. The idea is that the ribbon can give better design based on information architecture to put the give greatest prominence to whatever the most relevant tools are for whatever it is you are doing.

And rather than using obscure menu names like “File” and “View” and “Edit”, the ribbon is categorized based on general categories that more accurately reflect the things you can do from that view of the ribbon, such as “insert” and “page layout”.

This all seems like a pretty neat concept. The operations I use most often are all within easy reach. Or are they? How do I print the document?

Let’s see.. maybe it’s on the Home ribbon:
word1_t.png

Or on the Insert ribbon:
word1_t.png

Or perhaps the Page Layout ribbon:
word1_t.png

Hmm.. maybe the References ribbon:
word1_t.png

Mailings doesn’t seem likely, but we’ll see:
word1_t.png

Ah, Review sounds likely, maybe it is there:
word1_t.png

Last ribbon, it must be here:
word1_t.png

But wait, it wasn’t on any of the ribbons. If you want to print, you have to click on the “Office logo menu” or whatever this thing is supposed to be.
word1_t.png

Why is this functionality buried in some obscure menu that doesn’t even look like a menu? Why isn’t it on the ribbon? Surely printing a document is a task of primary importance to the average user of this application.

Then I thought, perhaps the ribbon only represents things you can do to edit the document, and the operations you do with the document, such as saving, opening, printing, and so forth, are found elsewhere. But why can’t this be a category on the ribbon? Why should I have to remember what’s in that unlabeled dropdown menu when the rest of the operations are presented visually?

Topics: General | 9 Comments »

« Previous Entries