Monday, July 06, 2009

Using a game to teach regular expressions

Quick sketching....

You could have a game to teach people regular expressions. It might even actually be fun. I don't know if anything like this has already been done (a very quick look doesn't seem to show anything like it), but here's one way it could be done.

It might be a war between alien forces. You are commanding one side.

The enemy march in a single line in from the right side of the screen, and as the commander of your side your goal is to stop their troops reaching the left side of the screen. You can send out troops from the left side to attack the right side.

There are some number of diff types of enemy troops, and at your disposal you have specialist troops, each one of which can pick of a particular type of enemy troop.

So if the front of their line of troops is a 'green' alien, you send out a 'green' soldier. your troops will always win, as long as you send out the right type.

So you could just play by sending out the right sequence of troop colours...

But then their troops start moving faster and it gets harder to take our their troops one by one.

Luckily there are patterns in the troops... the front of their line might be one green soldier, followed by five blue soldiers, ending with a red soldier

So if you can set up a single command for 'one green', 'one or more blue', 'one red'.

What i'm talking about so far is like a regular expression where you are matching specific characters; they can also match classes of characters, like 'whitespace' or 'word characters' or you can have character classes...

And the game could gently introduce the ability for the player to have such higher-level control... e.g. some of the enemy might be carrying shields... blue ones with shields, red ones with shields and so on... so your 'attack specification' could allow the player to deal with more abstract classes like this.

Ideally, the game would give the player a gentle ramp up to the sort of abstraction regular expressions afford. the player could handle things fully manually... by manually specifying the pattern to meet... and then they would appreciate the ability to handle it in a higher-level way.

The player should be rewarded by being able to take out as many enemy as possible in the one command (the one reg-ex)... the more they take out, the more spectacular it should look, and perhaps the more points they would get (if there were points).

Here's some other ideas.

I can even imagine building a 'search and replace' mechanism into the game... perhaps the 'search' pattern could be use to specify what to target and the 'replace' pattern what weapons to use on each of those targets.

In addition to the idea of a game based around the idea of regular expressions, I might be actually use them to provide powerful input mechanisms in existing sorts of games... real-time strategy games strike me as a possibility.

Sunday, June 14, 2009

Switching between windows with a directional mouse-gesture (or a map)

Here’s an idea for how a computer operating system could enable you to quickly switch between windows. The idea is that you could press a some key or key combination to indicate you wanted to switch windows, and then you could specify which window simply by shifting the mouse pointer from its current position just a little bit in the direction of the window you wanted to switch to.

The operating system would guess which window you wanted to switch to and make it flash or something. If it had the one you wanted, you could press the mouse key and that window would get the focus. I think the system would have to figure out which window was, overall, most in the direction you've gestured.

If it didn't select the one you wanted, you’d move the mouse again to try to make it clearer which window you wanted. How would this work? Imagine that you’d moved the mouse to the right to indicate a window to the right, but you the one you actually wanted was further to the right of the one the system guessed.

To indicate that other one, you could just move the mouse a bit more to the right and it’d figure out you meant the window more to the right. Whatever the subtleties an actual implementation would have to deal with, I think there’s a good chance you could figure out a workable solution.

(On windows, instead of simply pressing a key, you could press and hold down the Windows Key and move the mouse pointer and then release the key once it has seleted the one you want).

As different approach, instead of gesturing direction, pressing the ‘switch windows’ could bring up, at the place where the mouse pointer was, a small schematic map of the desktop indicating all of the windows’ locations. Mousing over a window on that map would highlight the actual window it corresponds to; clicking it would switch to that window.

Friday, June 12, 2009

More birds-with-arms (pics)

Some more photoshopped pictures of birds with added arms, thanks to the good people on the Something Awful forums.

When I see a picture of a bird now without arms, like this one, my brain is thinking "amputee":



Here they are:










Wednesday, June 10, 2009

"Photoshop Arms Onto Birds!" (pics)

Over on the Something Awful forums, Paradox86 said "It's pretty simple. A friend and I agreed that birds are pretty pissed that they don't have arms. We decided this should be fixed."

Yes, this is what the world has been needing. Pictures of birds with arms. Yet it is somehow strangely compelling - there's some pretty brilliant stuff there... here's a handful of them:










Sunday, June 07, 2009

Rough notes on getting things done

Doing an assignment, writing a book, losing weight -- whatever the task is, there's no doubt that it can be hard to get things done. Here's some rough notes -- that I'd like to clean up sometime -- on ideas to make it a bit easier.

  • Build habits. Habits have momentum, and they can suck you into a task without you trying.
  • Associate a place with a task (if you can). That's one good way to build a habit. I go to a local coffeeshop to do PhD writing. That's all I do there, and I don't go there otherwise. I find it quite useful. If it's a place you don't do any other tasks at, it's less likely to trigger habits associated with them.
  • Make the habits generic, so you can always invoke them. If you make the initial task "start writing" (start writing anything - it doesn't matter what), then this applies regardless of what you are writing or what you are writing it for.
  • Minimised the (perceived) next task. Make it easy to start.
  • Doing has momentum. Make the initial task very simple. Simply by continuing to work on it, it can gather momentum and snowball and if that happens you don't have to even think about trying to do next thing.
  • Impose non-negotiable constraints (where possible). The coffeeshop I do my PhD writing at doesn't have any internet access, so I can't stuff around on the net even if I wanted to. (I understand that many tasks require internet access - this is just an example of the general principle). I also don't have Freecell or Solitare etc installed on my computer.
  • Have others around who can see you. That's another thing I suspect is an benefit of writing in a public place... it feels harder to slack off. May not work for some sorts of tasks.
  • Be prepared for initial Suck when getting into any new sort of task / setup. Basically it’s like developing a skill - it's going to take a while to get into it.
  • Learn to recognise and acknowledge when you’re refusing to consider doing something or how to do it, and just pushing it back. and that if you can do this, this could be all that’s required to actually get your major goals done.
  • We seem to have a tendancy to try to figure things out in our heads before starting. This tends to make the task seem to big, and you just end up staring at a blank page or screen. So learn to recognise when you’re doing this.
  • Related to this, there's a tendancy to want to go into a ‘perceptual response’ mode of thinking – you get stuck. (need to do more work to explain this).
  • As a longer-term proposition, try building up desire to achieve what you want to achieve.
  • Try to have “definite critiera” (I need to do more work here to explain what I mean) -– like writing something that reads from start to finish, rather than just a bunch of notes.

Wednesday, April 08, 2009

Some interesting-looking loft-style bedroom/desk/storage units

 
Some interesting-looking loft-style bedroom/desk/storage units (via dornob):








Monday, April 06, 2009

Interesting persuasive technique in anti-smoking ad

The latest anti-smoking ad being shown on tv here:



As a means of persuasion, it employs an interesting technique, one that I think is pretty effective.

It tries to take on trite kind-of 'excuses'. It doesn't try to counter them by dealing directly what their content. It doesn't explicitly respond to them at all. Each one is followed by a totally separate slice of conversation from a totally separate situation.

That next slice of conversation 'responds' to the triteness by highlighting the seriousness of what is really at stake. What's interesting is how it does this. It takes the syntactical form of the trite statement "I don't think I can quit" and 'responds' with another one with a parallel form "I don't think I can operate".

Something about that parallelism makes the response a powerful smackdown. I think it must be that our brains take that similar structure as meaning the response's content consititutes a very complete and definitive response.

I'm on Twitter now

I thought I'd have a go at Twitter. I'm jamesrcole.

Saturday, April 04, 2009

What does it mean to be open-minded? (video)

What does it mean to be open-minded? I think there's a lot of confusion about this. The following animated video (10 mins) does a lot to clarify.

The video author's criticisms are perhaps a bit too direct, but I think his points are good and the graphics and animation are used well.

Friday, April 03, 2009

Antipodies map

[Update: this map, or at least a similar one, can now be found here]



If you dug a hole through to the other side of the earth, where would you end up? The web-based Antipodies map lets you find out.

Just locate your present location and it'll show exactly where the opposite side of the world is.

Tuesday, March 24, 2009

Articles on some effective newer UI techniques

Mega Drop-Down Menus - which get a big thumbs-up from Jakob Nielsen. He likens them to the ribbon found in the latest version of MS-Office.



Contextual User-Interfaces. Chris Mahon gives some examples. They let the user perform relevant actions without having to shift context. And as the user performs actions, the UI is dynamically modified to take this new context into account, so the user can perform tasks more quickly and easily.

And while I'm here I'll give another plug to Bret Victor's visionary -- and still very relevant -- paper Magic Ink: Information Software and the Graphical Interface.

"It’s easy to make something incredible."

I believe that having high standards is probably the most important thing required for becoming good at anything.

Rory thinks so too

It’s easy to make something incredible. All you do is, don’t let what you’re doing be shit.
...
It baffles me that people think making really, really brilliant, stupendous, worldshocking pieces of work is a particular challenge. It’s mainly a battle of endurance. The longer you try and deshit something, the less shit it is.

Monday, March 23, 2009

Minatur Wunderland - world's largest model railway

5 min video of Miniatur Wudnerland, in Hamburg, Germany -- the world’s largest model railway, and actually quite impressive.

14kms of track, 6 meter high mountains, and highly detailed scenery that also includes moving cars and boats. The whole thing cycles through day and night every 15 mins.

Thursday, March 19, 2009

British man Sean Hodgson 27 years in jail for crime he didn't commit

Recent DNA tests have shown that a British man, Sean Hodgson, spent the last 27 years in jail for a murder he did not commit, the Times Online reports.

Wednesday, March 18, 2009

Programming is always a team activity

So you've written a bit of code. As time passes and you haven't touched parts of it for a while, they'll start to fade from memory, and if you need to know them again, you'll need to refresh yourself on them.

A week after you wrote a function, you may be a bit hazy on how it works. Six months down the line you might've forgotten all of the function's details. Three years later, you might have forgotten about the existence of the entire module.

Down the line you're no longer that person who knew the details of the code. The more time since you looked at a piece of code, the more it is like you're reading someone else's code.

So the entirety of your work on that code is more like a team effort than an individual one - your current self writing code for, and collaborating with, your future selves.

With the exception of simple, throwaway programs -- this is why you should always write code for others to read, even if you're writing something that no one else will ever need to touch.

Sunday, March 15, 2009

Coworking spaces

I just came across the notion of "coworking spaces"

“Coworking is cafe-like community/collaboration space for developers, writers and independents. Or, it's like this: start with a shared office and add cafe culture.”
I'd never heard of it before - it sounds interesting. These places provide facilities like wi-fi, printing, lockers, coffee and meeting rooms.

It seems like they've sprung up all over the place (at least in the US). Here's a smattering of examples: Office Nomads (Seattle), StartPad (Seattle), CubeSpace (Portland), The Network Hub (Vancouver), thinkspace (Redmond), Work Space (Vancouver).

There's one in Melbourne - OpenHub. Didn't see any others in Australia, though apparently this (Monash Enterprise Center and Business Center) works along similar lines.

There's even some general coworking resources: a wiki and associated blog, and a group on Google Groups.

Clay Shirky: Newspapers and Thinking the Unthinkable

Clay Shirky has an excellent post on the future (or lack thereof) of newspapers. Newspapers are going away, and it'll take us some time to invent alternative venues for journalism.

What Eisenstein focused on [in The Printing Press as an Agent of Change], though, was how many historians ignored the effects of the [printing] press circa 1500. To describe life before or after the spread of print was child’s play; those dates were safely distanced from upheaval. The hard question Eisenstein’s book asks is “How did we get from the world before the printing press to the world after it? What was the revolution itself like?”

Chaotic, as it turns out. The Bible was translated into local languages; was this an educational boon or the work of the devil? Erotic novels appeared, prompting the same set of questions. Copies of Aristotle and Galen circulated widely, but direct encounter with the relevant texts revealed that the two sources clashed, tarnishing faith in the Ancients. As novelty spread, old institutions seemed exhausted while new ones seemed untrustworthy; as a result, people almost literally didn’t know what to think. If you can’t trust Aristotle, who can you trust?

During the wrenching transition to print, experiments were only revealed in retrospect to be turning points. Aldus Manutius, the Venetian printer and publisher, invented the smaller octavo volume along with italic type. What seemed like a minor change — take a book and shrink it — was in retrospect a key innovation in the democratization of the printed word, as books became cheaper, more portable, and therefore more desirable, expanding the market for all publishers, which heightened the value of literacy still further.

That is what real revolutions are like. The old stuff gets broken faster than the new stuff is put in its place. The importance of any given experiment isn’t apparent at the moment it appears; big changes stall, small changes spread. Even the revolutionaries can’t predict what will happen. Agreements on all sides that core institutions must be protected are rendered meaningless by the very people doing the agreeing. (Luther and the Church both insisted, for years, that whatever else happened, no one was talking about a schism.) Ancient social bargains, once disrupted, can neither be mended nor quickly replaced, since any such bargain takes decades to solidify.

And so it is today. When someone demands to be told how we are going to replace newspapers, they are really demanding to be told that we are not living through a revolution. They are demanding to be told that old systems won’t break before new systems are in place. They are demanding to be told that ancient social bargains aren’t in peril, that core institutions will be spared, that new methods of spreading information will improve previous practice rather than upending it. They are demanding to be lied to.

Wednesday, March 11, 2009

Not needing to name or save documents - 'Untitled Document Syndrome' & OLPC

When I'm working with a document in a text editor or word processor, I don't want to be forced to give it a filename, nor do I want to have to manually save it.

It shouldn't need a filename - it should be saved anyway. And if I'd prefer to not give it a name, I should still be able to locate it based on when it was created, last modified, and by searching for terms that I know are contained within it (and perhaps by tags I've given it).

I shouldn't have to manually save it. It should automatically save the content as I type. I don't want it to automate periodic saves, I want it to be like paper - once a change has been made it's recorded and can't accidentally be lost. The user shouldn't even need the concept of 'saving' the document.

Related to this, John Gruber has written a post Untitled Document Syndrome that argues similar points.

Also, the OLPC system seems to work in such a fashion.

Tuesday, March 10, 2009

"More Americans say they have no religion"

Yahoo news, reporting on a recent study of religion in America (other reporting):

Fifteen percent of respondents said they had no religion, an increase from 14.2 percent in 2001 and 8.2 percent in 1990, according to the American Religious Identification Survey.

Northern New England surpassed the Pacific Northwest as the least religious region, with Vermont reporting the highest share of those claiming no religion, at 34 percent. Still, the study found that the numbers of Americans with no religion rose in every state.

Monday, March 09, 2009

Richard Baraniuk's TED talk on the Connexions open-source textbooks system

18 mins


Rice University professor Richard Baraniuk explains the vision behind Connexions, his open-source, online education system. It cuts out the textbook, allowing teachers to share and modify course materials freely, anywhere in the world.

Sunday, March 08, 2009

Jokey insults and threats

A joke is something that is funny.

But then there's things that are presented in a jokey fashion but which are not really intended to be funny.

For example, you can have insults or threats presented in a jokey manner that are really statements of solidarity or respect. E.g. a lowly business person saying the following to a superior"if you could look at that brief that'd be good, otherwise I'd have to do you in", where the last bit is said in an ironic fashion. That's really a statement of respect to indicate that they're well aware of their relative positions.

The case I want to talk about, though, is statements that are presented as if they were jokes but are really just insults or threats presented in a jokey manner. That is, insults or threats passed off as jokey statements.

The jokey manner may include a wink appended to the end of a written statement -- not that you guys are likely to understand what i'm talking about ;-). Or a chuckle or giggle appended to a verbal statement. Or they might be in the form of over the top threats like "...or we'll beat you to a bloody pulp - ha ha".

These aren't actually funny and aren't intended to make the person laugh -- even if social forces may compel them to do so.

As you may have guessed, I quite dislike these sorts of statements. Even if they're only carrying a quite minor barb, there's something dishonest there. Though I don't like this term much, childish comes to mind.

Thought: program hibernation

I can hibernate my laptop so it doesn't drain the battery when I'm not using it. What if I could hibernate individual programs, like my web-browser?

I usually have scores of web-pages open in my browser, and just having it open, even if I'm not actually using it, uses the processor -- often quite a lot of it -- and drains the battery.

So I might leave the house in the afternoon to go out and do some PhD writing at a coffee shop. I won't be using the browser there, and I don't want it to drain the battery, so it'd be nice if I could hibernate it.

That'd be quicker and easier for me than manually closing it down and then manually reloading it all, and guarantee that when I bring it back up everything is in the exact same state.



Current operating systems may have quirks that wouldn't make this feasible, but of course that doesn't mean there's anything inherently impossible about the idea.

Thursday, March 05, 2009

Information hiding for flyweight code units

To make code more readable we divide it into units like functions, objects and modules. Following the principles of information hiding we give these units meaningful names that express what their function is, and supplement that with comments providing additional details.

Once a person reading the code is satisfied that those statements do what the name or description says, they can skim the code by paying attention to the names/comments but skimming the details how how the named functionality is implemented. It helps conserve precious mental resources.

There are units of code smaller than a function –- a number of lines of code within a function that togther perform a fairly coherent function like reading a file -– that you want to be able to apply the principles of information hiding to.

I’m talking about cases where separating the lines of code out into a separate function would be too heavyweight a solution – doing so wouldn’t be worth the effort and would actually decrease the code’s readability.

One difference between these and the other units of functionality is that they don’t have some sort of explicit delimiter to indicate their start and end, and this makes the task more difficult. If you put the comment at the start of the lines, does it apply only to the first line or to all of them? If there’s uncertainty you have to look at the code to resolve it, thus destroying the good information hiding properties.

If you have a convention –- that it always applies to all the lines of code till the next blank line, for example -– then you have to learn and remember the convention, and other programmers can always break it by accident or forgetfulness or from simply not knowing it. And if you want to be able to have blank lines within that set of lines of code -– which is often useful to do -– then you have to have an even more complex convention.

Here’s a code formatting idiom that provides a solution to the problem. Write a comment at the start of those lines of code that names/describes the functionality they implement, and then indent all of the lines implementing the functionality:

function X()

statement before task

// comment describing task

statement implementing task
statement implementing task

statement implementing task
statement implementing task

statement following task
statement following task




A language could go a step further and have a way to use an explicit label instead of the comment, as in:
function X()
statement before task

readFile:

statement implementing task
statement implementing task

statement implementing task
statement implementing task

statement following task
statement following task

This could
  • encourage a concise description of the function being performed
  • be used for documentation purposes
  • make it easier for an editor to collapse/expand sections -- i.e. collapse the code 'contained' in the label, so it just shows the label.
  • support refactoring by having operations turn one of those sections into a full-blown function.
I don't know whether such labels would be better to have or not.

Tuesday, March 03, 2009

Thought: A Stack Overflow for finding research material in a subject area

Quick sketching:

Here's an idea for a website.

If you wanted to do some research that touches on a field you didn't know that well and wanted to find out what material -- previous research and so forth -- was relevant to your topic, it'd be useful if there was a dedicated website for asking such questions, where you could get responses from people with expertise in the field.

I'm thinking of a site designed like Stack Overflow, which can build up a refined body of knowledge.

Ideally, it'd be a exchange of information between disciplines, and between those with expertise and newcomers. It'd help research that crosses disciplinary boundaries. It could also help out students that are new to an area, or people undertaking amateur research (which I think is important). It could help academia open up a bit more. These are of course just lofty possibilities.

I imagine some people would not want to make such things easier - seeing it as somehow cheating. I don't see it that way. The idea is to help reduce the friction in undertaking research, and give people more time to focus on the more central aspects of research - finding patterns, synthesising new ideas, etc.

If there were something like this, it'd probably be good if students / academics got some amount of institutional recognition for contributing answers. Like they do for for writing papers (not saying it should be the same amount of recognition of course).



It wouldn't have to be a website, it could be the name of a tag -- like existingMaterialReq -- used in blogposts and/or Twitter to get help from the lazyweb. Probably the most important thing is simply to name and communicate this notion of a request for relevant material in an a subject area.

'The Minute Glass' alarm clock

The Minute Glass is a design concept for an alarm clock that forces you to shake it vigourously for around 30 seconds – and hopefully thus properly wake up – in order to turn the alarm off.

Monday, March 02, 2009

"Syntax highlighting" for diff

I just saw a reference to Sentdiff -- take a diff by sentence, not just by line -- over on Hacker News. I'd like to see a diff program that allows you to customise how it shows changes. Is there anything like this?

What are alternative ways to show changes? Consider Word's track changes feature, for example:



The best way to show changes, including what you want to consider as the 'units' that are being changed -- sentences, lines, etc -- really depends upon what the information in the document represents.

Perhaps you might want to show changes to a datafile with tabular or CSV structure differently to a file containing C code, for example. Or perhaps you might want to handle two different tabular-data files differently, because the types of entities they are describing are different - you parse them differently when you read them, or you think of them in some sort of different way... I feel pretty sure there's examples out there.

Think of it as like how text editors allow you to specify different syntax highlighting schemes, that colour different aspects of the documents in different ways, reflecting what the information in the document represents.

For that matter, it'd be good if a diff program could highlight syntax in exactly the same fashion as a text editor does - so if you're viewing a diff of a Java program, the document fragments it shows are shown with Java syntax highlighting.

Sunday, March 01, 2009

Jorn Barger on what Twitter is useful for

For someone who (like me) has never used Twitter, this summary of what it's useful for seems pretty insightful.

Friday, February 27, 2009

Idea: defining functions within functions

Are there any programming languages where you can define functions within other functions? I think it'd be useful - in situations like this:

function X is used, and only used, within function A. X is really just a part of A that has been broken away to better structure the code.


function A()
{
function X()
{
blah blah
}

blah blah
X()
blah blah
}
If you defined X within A -- like at the start or end of it -- this would make the structure of the code more explicit. When you came across X you'd know straight away, and for certain, that A was the only place it was used.

The motivation for this is pretty similar to that of defining functions within objects or within modules.

Wednesday, February 25, 2009

On having lots of choices

A post on Signal vs Noise quotes Eknath Easwaran's Take Your Time—Finding Balance in a Hurried World (chapter 5):

People are subject to trifling likes and dislikes every day. There seems to be no end to the division and subdivision of taste. In India, in those days, if I wanted ice cream after a meal, I simply ordered ice cream. At most there might have been two or three flavors; often there was only one. Today I have one hundred and forty-seven varieties to choose from, and it’s not enough to want chocolate; I have to decide between possibilities like Dutch, Bittersweet, Super Fudge Wonder, and Chewy White Chocolate Macadamia. (Often I just tell the clerk, “Give me the one you like best.”) And for coffee I have to specify French Roast, Colombian, Kona, or one of a dozen other varieties. I know people whose whole day is affected when they can’t get the coffee they like, made just the way they like it. As our preferences get fractioned finer and finer like this, the range of what we can tolerate narrows to a slit—in everything, because this is a habit of the mind.
To which I added a comment
I think that’s a bit muddled.

It makes the reasonable point that you don’t always want to be presented with a bazillion choices, especially where there’s only small differences between them.

But it comes across a complaint about choice, as if it was all bad. Lots of choices is, itself, not a problem. It’s when you’re forced to deal with them at once.

Would you prefer to live in a city where there’s only three different meals you can ever have for dinner, or would you prefer to live in a city where there’s a large variety of different ethnic cuisines available?

The quote also suggests that having fine-grained preferences - wanting White Chocolate Macadamia - means inflexibility: only being satisfied by that. “As our preferences get fractioned finer and finer like this, the range of what we can tolerate narrows to a slit”.

But that’s not necessarily so. At particular times, at particular places, in particular moods, I might feel like that flavor, and at other times and places, I might want something else. We get bored and want to try new things.

And if you’ve only got a few options available, isn’t it easy to develop prejudices? We probably all know people who grew up eating one type of food and won’t dare touch food of an unfamiliar cuisine.

If you’re beyond a certain age, you’ve probably gone from growing up in a world with fewer choices to a world with many more choices. Perhaps this means we didn’t develop very good skills for handling choice. Perhaps the kids of today will manage much better? I don’t know, but this possibility seems to get overlooked.

Sunday, February 08, 2009

The Immobolised Pefectionist and the Persistent Perfectionist

Perfectionists are often portrayed as overly finicky people who can't produce anything if it isn't perfect, who thus can't get started and never get anywhere. We can call these people immobilised perfectionists.

But I think there's another meaning for 'perfectionist' that tends to get overlooked. This is the persistent perfectionist, who has really high standards - and is persistent in trying to meet them.

They appreciate that perfection is not immediate and that they won't be particularly good initially. They appreciate that it'll take a lot of practise to get really good. Because they're persistent, they won't stop trying trying to improve until they’ve met their really high standards.

Here's an example of an (otherwise good) post that treats 'perfectionism' as if it could only mean immobilised perfectionism.

Saturday, February 07, 2009

Another e.g. of seeing software only in functional terms: the claim that choice of impl language doesn't matter

I've written that IT people have a tendency to look at software only in functional terms: 1, 2 and 3.

Recently I came across a post about this (but not described in these terms) The "Any Competent Programmer" BS

In it, the author comments on the claim that "A professional team can develop quality software whatever the chosen implementation language and toolset."

He says

The claim, though, begs the question of how much it costs, in time and money, to develop that quality software using a chosen language and toolset. And whether a different choice could lead to quality software being developed faster and more cheaply, thereby encouraging the creation of even more quality software.
And he also points out that that claim is analogous to the "Any competent programmer can write good code in any language" trope.

Tuesday, January 13, 2009

Anand Agarawala's BumpTop desktop user-interface (video)

I think this has promise

Here's what it looks like:




And here's a 4 1/2 min video demonstration:



TED page for this demonstration

Sunday, January 11, 2009

Monday, January 05, 2009

Time management and balancing energy levels

Time management is a big issue for many of us. I've spent a fair bit of time trying to get better at it.

I read Covey and Merrill's First Things First, which I thought was pretty solid, if perhaps a bit abstract and heavyweight. Probably it's main point is that you have to focus on what counts rather than what is urgent.

(I've also heard quite good things about David Allen's Getting Things Done, though I haven't read it.)

I'd say I'm not bad at it now, but I realised that I'm lacking a good understanding of something that is crucial to time management - balancing your energy levels. You can easily get worn out and not be very productive. So you need to take time out to refresh and recuperate.

That's pretty obvious. But isn't so obvious how to, in practice, actually do it effectively. So yes, if you rush through things that can drain your energy, but then if you're totally relaxed and take as much time as you want, you won't be so productive - so the question is, where is the sweet spot?

Or take exercise as an example. They say that exercise gives you more energy. But how much exercise should you do? (And are some types of exercise more effective in this regard than others?) What is the sweet spot, so you end up having the most amount of productive time for getting things done?

The key point is that you really need to have a good understanding of the factors that effect your energy levels, and how they do so, and how much they do so, so that you can effectively manage them.

Of course, the details would vary from person to person but I suspect there's enough common ground there to at least weed out common, and ineffective, misconceptions about balancing energy levels. If there's not a book on this already -- and I haven't seen one -- there's an opportunity for one to be written. Ditto for personal consultants on this -- like a type of personal trainer for managing your energy levels.

Monday, December 15, 2008

Ideas for 'weather forecasts 2.0'

Sometimes I’ll go to check the weather, and end up at sites like these.

One gives me info for each day of the current week for the city I live near. For example, it tells me that Friday has a forecast of ‘Isolated Thunderstorms. Mostly Cloudy. Warm. Humid.’ Wind ‘16 km/h NNE’, Rain ‘3mm (42%)’, humidity of ‘69%’ and a min and max temp of ’20 and 30’.




On the other I can see a radar image of any storms moving in – which is useful if you’re leaving work and wondering whether you’ll beat the storm home.



Here's a quick sketch of some ideas for extending such services.

  • Make them more finely-grained
    • Instead of just the forcast for today, what is the forecast for the evening, or for 10pm?
    • What is the forecast for 10pm for the specific place I live (rather than just the general city area). Is it likely, from the cloud coverage and movements, that it'll be raining at my place then?
  • Longer-term predictions
      What is our best possible estimate of the general conditions two months from now? Which weekend, around two months from now, is the safest bet (of avoiding rain) for that outdoor barbeque I've been wanting to organise?
      • I'm presuming there's a lot of modelling and historical data that could be used to make better-than-chance estimates.
  • Visualisation of weather trends.
  • Integration with calendars.
  • Customisable email/RSS alerts
  • Photos of what things look like -- from different places, in different directions -- so you could actually see what an approaching storm looks like, for example.

These are just some quick thoughts - it's not really a topic I have a strong interest in, and I don't know whether there's presently (or in the works) anything out there that does any of these. Here's a place you could start.

Sunday, December 14, 2008

Wikipedia's list of common misconceptions

Wikipedia's long list of common misconceptions (along with details of the truth of the matter in each case). Misconceptions such as that

  • Napoleon Bonaparte was especially short.
  • searing meat "seals in the juices"
  • seasons are caused by the Earth being closer to the sun in summer than in winter.
  • shaving causes hair to grow back thicker or coarser.
  • earthworms become two worms when cut in half.
  • Inuits have a large number of words for snow.
...and many many more (though the list is far from complete).

Sunday, December 07, 2008

.

 
"That perfume, my dear, is delightful. It has the most wonderful nose flavour"




i thought that term sounded funny.

Sunday, November 30, 2008

Magic/Replace - an interesting 'show by example' way to clean up data

Magic/Replace looks pretty good – going by their screencast demo (2 mins). It allows you to simply and intuitively clean up spreadsheet data.

Once you've pasted (or uploaded) your data into their webform, you can make changes to a cell, and the system will intelligently apply the same kind of change to all the other cells in the same column.

For example, if you changed a cell containing the phone number 0987123532 by putting in some spaces so it became 0987 123 532, the system will put the same spaces into all of the other phone numbers.

It can handle quite complicated changes, like combining three separate fields ‘firstname’, ‘middlename’, ‘surname’ into a single name field with the format ‘surname, firstname middle-initial’. See the screencast for some other examples.

It looks like the system is available to use for free - you can try it out now. I haven't played with it much, so I don't know how well it works in general, but I think that at the very least they’re onto something with the way the system works – the principle behind it.

It’s great that the user doesn’t have to explicitly describe the changes they want to make – like by writing some sort of code. They can just do it; and the system can work out the analogous changes for the other instances of that field. I say ‘analogous changes’ because the other instances of the field will contain different data, so the system has to look deeper than just the superficial details of the changes the user made.

(Douglas Hofstadter argues that the ability to make analogies is a central aspect of intelligence. He’s got a book on this Fluid Concepts and Creative Analogies. I haven’t read it, but the idea that ability to analogise is important sounds sensible to me).

.

Discussion of the tool on Hacker News here.

Thursday, November 27, 2008

'Chemicals' per se, are entirely natural

In marketing and advertising, 'chemicals' equate to 'harmful' and 'dangerous'. Companies like to parade the lack of 'chemicals' in their products. Can things be 100% chemical free? The public seems to think so.

But the Royal Society of Chemistry is offering a £1 million prize to the first member of the public who can provide a sample of any material whatsoever that is 100% chemical free.

The truth, as any right-minded person will say, is that everything we eat, drink, drive, play with and live in is made of chemicals - both natural and synthetic chemicals are essential for life as we know it.
[...]
"Should anyone [be able to claim the prize], we will see thousands of years' worth of knowledge evaporate before our eyes. We would have to tear up the textbooks, burn the degree certificates and retrain the teachers."
[...]
The Advertising Standards Authority (ASA) recently defended an advert which perpetuated the myth that natural compounds are free of chemicals. [...] The manufacturers of a popular "organic" fertiliser recently [claimed] in promotional materials the product contained no chemicals whatsoever.

Of course there are harmful chemicals, but the reason they're harmful isn't because they're chemicals. When most people use the term 'chemicals' they're really referring to something else - but what exactly that category is isn't something I'll try to get into here.

Wednesday, November 26, 2008

Google Maps Street View as a historical record

I heard today that the street view in Google Maps has been upgraded (the improvements are pretty good too).

I was checking it out and looking at a place that I know is going to be demolished (not the place that link is to), and it made me think that the street view data could, in the future, be used as a (pretty comprehensive) historical record of what a place looked like at a particular point in time.

A lot of the places I've lived in have changed quite a lot over the years, and I always think it's a shame that there's probably no comprehensive record of what they used to look like (even though there's probably scattered coverage from people's private photo collections).

It's a shame from the standpoint that your memories are linked to what the place was like then, and once the place has changed, part of your past is gone. A visual record can help you connect back to it.

Tuesday, November 25, 2008

How to save SMSs from a Sony-Ericsson w7000i phone to your computer

Just as you might want to save letters or emails you send and receive, I like to save my SMSs to my computer.

But that didn't seem possible with my Sony-Ericsson w7000i phone. You can't with the software the comes with it, and I seem to remember talking to a phone guy a few years ago who said you couldn't do it.

But I discovered today that you can use the My Phone Explorer software (Softpedia, Wikipedia). Works great. It's freely downloadable.

(found via this page, via this forum discussion page, via this google search).

Sunday, November 23, 2008

Using Wikipedia as a source of canonical tagnames

Say you want to tag a blogpost as being about ten pin bowling. What name do you give the tag? Here's some possibilities:

tenpinbowling
bowling
ten_pin_bowling

As a convention, you could try to find a Wikipedia article for that subject, and use the name used in the article's URL.

In this case it's http://en.wikipedia.org/wiki/Ten-pin_bowling

so you'd use the tagname

Ten-pin_bowling

a potential bonus is that you could have it create an automatic link to the Wikipedia article.

The idea of this Wikipedia tagname convention is to have a canonical source for tagnames. (and I suppose it would also help make the Wikipedia article the canonical source of basic information about a topic).

Having fewer different names for referring to the same thing ought to be useful, and make it easier to find all the different bits of information talking about the same thing.

By the way, you could also have tools that automatically suggest these tagnames. E.g. you could select the text in your blogpost that mentions ten pin bowling, and the tool could automatically search wikipedia, get the URLs of the articles matching, and present you with a list of potential tagnames.

Tuesday, November 18, 2008

Alien-looking ants nest - filled with concrete then excavated (video)

Want to see what an ants nest looks like? First, fill it with concrete, then excavate.


Unfortunately the video only shows what it looked like when they were part of the way through the excavation, and doesn't give a really good sense of its overall shape.

Vid-caps







'Technique' by Amon Tobin

Since June, Amon Tobin has been releasing a new track on his website at the start of each month (for a US $1.99 download). I think the latest one 'Technique' is pretty awesome.

You can hear a sample of it here. Under the picture it says '$1.99', and just below that there's an arrow pointing at a short green line - click that arrow.

(My next favourite one -- which took a while to grow on me -- is 'Shut Down').

Sunday, November 09, 2008

Images from Burning Man

Funtasticus has a bunch of images from Burning Man. These are my favourites:



Thursday, November 06, 2008

US election result videos, etc

Obama's acceptance speech is pretty impressive. McCain's concession speech is quite good too. I've embedded youtube versions of them below.

Another thing about today’s historic events is that from now on, little boys and girls all over the world will know that being a ‘white man’ is not an absolute necessity for attaining even the most powerful position in the world. It makes me wonder what greatness that knowledge will help unlock.


Obama's acceptance speech

Part 1



Part 2


Part 3




McCain's concession speech



I am quite curious to know the opinions of people around the world on these election results, especially people in places like the Middle East. Surely this must change the "person in the street"'s opion of America? But how much and in what ways?

I don't know. I thought it might be interesting to have a look at how some international news sources were reporting it, but it seems too hard (unless perhaps you had a lot of time to spare) to really get much of a sense.

I also found it interesting to see how much those sites (or at least the English versions of them...) used the Reuters or AP stories about the electon rather than ones of their own. (and I should say that I have no idea how representative any of these papers are of the media in their respective countries).

If you're curious, here are some of the sites I looked at: Al Jazeera, The Star (Malaysia), Times of India, Xinhua (China).

Thursday, October 30, 2008

"Fan menus" for user-interfaces

I just had a look on this page on pie-menus as an alternative to the usual 'vertical list' menus in most user-interfaces. I also had a quick skim of the comments, where there was some discussion about the pros and cons of both types of menus. E.g. while pie menus can be faster, the radial layout makes it harder to scan the available options.

And it made me wonder if there was a middle ground between the two. I have no idea whether this idea has been suggested before, but here goes... you might call these "Fan menus" (I'm thinking here of the asian foldable paper fans).

In this first picture, the user has clicked the mouse and the fan menu appears. Note that the main body of the menu itself appears to the side of where the mouse is clicked.



In this second image, the user has moved the mouse into the fanned out element for the third menu item. The selection process is similar to in a pie menu.


In this picture, the user has moved the mouse down to select the fourth item.


Naturally, there's potential issues with such a design, but I thought it'd be interesting to think about.

Unseen practice is easily mistaken for brilliance

as the title says
 

Unseen practice is easily mistaken for brilliance




This applies to sport, intellectual endeavours, etc

Monday, October 27, 2008

How to get rid of Vim's temp files

The default behavior in Vim when you save a file is to also put temporary files in the save directory. I'll explain how you can stop it from doing this. (I don't know Vim that well, but the following works).

What happens is that if you save a file called 'weeklyReport.txt' it also stores a temporary file with the same name appended with a tilde 'weeklyReport.txt~'. It also stores a swapfile there.

I found this really annoying, as it makes it awkward to scan the list of files in the directory (and the files were getting into my version control system - and yes, I'm sure I could find a way to avoid them getting in there, but I think the better solution is to not have them in the directory in the first place).

Here's a solution I found (I'm using it on Windows, but the only difference on other systems should be the file system syntax for specifying directories).

Open or create your settings file.

Here's some deails if you're not familiar with doing this.

When you install Vim, you've effectively installed two programs: Vim (the terminal version), and gVim (the GUI version), and each has its own settings file. For Vim, it's <VimDirectory>/_vimrc. For gVim it's <VimDirectory>/_gvimrc.

A note on what I mean by <VimDirectory>: the actual exectuable files are stored in a directory containing the vim version number - on my computer it is C:\Program Files\Vim\vim72. This is not the <VimDirectory> I'm referring to - the one I'm referring to is the parent directory of that, in my case C:\Program Files\Vim
Add the following lines to it (it shouldn't matter where):
" turn on backup
set backup

" Set where to store backups
set backupdir=c:\temp

" Set where to store swap files
set dir=c:\temp
This will store the tilde and swap files in c:\temp - you can change the directory location to wherever you want.



I found this soultion here, via this, and that via a google search.

Saturday, October 25, 2008

Apple's design lesson

It used to seem that plain, unadorned design

had to mean dull looks and boxy shapes.

But Apple have shown us that plain, unadorned design

can mean sleek and sexy.







I'm sure Apple aren't the first or only people to do this, but has anyone else made the point so strongly?

Tuesday, October 21, 2008

Moving the cursor around in the vi text editor

Moving the cursor around in the vi text editor

Note: so far, this is an incomplete list, and I'm experimenting with the way of presenting the keystrokes - the keys to press are specified in superscript text. Hopefully it's not too hard to work out.

There’s the usual options

  • lefth or rightl, upk or downj
  • start/end of: 0line$, {paragraph} or [[document]]
But also more powerful control
  • start/end of: bprevious-wordge or wnext-worde
    where a ‘word’ is anything delimited by non alphanumeric chars.
    There’s a parallel set of commands for which a ‘words’ delimited
    by whitespace:
    • start/end of Bprevious-wordE or Wnext-wordE
  • first non-whitespace char^ on line
  • end of the nth line downn$ from the current one
  • nextf<char> or previousF<char> occurrence of char on the line
    • or the character before the nextt<char> or previousT<char> occurrence
    • the nth next occurrence of char on the linenf<char>

Colin Powell's endorsement of Obama (video)


Sunday, October 12, 2008

Coconut milk, garlic and green-chilli dahl

updated, 9.4.09 and 21.01.2020

This dish is near perfect. It's so simple, yet so good. It's surprisingly flavoursome, given that it's only lentils, garlic, onion, green chillis, tumeric and coconut milk. Somehow the flavours combine so well, and the fragrance of the green chillis adds so much.

It's also very quick and easy to prepare, compared to most Indian dishes or other dahls.

If you cut most of the seeds from the chillis (as I do) the dahl isn't chilli hot. The flavour of the dish doesn't suit being too chilli hot.

Thanks to Mangalam for the recipe.

  • Red lentils, 1 cup
  • Garlic, 5 cloves
  • Onion, a small amount (cut out a wedge ½ cm thick at its thickest edge)
  • Tumeric powder, ½ tsp
  • Green serrano chillis, 1 or 2
    • it's important to use green serrano chillis, not jalapenos or red chillis. So much of the flavour and fragrance of this dish comes from chillis, and jalapenos don't have the right type of flavour or fragrance, and red chillis don't impart much fragrance or flavour.
  • Coconut milk, about 100ml
    • for a richer flavour, you can add more, or use coconut cream instead
  • Salt
  • Black pepper

Green serrano chillis.
Use these for this dish, not jalapenos or red chillis.
(image source)


Add the lentils to a saucepan and wash them till the water runs clear.

Add enough water to cover the top of the lentils by about 1cm.

Put it on a high heat.

Finely chop the onion and garlic and add them to the pan.

Add the tumeric.

Once it's boiling, turn it down to a brisk simmer. Stir occasionally so it doesn’t stick to the bottom.

Slice the chillis in half and take the seeds out.

The lentils should take about 20-25 mins to cook. You want them to be fairly broken down, so the dahl is relatively smooth. It's no big deal if they're still a bit rough, however. Add more water if it gets too dry at any point. If it's still too liquidy after 20-25 minutes, cook it longer to evaporate more of the water.

Once the lentils look cooked, add the chillis and cook for 3-5 mins.

Add the coconut milk, stir and cook gently for another couple of minutes.

Add salt and pepper to taste.

Remove the chilli pieces.

It's now ready to eat.


Notes:
  • If you want to add some vegetables, cauliflower goes well with it. Add some chopped cauliflower a couple of minutes before the end. The base recipe is so perfect, though, that I prefer it without any additions.
  • The chillis only need to be chopped in half because their function is to infuse their flavour and fragrance into the dahl. We remove them at the end. Their texture wouldn't be very nice to eat and they wouldn't add anything to the end result. You don't want to chop them into smaller pieces and leave them in the dahl, either. Their skin is a bit tough, and wouldn't be very pleasant to eat (it's not -- I've tried it), against the smooth texture of the dahl.

Friday, October 10, 2008

SvN: 'Do it yourself first'

Do it yourself first

You should never hire anyone for something you haven’t first struggled to do on your own. It’ll teach you most of what you need to know to actually interview candidates, it’ll allow you to understand the nature of the work better (do I even need to hire or can we outsource?), and you’ll know exactly what a job well done will look like. It’ll also give you a sense of whether the job is big enough for a full-time hire yet or if you can skimp by on your own (the latter is preferable if possible).
Sounds quite sensible. He also talks about the benefits for managing the roles and being able to empathise when the going gets tough.

Monday, October 06, 2008

Sweet Potato and Bean Enchiladas

Sweet Potato and Bean Enchiladas

In this vegetarian dish you get a nice melding of the flavours of the sweet potato and the beans.

Based on this recipe.

Makes 12 enchiladas

  • orange sweet potato, enough to fill 4 cups when mashed.
  • vegetable oil, 1 tablespoon
  • onion, 1, chopped
  • garlic, 4 cloves, minced
  • canned kidney beans, 6 cups, drained
    • Or some other beans like black beans or pinto beans. You could also use refried beans, or a mixture of kidney beans and refried beans. Just remember that a can of refried beans contains a greater volume of beans than a can of whole beans would -- so, for example, if you used 4 cans of kidney beans, you might use 3 cans of refried beans.
  • water, 2 cups
  • chilli powder, 3 tablespoons
  • ground cumin, 3 teaspoons
  • mustard, 4 teaspoons
  • soy sauce, 3 tablespoons
  • flour tortillas, 12 (10 inch), warmed
  • cheddar cheese, 225g, grated (you don't really need to measure this - just grate as much cheese as you like over the enchiladas)
  • Preheat oven to 175 degrees C
  • Prepare the filling
    • Bring some water to the boil, boil cubes of the sweet potato, drain out the water, then mash it.
    • Heat oil in a medium frying pan, and saute onion and garlic until soft.
    • Stir in the chilli powder and cumin, and continue stirring for a bit (probably a bit less than a minute would be enough).
    • Stir in the mustard and soy sauce.
    • Stir in beans, and mash.
    • Add in the mashed sweet potatoes.
    • Gradually stir in water, and heat until warm.
  • Make up the enchiladas
    • Divide the mixture evenly between the warm flour tortillas.
    • Top with cheese.
    • Roll up the tortillas (you want to make something a similar size to cannelloni -- I think the flavour/texture suits making them this size rather than something too much bigger in diameter) and place on a baking sheet.
  • Bake for 12 minutes in the preheated oven, and serve.
Can serve with sour cream, chopped spring onions and salsa. One of the comments on the original recipe suggests serving with fresh mango slices and avocado slizes sprinkled w/ lime & salt.

Thursday, October 02, 2008

WALL-E

Wow. It’s a pretty impressive film, especially when you consider how unpromising the setup sounds.

The two main characters are robots. WALL-E is a waste compaction robot whose body is essentially just a cube. He has two arms but catipillar treads for legs. He has two lenses for eyes but no other facial features. Eve is a egg shaped scout robot who flies around the place and whose body is pretty much featureless except for two arms and a pair of glowing eyes.

There's hardly any dialogue; pretty much the only things WALL-E and Eve ever say is their own name or the other’s name. They do express a lot of body language, though.

Most of the action takes place on a desolated future earth, covered with garbage (WALL-E’s job is cleaning it up) and devoid of life. There are some humans, later on in the picture, but they’re secondary characters – and have little traditional appeal (they’re lazy and obese, not good looking).

But with all this Pixar have put together a wonderful movie – a love story between the two robots – that is both very funny and quite touching.

Sunday, September 28, 2008

Grrrrrr!!!

I have been trying for the last hour to make a simple credit card payment on the net, and no matter what I try it doesn't work, and it doesn't give me any feedback as to why the payment was rejected (and I've checked that I have enough money in my Credit Card account). I've made plenty of such payments before with no hassles. It's driving me crazy :-)

Update. I received the following email from the company

I am afraid we had issues over the last 12 hours in processing credit cards due to an error with our Acquiring Bank and Payment Processor; this resulted in many orders being cancelled, including your orders.


We are very sorry if this has caused any problems, but due to the timing we were not aware of the issue until this morning.


We now believe everything is working okay, so you should be able to place your order successfully.

Saturday, September 13, 2008

“Formatted paste” feature for text editors

“Formatted paste” feature for preserving bold, italics and underlining formatting in text pasted into a plain text document, using the plain-text formatting conventions *bold*, /italics/ and _underlining_

Say you’ve copied some text from something like a Word document or a PDF document that contained bold, italics or underlining formatting. If you want to paste that into a text editor, you lose that formatting.

The “Formatted paste” feature would preserve it, using the common plain text conventions for representing such formatting: asterisks for bold text (like this: *bold text*), forwards slashes for italics (like this: /italicized text/) and underscores for underlining (like this: _underlined text_).

For example, the “Formatted paste” would automatically put underscores around bits of text that were originally underlined.

If you're wondering, I just suggested this feature to the makers of the two Text Editors I use TextPad and NoteTab.

Thursday, September 11, 2008

'Swipe' technology for touchsreen text input

It's a very neat idea - the touchscreen displays a keyboard, and you just draw a line with your finger that passes over the letters you want and it figures out what you're trying to type. If this works as good as it seems in the demo, this is going to be everywhere soon. See the (2 minute) video.

Wednesday, August 13, 2008

Gujerati Carrot Salad

Gujerati Carrot Salad

(adapted from Madhur Jaffrey's Indian Cooking)

This very simple salad tastes great. Even though it's an Indian dish, it isn't at all spicy (in flavouring or heat). It's essentially just grated carrot and cooked black mustard seeds, which have a nutty taste that really compliments the carrot. It'd go well with non Indian food as well.

  • carrots, 5, coarsely grated
  • salt, 1/4 tsp
  • vegetable oil, 2 tbsp
  • whole black mustard seeds, 1 tbsp
  • lemon juice, 2 tsp
  • In a bowl, toss the grated carrots with the salt
  • Heat the oil in a very small pan over a medium flame.
  • When very hot, put in the mustard seeds.
  • As soon as the mustard seeds begin to pop (this takes just a few seconds), pour the contents of the pan (the oil and seeds) over the carrots.
  • Add the lemon juice and toss
Can be served either at room temperature or cold.

Monday, August 04, 2008

Bill Gates: Making Capitalism More Creative

Making Capitalism More Creative by Bill Gates. I think it's worth a read.

[Update: the article is no located here]