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 »

New Car Wish List

By Jacob Cohen | February 14, 2008

Similar to my Mobile Phone Wish List, this is a list of the features I would want on my next car.

Topics: General | 5 Comments »

Can a Hardware Platform be Closed?

By Jacob Cohen | January 29, 2008

In the comments left for Jeff Atwood’s recent post on closed platforms, there is a discussion about his comparison between traditional dongles and the hardware of the Apple Macintosh itself.

A user named Brandon left the comment,

I’m not sure Apple hardware, say PPC and Intel on, counts as much of a dongle. Especially Intel based hardware. You can freely install any OS you want on it, they [Apple] even bundle the Windows drivers for all the proprietary hardware, backlight keyboard, webcam, volume, eject button, etc.. on the Leopard install disc.

He has the meaning of dongle reversed here. The point isn’t that you can’t install other stuff onto the Mac, the point is that the software won’t run on anything else. This is enforced by the license agreement as well as a hardware key (dongle) which is the Mac itself.

In the age of ubiquitous virtualization of computer hardware, however, the hardware dongle is not nearly as hard to copy as it used to be. Consider it like The Matrix for computers. The software only sees the interfaces exposed by the operating system. The operating system only sees the interfaces exposed by the hardware it is running on.

The operating system doesn’t know if it can trust what it is getting from the hardware, or indeed if it is even running on hardware at all. This is probably the issue that causes Apple to disallow running their OS X software product inside a virtualization server. They recently updated their license to allow virtual server instances of OS X Leopard, but only on Apple hardware.

Also, while I am not privy to Microsoft’s motivations behind the Palladium project (now known as the Next-Generation Secure Computing Base, I suspect this issue had something to do with it. Otherwise, what’s to prevent someone from installing 20 copies of Windows XP onto different instances of a virtual PC that emulates the same processor ID and MAC address? What would be unique about any given installation of Windows that the operating system software could trust when trying to determine if it is a legitimate copy?

This leads to the question, can a hardware platform ever truly be as closed as the manufacturer would like? Or will they always have to fall back on licensing restrictions to discourage cloning and manipulation of their product? I don’t think we’ve seen the answer to this yet.

Topics: General | No Comments »

Programming: Engineering, Science, or Art?

By Jacob Cohen | January 29, 2008

When you’re looking to hire programmers, what do you look for in their education? How should the colleges and universities be educating the next round of students who are destined for careers in software development? There seem to be several schools of thought on this.

Programming as a Science
Traditionally, going to school with the intention of becoming a programmer meant getting a degree in computer science, which was typically taught in either the mathematics or engineering school within a university. There was, and still is, in many schools, a lot of emphasis on mathematics, engineering, and science courses as part of the curriculum for earning this degree. Should the future programmers have to care about vector calculus or electronic circuits or fluid dynamics? What about graph theory, logic circuit design, or computer architecture? How much “science” do programmers really need to know?

Programming as an Art
Some believe that programming is less of a science, and more of an art. Joel Spolsky seems to think this way. According to this school of thought, programming is an art, and aspiring artists go to school to learn by doing, and by studying under accomplished artists who can teach them how it supposed to be done.

Programming as Engineering
To others, programming is an engineering discipline. You’re not a programmer, you’re a software engineer. You’re an architect. You’re building and creating with the finest attention to detail. You’ve measured your code twice and it will fit in 64K of memory. As you build more and more software, you begin to establish a set of practices and guidelines to prevent past failures from reoccurring. You have little patience for the new upstart programmers who lack all of the discipline you’ve carefully acquired.

So what should the schools teach?
All of the above! Aspiring software developers need the science, the theory, the engineering principles and the artistic trade aspects in order to be well-rounded.

If you leave out the theory, you might create a batch of programmers who don’t know why a Shlemiel the Painter’s algorithm is bad, or how to avoid it.

If you leave out engineering principles, you might get programmers who don’t know what to do in response to a bug that is found in their code. How do they know that bug is fixed? How do they prevent it from reoccurring?

If you leave out the art of programming, you might find people who know about software, but not how to create it. The software industry might need a few well-trained critics, but this is probably not the best use of a university’s software development curriculum.

Topics: General | 1 Comment »

Ruby on Rails under Windows XP with Cygwin

By Jacob Cohen | January 27, 2008

I like to use Cygwin for development under Windows, as I frequently use standard command line utilities like find and grep, and I find the Windows command line environment to be more painful to use than it is worth.

The first time I tried to get this all running, it was in this sort of hybrid Cygwin/windows mode where running certain applications (such as rails or gem) required using the Windows command prompt, where others (such as running the rails-generated scripts) could be run from within Cygwin.

This proved to be too irritating to manage, so I’ve reinstalled the Cygwin version of Ruby, downloaded RubyGems from source, and rebuilt that using my Cygwin version of Ruby. As a neat gotcha, if the Windows version of Ruby has added “RUBYOPTS=-rubygems” to your environment variables, running “ruby setup.rb” in the RubyGems directory will fail with “ruby: no such file to load — ubygems (LoadError)”. Just unset this environment variable and re-run it, and it should be fine.

Now that I got Ruby and Gem installed under Cygwin, I’ve reinstalled Rails (”gem install rails”). One of the other persistent hiccups I’ve been encountering with my setup is how to get my machine connect to the MySQL database I’m running on a separate machine. I don’t want to install the MySQL server software on this machine just to be able to connect, what I need is just the client libraries. Unfortunately, it appears that the mysql ruby adapter requires bits of the server components of MySQL. It won’t build properly if you build just the client libraries of MySQL.

Now that mysql is installed, Gem can install the ruby/mysql adapter, which will allow my Rails projects to connect to my MySQL database on the other machine.

Essentially, here are the steps in the order needed to get this to work.

  1. Install Cygwin. Get gcc-core and gcc-cpp (to compiled MySQL), and Ruby.
  2. Install RubyGems
  3. Install Rails (gem install rails)
  4. Download the MySQL source, and build it under Cygwin.
  5. Install the MySQL Ruby adapter (gem install mysql)

And that’s it. Not as simple as it should be, but not impossible.

Topics: General | 3 Comments »

Mobile Phone Wish List

By Jacob Cohen | January 21, 2008

I’ve been shopping around for new mobile phones recently. Not necessarily because I want to buy one (my current phone is working just fine), but mainly to see what’s out there. It’s been a year or so sinc e I last looked at what sorts of phones are available.

Since I’m not seriously looking to buy a phone right now, the list of features I would “require” in a new phone is a bit unrealistic. However, if they offered a phone with these features right now, I would probably buy it, because it would be my ideal phone.

The features are as follows:

As it stands, no phone in existence comes close to meeting all of these design requirements. There is nothing out of the realm of possibilities in this list (except perhaps the price point) but it will probably be a while until I see a phone with all this.

Topics: General | 1 Comment »

Logic Circuits and Video Games

By Jacob Cohen | December 7, 2007

In 1984, The Learning Company published a gamed called Robot Odyssey. The basic premise of this game is that you are a human who has fallen into a world full of robots called Robotropolis, and you are trying to make your way back to the human world.

I had a copy of this game for the Apple 2, and spent many hours playing it when I was young. One of the cool things that it let you do was build circuits using a toolkit that contained various logic gates. The toolkit contained basic logic gates such as OR, AND, NOR, NOT, as well as flip flops and a soldering iron that let you connect them all together.

You also pick up a set of robots as you travel through Robotropolis. Your human character can walk into these robots and ride around inside them, which can protect you from the sentries that will prevent your character from passing through certain areas.

One of the first challenges you have to overcome with your robots and logic gate toolkit is to navigate through a maze guarded by a sentry. You can’t just walk through as a human, because the sentry will stop you. You have to ride inside the robot. To accomplish this, you need to create a circuit inside the robot that connects its battery, thrusters, and impact sensors in such a way that it will navigate the maze.

The most basic way to do this is to create a wall-hugger algorithm using the sensors and thrusters. If the right-hand sensor is activated, meaning there is a wall to the right of the robot, then activate the up thruster. If there is a wall to the left, activate the down thruster. If there is a wall above, activate the left thruster, and if there is a wall below, activate the right thruster. This will have a robot follow a wall around the edge of a room, which is enough for simple mazes.

However, a true wall hugger needs to be able to follow an “outside” corner as well as an “inside” corner. To accomplish this, you can add some more logic that lets it follow an outside corner and reconnect with the wall if it finds itself having left the wall and flown out into empty space.

There are some more complex puzzles later on, such as using the grabber arm on the robot to go fetch a key from the middle of a room that is patrolled by a sentry that can see you even if you are in the robot. You have to program the robot to go to the right place, grab the key, then return.

The cool thing about this program is it teaches you all about designing logic circuits. I found my logic design courses in college to be extremely easy because I had spent a good amount of time doing exactly the same thing when I was younger.

Another game in a similar vein was called Rocky’s Boots.

The thing I liked most about these games was that they required very little hand-eye coordination (I was never very good at such games) but involved a lot of problem solving and being able to learn things by trying them and seeing how it works, revising your approach slightly, and trying again.

Topics: General | 3 Comments »

Technology from Movies and TV Shows

By Jacob Cohen | November 1, 2007

The sorts of technology and computer interfaces we see in movies and TV shows are, quite often, sensationalized beyond reason. They are designed to provide visual interest and to look cool, but real-world computer and technology would most likely never be implemented in such a fashion, even if it was possible and easy to do so.

The 1995 movie Hackers is often used as an example of over-dramatic, Hollywood computer interfaces, with the characters navigating through a computer’s files using a 3-d interface that resembles flying through skyscrapers. This is a good example of a computer interface that we probably won’t see implemented, even though the average desktop PC has enough power to have such an interface. The 3-d flying simply isn’t an effective mechanism for locating files on a computer. It provides visual interest, but little real-world practical use.

For contrast, consider shows like “24″ and CSI. It is common to see a character on their cell phone talking to someone back at the home office or police station, and they will then snap a picture of something with their phone and send it to the computer next to whoever they’re talking to. This is something that is actually quite useful, and it is a lot harder to do than they make it look. Phones are becoming powerful to the point that you can easily send photos to other phones, but to send it to a computer (perhaps using an e-mail address) while on a call with that person is not a one-button operation.

This is a technology we should have available. There are various ways we could make this work that don’t involve trying to have the picture phone know where to send the photo so that it appears on that computer screen. Suppose, for example, that there was a Bluetooth profile available that would allow any computer to serve as an external display screen for the mobile phone. Then, “sending it to your screen” is more literal, you just send the photo to the phone as usual, and the phone uses the nearby external screen to display it.

Here are some other things we often see in movies and TV shows that I think would be useful (and possible) to have:

And here are some technologies and interfaces that are probably only ever going to exist in movies and on TV:

So, while most of the time, Hollywood movies and prime-time TV shows contain computer interfaces and technologies that are mostly designed to add visual interest or explanation to the subject matter, there are occasionally some ideas that could give rise to very useful technology for the real world.

Topics: General | 11 Comments »

Metaphors That Outlive Their Origins

By Jacob Cohen | October 31, 2007

It sometimes happens. We create a metaphor to make something easier to understand, only to find that the new idea replaces the old, and as the old technology fades from use, the metaphor becomes almost unhooked from its original meaning.

Take, for example, the “carriage return” and “line feed” characters that are found in many computer character sets. These come from operations that were performed on a typewriter, and are often used within text files to indicate when the text should start on the next line (differences in convention between different operating systems has caused headaches for people to move text files between PCs running Windows, MacOS, and other operating systems).

Do most people even think of a typewriter anymore when they work with a computer? People no longer need to know or care what a carriage return or a line feed even is. The programming language Visual Basic has a keyword used to represent the character you use to get to the next line. Would the keyword vbCrLf mean anything unless you knew that a carriage return and line feed are how you get to the next line of a file?

There are plenty of other examples to be found, such as referring to a phone being “off the hook” (or to “hang up” a phone), or the “rewind” feature of audio and video players that use media other than tapes. We learn to accept the meanings of these words and phrases based on how we use them, but we lose the origin of the meaning.

Topics: General | No Comments »

« Previous Entries Next Entries »