Say something nice about every language you've used

I read a blog post in which the author says something nice about every programming language he's used. I decided to do the same.

In roughly chronological order:

  • Apple II Basic - the computer has programming built right in
  • Hypercard - designing a GUI by point and click is nice
  • C - there's very little between programmer and computer
  • C++ - you can have more between you and the computer when and only when you want it
  • PHP - deploying web apps is about as easy as deploying static pages
  • Javascript - prototypes less verbose than class definitions
  • Common Lisp - I still haven't used a more powerful language
  • Scheme - executable simplicity
  • OCaml - type safety can actually work, and need not be verbose
  • Ruby - did somebody do a usability study on a programming language?
  • Forth - low-level expressive and possible is
  • Python - other people's code is almost always readable
  • Lua - small, simple, expressive and fast can coexist
  • Arc - succinct
  • Clojure - the sanest way I've seen to get a computer to do ten things at once
  • Haskell - I've never seen an easier way to write a parser
  • Java - lack of power means the IDE can do half the work for me
  • Actionscript - at least it has closures

IP geolocation is a bad way to select a UI language

So, I'm sitting here in Germany at what may be one of the few hotels in Europe to offer free wireless Internet access. I open Firefox and type in "google.com". I'm immediately redirected to google.de, and it's in German.

Google has four or five pieces of information it could use to determine what language I want to see my content in. They are:

  • My user agent string: web browsers identify themselves when requesting a web page. Among a bunch of other details, it says that it's the US English version of Firefox.
  • The Accept-Language header: web browsers say what language they want a page in when requesting it. Mine says it would prefer US English, and barring that, any kind of English.
  • My preferences cookie for google.com, which says I want my UI in English, 30 results per page and no filtering.
  • My session cookie for google.com, which says I'm logged in to my account, which has stored preferences saying I want my UI in English, 30 results per page, etc....
  • My IP address, which, when looked up in a database that was likely time-consuming and expensive to acquire, says that I'm in Germany.


Of course, Google decided to go with the IP address, which seems to me to have the absolute lowest probability of any of those pieces of information of correctly identifying the language I would prefer to use with my web apps. I often suggest Google as a company to emulate, but not in this case.

The war on spam has been won

In 2002, Paul Graham claimed that once filtering based on machine learning took off, traditional spam, complete with sales pitch would be dead. Instead, "spam of the future" would look like this:

Hey there. Thought you should check out the following: http://www.27meg.com/foo

For me, anyway, we're at that point. The only spams that have made it to my inbox recently look like this:

Subject: workwoman
How To Give Your Woman Powerful G-spoot Ograsms Every Time.www.45meds .com

Does anybody know of a CRM tool like this?

I have a consulting customer who manufactures a unique piece of farm equipment. He has customers all over the US, and has both in-office sales people and delivery drivers who sometimes act as sales people. The delivery drivers may be without reliable Internet access for significant periods of time.

Currently, he's keeping track of customer contacts with Openoffice Base and having a secretary keep information in sync manually. It might as well be a spreadsheet, but Base makes it a little harder to break things. This is not an optimal situation.

What my customer has requested is a tool that keeps this data in sync, and allows offline updates to be merged in. An entirely new system or UI would be acceptable, and I've looked at several existing products:

* Salesforce seems to offer all the required features, but it's complex and expensive (when configured with the required features)
* Dynamics CRM is too Microsoft. The customer doesn't want to buy in to Outlook/Exchange/Office. Last I checked, one of the drivers was running Linux and, as an organization, they're leaning toward using more Linux-based PCs in the future.
* Highrise is online-only. There's an API that would let me write an offline client and merge/sync system, but if I'm writing that, I might as well do a whole new product.

Designers: don't make assumptions about the browser's default styles

I recently changed my desktop theme to one with backgrounds that are mostly dark grey with light colors for text and the like. This includes text input fields on websites, though I may have to override this behavior.

Most, if not all browsers display input fields with white backgrounds and black text by default. Many websites feel the need to change the color of the text. One - Hacker News sets the text to black without setting the background. I have no objection to this in principle, as pleasing color-schemes do include input fields. That said, if you're going to set the text color, you must set the background color to guarantee readability.

More generally, try not to make too many assumptions about what the browser will do in situations where you're not telling the browser what to do. Anything you can style, the user can adjust as well. Assume that the user has and write your stylesheets accordingly.

Laptop repair, with fire!

As laptop video chips become more sophisticated and lead solder becomes
more frowned upon, the ball-grid-arrays that attach the chips to the
motherboards crack increasingly often. Symptoms vary and include
crashes, failure to boot and artifacts of various types on the screen.
The most common fix is to replace the motherboard, but these solder
balls can be melted and allowed to re-flow in to place. The proper tool
for the job is a hot-air pencil - a very small heat gun with precise
temperature control. A reflow oven in which the entire board is baked is
another option. These tools are expensive. I used a blowtorch.

 

Thanks, ATI

I have a Thinkpad Z61m with the ATI Radeon x1400 mobility graphics chip.
It's not the world's best GPU, but it's been good enough for some light
gaming.

 Ubuntu released a new version yesterday. It's smoother, faster and more
likely to do what I want than the previous version. It's great, except
that the version of fglrx (ATI's proprietary driver for Linux) that
comes with it claims not to support my card. No problem, I thought. I
was using the latest driver from ATI with the last Ubuntu anyway. I'll
just install that.

 Error: ./default_policy.sh does not support version

 So I thought I'd check to see if there's a newer version, and there was,
just in time for the latest Ubuntu. It doesn't support my card. My card,
only two years old has been moved to "legacy" status.

 The open-source Radeon driver does work, and does provide 3D
acceleration. It also provides visual artifacts and poor performance
with Vendetta Online, the primary game I want to play.

 Thanks, ATI.

The world needs better data manipulation tools than Excel and Access

Options for people who aren't programmers or DBAs (or who are and don't
want to go though a bunch of effort) to interact with the various forms
of organized data they may encounter are limited. It's especially bad if
a power user wants to create something for other people to interact
with. Most of us have encountered companies large and small keeping far
too much data in Excel spreadsheets. Access is not much better. On the
surface, it allows non-programmers to make applications, and programmers
to make more complex applications. In reality, it's too difficult for
non-programmers to do anything non-trivial and annoyingly restrictive
for programmers.

 The world needs something better, and I have an unrefined concept of its
form. What I have in mind would integrate a (not yet developed) visual
programming language. Users could create fairly sophisticated apps by
dragging, dropping and plugging things together. Apps could be web-based
or desktop-based, and optimally would have the option of storing data
internally so as to preserve a document-based model for the user. Of
course, more advanced apps would have the option of using external data
files or connecting to a server. Programmers wishing to make more
sophisticated apps would have at least one real programming language
with a DSL or DSL-like library for interacting with the system. I'm
inclined to use the JVM and make several languages available. I'm
thinking of Tokyo Cabinet's table data store as the backend.

 Two target markets come to mind: small businesses, and corporate
departmental-level power-users who don't want to involve IT.

 Small businesses were the first market that came to mind for me. It
seems like these businesses are often buying software that's a poor fit
to their needs to manage their data. I see two likely use cases for this
sort of product. One is computer-savvy business owners making their own
applications. I suspect the bigger one is an app-store allowing easy
distribution of programs to work with data. Likely examples would be
point of sale and accounting software. In this model, the software
itself might even be free, with a retail box version coming bundled with
several popular apps.

 The corporate market was suggested by a user on #startups who thought
selling to small businesses would be less than fun. I honestly don't
know a lot about the corporate world and I'm not sure about trying to
make a product for that market. I'm sure the market exists, but I'm not
sure what features would allow a startup to compete with the entrenched
Microsoft products already in use. Being able to talk to all the data
sources likely to be encountered in that environment more easily than
Access would likely be a good start. Does anyone who understands the
needs of the corporate market have some input?

 The more I think about this idea, the more I like it. Am I crazy? Does
this have merit? Would you work on this? Would you invest in it? Would
you buy it?