Wednesday May 11, 2011

Best practices for linking libraries (part 1)

A while ago I was looking into some application start up problems. The problem turned out to be an issue relating to the order in which the libraries were loaded and initialised. It seemed to me that this was a rather tricky area, and it would be very helpful to document the best practices around it. I thought this would be a quick couple of pages, but it turned out to be a rather high page count, and I ended up working on the document with Steve Clamage (with Rod Evans helping out).

The first part of the document is available. This section covers basic linker good practices. Using -L and -R rather than LD_LIBRARY_PATH, generating relocatable code etc. The key take aways are:

  • Use -L to specify the path to where the libraries can be found at compile time.
  • Use -R to specify the location of the libraries at run time.
  • Use the token $ORIGIN to specify a relative path for the libraries' location. This avoids the need to have a hard-coded location where the libraries can be found.

Sunday Nov 21, 2010

Who am I?

Over the summer I was asked if I would do an interview to illustrate what University of Southampton graduates can end up doing. The discussion I had with Karen was great fun, and the resulting profile seems to have turned out ok. I always find these thing hard. It's one thing writing a technical document, but quite another to collaborate on something more personal. The family joke is that the acknowledgments was the hardest section of my books for me to write.

Whilst I'm talking about university life, I was surprised to find my PhD thesis listed (but unavailable) at

Tuesday Oct 27, 2009

Programming and electronics for kids

I've been continuing to look into programming and electronics for kids. I wrote some of the programming options up a while back. Scratch is still a firm favourite.

On the list of things to try we have brickcc to try out with the lego NXT. Here's an old comparison of the various approaches to programming the NXT brick.

The other on-going project is a microcontroller - the STM Primer. Includes a screen, tilt sensor, and a single button.

On the electronics side (which is what lead me to microcontrollers in the first place), this is a nice article on kits for kids, and a second earlier one. There's also a bunch of kits available at makershed (the most surprising one is an EX-150, which is a couple of kits up from what I had. I think I had the EX-60). Here's a list of some microcontroller starter kits, and a different list of microcontroller like options.

Monday Oct 26, 2009

Things to see in Dorset

We spent a bit of time in Dorset on our trip home. Interesting things that we missed seeing giant sea monsters and unexploded bombs.

Wednesday Oct 21, 2009


One of the things I didn't manage to do on our recent vacation in the UK was to visit Greenwich Observatory. This is the "home" of Greenwich Mean Time. The BBC has a nice article on the history of GMT. Perhaps next time....

Thursday Sep 03, 2009


I was chatting to one of the kids teachers this morning, apparently she ends up tying shoelaces for a bunch of kids in the class everyday. All of which reminded me of this alternative way of tying laces.

Saturday Aug 29, 2009

Doctor Who exhibition in Coventry

We've recently returned from a vacation in the UK. We had a fun time, the kids got dragged around all sorts of entertainments. One thing I did manage to squeeze in was a trip to the Doctor Who exhibition in Coventry. It took us about forty minutes to wander through, and look at the props from the show. It's a temporary show being held at the Coventry Transport Museum, so after lunch we wandered through that. The transport museum had some interesting vehicles - a De Lorean, Thrust II, and Thrust SSC. A grand day out.

Thursday Jun 11, 2009

Code complete: burn this chapter

That's a somewhat inflammatory title for this post, but continuing from my previous post on the book Code Complete, I think that the chapters (25 & 26) on performance really do not contain good advice or good examples.

To make this more concrete, consider the example on pg 593 where Steve McConnell compares the performance of these two code fragments:

for i = 1 to 10
  a[ i ] = i
end for

a[ 1 ] = 1
a[ 2 ] = 2
a[ 3 ] = 3
a[ 4 ] = 4
a[ 5 ] = 5
a[ 6 ] = 6
a[ 7 ] = 7
a[ 8 ] = 8
a[ 9 ] = 9
a[ 10 ] = 10

Steve finds that Visual Basic and Java run the unrolled version of the loop faster.

There's a couple of examples that talk about incorrect access ordering for arrays. Here's some C code that illustrates the problem:

Slow codeFast code
for (column=0; column < max_column; column++) 
  for (row=0; row < max_row; row++) 
for (row=0; row < max_row; row++) 
  for (column=0; column < max_column; column++)

On page 599 it is suggested that the slow code is inefficient because it might cause paging to disk, on page 623 it is suggested that the higher trip count loop should be inside to amortise the initialisation overhead for each execution of the inner loop. Neither of these explanations is right. As I'm sure most of you recognise the code is slow because of cache misses incurred when accessing non-adjacent memory locations. There is a cost to initialisation of the inner loop, but nothing significant, and yes, you could get paging to disk - but only if you are running out of memory (and if you're running out of memory, you're hosed anyway!). You're more likely to get TLB misses (and perhaps that is what Mr McConnell intended to say.

I consider the above issues to be quite serious, but, unfortunately, I'm not terribly happy with the rest of the material. Hence my recommendation to ignore (or burn ;) these chapters. I'll go through my other reservations now.

Lack of details. The timing information is presented with no additional information (pg 623) "C++ Straight Time = 4.75 Code-Tuned Time = 3.19 Time Savings = 33%". What was the compiler? What compiler flags were given? What was the test harness?

The book presents it as somehow that "C++" runs this code slowly, but in reality it's more likely to be a test of the effectiveness of the compiler, and the ability of the user to use the compiler. I'd be surprised if any compiler with minimal optimisation enabled did not do the loop interchange operation necessary to get good performance. Which leads to my next observation:

Don't compilers do this? I think the book falls into one of the common "optimisation book" traps, where lots of ink is spent describing and naming the various optimisations. This gives the false impression that it is necessary for the expert programmer to be able to identify these optimisations and apply them to their program. Most compilers will apply all these optimisations - afterall that is what compilers are supposed to do - take the grudgery out of producing optimal code. It's great for page count to enumerate all the possible ways that code might be restructured for performance, but for most situations the restructuring will lead to code that has the same performance.

Profiling. It's not there! To me the most critical thing that a developer can do to optimise their program is to profile it. Understanding where the time is being spent is the necessary first step towards improving the performance of the application. This omission is alarming. The chapter already encourages users to do manual optimisations where there might be no gains (at the cost of time spent doing restructuring that could be better spent writing new code, and the risk that the resulting code is less maintainable), but without profiling the application, the users are basically encouraged to do this over the entire source code, not just the lines that actually matter.

Assembly language. Yes, I love assembly language, there's nothing I enjoy better than working with it (no comment), but I wouldn't encourage people to drop into it for performance reasons, unless they had utterly exhausted every other option. The book includes an example using Delphi where the assembly language version ran faster than the high-level version. My guess is that the compilers had some trouble with aliasing, and hence had more loads than were necessary - a check of the assembly code that the compilers generated would indicate that, and then it's pretty straight forward to write assembly-language-like high level code that the compiler can produce optimal code for. [Note, that I view reading and analysing the code at the assembly language level to be very useful, but I wouldn't recommend leaping into writing assembly language without a good reason.]

So what would I recommend:

  • Profile. Always profile. This will indicate where the time is being spent, and what sort of gains you should expect from optimising parts of the application.
  • Know the tools. Make sure that you know what compiler flags are available, and that you are requesting the right kind of things from the compiler. All too often there are stories about how A is faster than B, which are due to people not knowing how to use the tools.
  • Identify those parts of the code where the time is spent, and examine them in detail to determine if it's a short coming of the compiler, the compiler flags, or an ambiguity in the source code, that causes time to be spent there. Many performance problems can be solved with by adding a new flag, or perhaps a minor tweak to the source code.
  • Only when you have exhausted all other options, and you know that you can get a significant performance gain should you start wildly hacking at the source code, or recoding parts in assembly language.

The other thing to recommend is a read of Bart Smaalder's Performance Anti-patterns.

Wednesday Jun 10, 2009

Code complete: coding style

I read Code Complete a couple of years back. It's an interesting book to read, but there were two parts that annoyed me. I was giving a presentation the other week on "Coding for performance" and I happened to mention the book, and say that I had these two reservations. So I figure I should write them up more formally.

My first issue was, basically, me just been a stuck in the mud. Those of you who regularly read my blog will see that I favour the following style of indenting:

  if (some condition)
     do something;

If you've read Solaris Application programming, you'll see that I actually use quite a few styles. In writing that book, there were particular places where there was limited space on the page and I ended up juggling the style to make it fit the medium. So I have preferences, but I'm pragmatic.

Anyway, CC on page 746 says identifies my preferred style as "unindented begin-end pairs" and says the following "Although this approach looks fine, it violates the Fundamental Theorem of Formatting; it doesn't show the logical structure of the code.".


So I wanted to read up more details on this Fundamental Theorem, perhaps I'm misreading the text, but this is how it appeared to me (pg 739) "A control construct in Visual Basic always has a beginning statement ... and it always has a corresponding End statement." (pg 740) "The controversy about formatting control blocks arises in part from the fact that some languages don't require block structures." (pg 740) "Uncoupling begin and end from the control structure - as languages like C++ and Java do - with { and } - leads to questions about where to put the begin and end. Consequently, many indentation problems are problems only because you have to compensate for poorly designed language structures." [Emphasis mine.] I read this as, basically, you need to make your untidy C/C++/Java code look more like VB. I guess that's why it's taken me a couple of years to calm down sufficiently to post this ;)

Actually, I'm not far from disagreeing. But let's return to this point in a moment. Let's start with the two approaches to indenting that are recommended in the book.

First of all, what is probably the most common style "pure block emulation":

  if (something) {
    do something;

The other recommended style is "begin and end as block boundaries":

  if (something)
    do something;

On page 745, a study by Hansen and Yim (1987) indicates that there's no difference in understandability between these two styles. Excellent - so it doesn't matter! I'm sure that if "unindented begin-end pairs" were also included in the survey then it too would provide indistinguishable understandability.

Anyway, the differences between the recommended "begin and end as block boundaries" and the shunned "unindented begin-end pairs" is basically four spaces, which I don't personally think is a lot.

Heading back to why I might actually agree with some of his comments. It is very easy to introduce a bug in a program where the begin and end braces have been omitted. For example:

  if ( a > max )
    max = a;

  if ( a > max )
    printf("New max = %i\\n",a);
    max = a;

So, whilst I agree that the absence of brackets can be a problem, I don't necessarily think that rigid adherence to a particular style naturally follows as the only solution to that problem.

I do have some rules that I tend to obey:

  • Indenting is a personal/project preference. There are tools out there that can render source code pretty much how you like it. The UI is a view of the source, and it doesn't really matter what the style of the source is. If I find the source hard to read, then I can process it to make it conform to what ever layout works best for me to solve the problem that I'm working on.
  • Always use begin and end brackets. They add a single character and can avoid the problem demonstrated above.
  • I tend to favour clarity over a rigid adherence to particular styles. I'm not above placing an entire statement on a single line when I feel that it is the best way to present the information. Taking the previous example:
    Multi-lineSingle line
      if ( a > max ) {
        max = a;
      if ( a > max ) { max = a; }

Thursday Apr 16, 2009

California special election

Today I got the "voter information pamphlet" for the California statewide special election - which is meant to solve the . The booklet is rather short on information. Well, very short on information. A bit of searching found this site that links to the actual texts of the bills. Even with this I'm confused as to how "Supplemental payments to local school districts ... to address budget cuts." can provide "state savings of up to several billion dollars in 2009-2010 and 2011-2012".

Note:The last time I wrote about voting, I was presenting at a customer site the next day, and one of the questions was "Is this really your blog?". Next week I'm off presenting again, and if you happen to come here as a result of one of those presentations, please scroll down for my usual material. :)

Thursday Jan 15, 2009

Computer history articles on the BBC

The BBC seems to be running a series on UK computer history. Code breaking at Bletchley Park. Packet switching. The Manchester Baby. Computer pioneers.

Monday Jan 12, 2009

Bay Area Model

After nearly 10 years of living in the Bay Area, we visited the Bay Area Model in Sausilito. The model is of the water flow in the San Francisco Bay, and surrounding areas. Construction was started in 1956 as part of a feasibility study for building a dam. Based on the modelling work they decided not to build the dam, but the model grew until 2000 when it was replaced by computer models.

I had imagined that it would be table-sized, or perhaps the size of a room. It's not. It's much larger, as you can see in the pictures. We ended up spending about an hour there, we could probably have stayed longer reading more details.

Thursday Jan 08, 2009

Illuminated light switches and flourescent lights

Just back from the break. Spent some time doing odd jobs around the house. We use the compact fluorescent light bulbs around the house, I'd noticed one of them flickering when it was supposed to be switched off. The reason dawned on me when I was thinking about the illuminated switch that controls that particular light.

I started thinking about where the power to make the switch glow came from, after a moment of reflection it was clear that there had to be a small current flowing in order for the switch to light up. And if there's a small current flowing through the switch, then there has to be one flowing through the fluorescent bulb, presumably just enough to make it flicker.

I found a blog entry which confirmed this, plus showed some nice illustrations.

Unfortunately there are only two solutions. (1) Don't use illuminated switches or (2) Don't use fluorescent lights.

Tuesday Oct 07, 2008

Voting in California

We recently became citizens, so this was the first election in which we'd be eligible to vote. Probably somewhat enthusiastically I sat down with the thick set of documents and tried to figure out what to vote for.

What was surprising to me, voting for the first time, was that did I not only get to pick the President (well, I guess they'll let some other people have a say too ;), together with various Senators etc. They also have a bunch of propositions which I can be for or against. So it's not like I just get to put a tick in one box; I have to read a fair sized telephone directory of arguments, then try to make sense of which argument is most convincing.

Most of the arguments are, unfortunately, just that. Here's some quotes both for and against one of the propositions "Don't believe the scare tactics.", "[Proposition]... over time saves California $2.5 billion.", "[Proposition]... will massively increase costs to taxpayers.".

Anyway I do not blog to discuss politics. But I figured it might be useful to provide a table showing the various propositions and the positions adopted by some of the political parties.

The Republican and Democratic parties just give out a list of the propositions and whether they are for or against them. I've included a link to the Green party which includes some analysis behind their decisions and a link to Pete Stahl who came up first when I searched for other discussions of the propositions.

PropositionDemocratic Republican Green Pete Stahl
1A Safe, Reliable High-Speed Passenger Train Bond Act for the 21st Century. YesNoNo positiontbd
2 Treatment of Farm Animals. Statute. YesNoYesYes
3 Children’s Hospital Bond Act. Grant Program. Statute. YesNoNoNo
4 Waiting Period and Parental Notification Before Termination of Minor’s Pregnancy. Constitutional Amendment. NoYesNoNo
5 Nonviolent Offenders. Sentencing, Parole and Rehabilitation. Statute. YesNoYesYes
6 Criminal Penalties and Laws. Public Safety Funding. Statute. NoYesNoNo
7 Renewable Energy. Statute. NoNoNoNo
8 Limit on Marriage. Constitutional Amendment. NoYesNoNo
9 Criminal Justice System. Victims’ Rights. Parole. Constitutional Amendment and Statute. NoYesNoNo
10 Bonds. Alternative Fuel Vehicles and Renewable Energy. Statute. NeutralNoNoNo
11 Redistricting. Constitutional Amendment and Statute. NoNo positionNoYes
12 Veterans' Bond Act of 2008. YesYesYes, with reservationsYes

There are some other political parties which I've not included. The peace and freedom party is broadly in line with the Green party. The Libertarian party basically recommends voting No for those that it actually cares about. Neither of these gives any information about their motivation.

Friday Aug 01, 2008


The BBC has some footage of the 1st August solar eclipse which started in Canada, covering part of Russia, before ending in China ("The Olympic Eclipse").

The NASA website has a bundle of information about past and future eclipses. Probably most useful is this map which shows a world map of future eclipses.

Wikipedia has this to say about the four types of solar eclipse:

  • A total eclipse occurs when the Sun is completely obscured by the Moon. The intensely bright disk of the Sun is replaced by the dark silhouette of the Moon, and the much fainter corona is visible. During any one eclipse, totality is visible only from at most a narrow track on the surface of the Earth.
  • An annular eclipse occurs when the Sun and Moon are exactly in line, but the apparent size of the Moon is smaller than that of the Sun. Hence the Sun appears as a very bright ring, or annulus, surrounding the outline of the Moon.
  • A hybrid eclipse is intermediate between a total and annular eclipse. At some points on the surface of the Earth it is visible as a total eclipse, whereas at others it is annular. Hybrid eclipses are rather rare.
  • A partial eclipse occurs when the Sun and Moon are not exactly in line, and the Moon only partially obscures the Sun. This phenomenon can usually be seen from a large part of the Earth outside of the track of an annular or total eclipse. However, some eclipses can only be seen as a partial eclipse, because the umbra never intersects the Earth's surface.

Wednesday Jul 23, 2008


Got woken up at 12:30am this morning by the magnitude 6.8 quake near Morioka. The epicentre was a fair distance from Tokyo, but the hotel where I'm staying is tall, so I guess that makes it sensitive.

Saturday Jul 19, 2008

Unable to explore CD on Windows XP

So we were given a number of photos on a CD and I wanted to copy them onto the XP machine. The problem I hit was that the CD appeared in Explorer, but I could not open it and browse the contents. I could open it as Administrator, but not as a normal user. Of course there was no error message, and no way of identifying where the problem was.

Anyway after a bit of googling and rejecting of the more time intensive "solutions" (reinstall XP, or try some utility from an unknown source), I found this conversation which described a similar problem and suggested the solution of "Enabling CD recording on this drive" from the properties menu of the DVD drive. Fortunately this seems to have worked, it also seems to still work even though I've switched the capability off again.

Right... now I can copy over those pictures....

Sunday Jul 06, 2008

Remotely troubleshooting Windows performance

Spent a couple of hours on the phone to my dad, over in the UK. He had home network troubles, the wireless network wasn't working, and the USB modem was sluggish. We switched to the the wireless router, which eventually came up with a combination of multiple reboots and ensuring that the cables were firmly plugged in. The PC got solved with a (typical) reinstall of the wireless network card driver.

Once the PC was up and running, I wanted to check the performance issues. One of the things we'd been meaning to try was crossloop which is a vnc client/server behind a user-friendly front-end. This worked very well despite a noticeable lag between the UK and California.

I'd planned to use the Performance tool that comes with XP, (Start|Control Panel|Administrative Tools|Performance). This gives a useful system-wide view of performance. It really only indicates what component is maxed out, not what is maxing it out. I did consider getting wintop, it no longer seems to be distributed by MS. However, I did locate Process Explorer (part of the sysinternals collection) which seems to do a much more thorough job than wintop.

There was one only one background process which was consuming significant resources, and that was bigfix, as far as I could tell the app was no longer supported by the company (amusingly, the link "Why is bigfix free?" describes that the free version is being EOL'd!).

I couldn't tell responsiveness over a vnc link, but apparently swapping to the wireless network rather than the DSL modem, and also removing bigfix had made the PC more responsive. Process Explorer also reported adequate free memory and low disk activity.

Tuesday Jun 24, 2008


It was father's day the other weekend, rather strangely, a bundle of things seemed to align. My folks were visiting from the UK, so we were actually going to be spending father's day together, and on the Saturday the San Jose Earthquakes were going to be playing LA Galaxy. It's been on my list of things to do to take both my dad and the kids to a football match, so this was a great opportunity. Of course the bonus was that Beckham was due to be playing.

Watching the game was fun, the only downside was that we missed nearly the entire first half because of a massive queue to get into the grounds - one guy we spoke to inside had queued for an hour even though he arrived much earlier than we did: the traffic was also bad. Apparently the Beckham effect had tripled the crowd there. On the other hand, the kids may not have managed to sit through the entire game, so just the overall effect was getting 'just the right amount'.

Friday May 23, 2008

Books on code tweaking

Following up on yesterday's entry on modulo arithmetic, I figured I'd note a couple of books that I've read in the past, and found interesting.

A while back a colleague pointed me to "Hacker's delight". There's recommendations from Josh Bloch and Guy Steele on the back cover. I found it an interesting read, but I remember being disappointed that there were not more general purpose tweaks. My copy of the book has disappeared somewhere or other, so I can't flick back through it and come up with anything better to say!

The book that most inspired me when I read it was Michael Abrash's "Zen of code optimization". It's probably one of the handful of reasons that I ended up doing what I do for a job. Together with his "Graphics Programming Black book" It also caused me to spend so much time iterating on the graphics code in a game I was writing in my spare time, that I never got to write the game.... ;)

Anyway, the really cool thing about Abrash's books, is that a few years they were released for free download in their entirety. Although the 386 processor that they focus on is no longer state-of-the-art, they're still interesting. They seem to still be available from various sources, a list is on wikipedia. Here's the download site on Chapter 14 on Boyer-Moore string searching is worth a read.

Saturday Mar 29, 2008

Search terms

A while back, AOL released a bundle of search data, this turned out to be rather controversial. The data has been put up as a searchable archive. The top keywords are interesting - coming in at number 9 is "http", number 23 is "m"! Most of the terms seem to be just looking for a company website (e.g. the top search term is "google").

Wednesday Mar 26, 2008

Balancing California's budget

A mail about Next 10 appeared on one of the aliases that I lurk on. The organisation aims to raise awareness of the state budget, and part of this is an on-line 'game' to balance the state's budget. The game presents various scenarios together with their projected costs. It's interesting to see some of the options that are available, and to learn a bit more about the history of the current budget and the discussion around the future options.

Sunday Mar 23, 2008

Old computers

My father surprised me by mailing a couple of links to 'old home computer' sites. The Obsolete Technology site, which fails to mention the Dragon 32, which I had for many years. And World of Spectrum - although I never had one. I think it means that he's clearing the garage. So anyone in the UK want a ZX-81, Dragon 32, or, I think, a Commodore Pet? ;)

I guess he missed old computers, vintage computers, our local computer history museum (which I think also lacks a Dragon), and the computer exhibit at Bletchley Park (I last visited there about 10 years, ago so can't say whether they also neglect the Dragon! ;).

Saturday Mar 22, 2008


Learning the times tables is a pain, we found this software, Timez Attack which combines 3D video game with multiplication practice. Certainly the game appeals to the kids, although I'm not certain that they 'learn' the multiplications.

Friday Mar 21, 2008

Programming for kids

A while ago I started looking for ways to get my oldest coding. My first machine was a zx-81, with 1k of memory, and most of this was used by the screen, there was a big incentive to learn assembler. I'm not out to force him into assembler programming, but...

I evaluated a number of possibilities, one was the Kid's Programming Language (or Phrogram) which can do some impressive things in few lines of code. A sample 3D space 'game' takes about 30 lines most of which look like:

	If IsKeyDown( Up ) Then
		Ship.TiltUP( moveAmount )
	End If

I also looked at squeak, but it didn't grab me as being easy to use.

An interesting alternative to real coding is c-jump, which is a programming board game. I'm not quite convinced by the syntax, or the jumping around the board.

The first thing I tried with him was Java. Which was pretty successful, but I couldn't just leave him to get on with it. There's quite a bit of syntax to have to handle. So while it was a success, it relied on me finding the time to work with him.

We then tried scratch. This has been quite successful for the following reasons:

  • It's all drag-and-drop, and the programming constructs are coloured/shaped so it's easy to put them together correctly.
  • Its all graphical, and the interface is very intuitive. You can see the object that you're programming.
  • It has an integrated graphics editor so he can draw his own sprites. Changing the look of a sprite is a step towards looking at the programming of the sprite and from there modifying the programming.
  • The biggest thing has been that he can work on this autonomously, I just have to see the end results.

The downside of scratch is that it seems a bit limited in what it can do. He really wants to do 3D games - so perhaps Phrogram is the next stop.

Any other recommendations for kids programming?

Wednesday Oct 31, 2007

Haunted clock

This is weird tale - just in time for Halloween. We have (or had) a kitchen timer, it has controls to set the duration of the time-out in hours and minutes, and a start-stop button. Once the time-out's set it counts down and eventually goes beep. That's all it does.

Or did, until about two weeks ago, when it stopped being a timer and started being a clock. For no readily apparent reason the buttons stopped working, and it started showing the time. Initially I thought 7:07 was an error code, but I looked back at 7:30 and realised that it was showing the time, not any time, but the correct time. And that's what convinces me it must be haunted :) I can understand that it might share sufficient circuitry with a clock for it to become one with some kind of random event, but to become a clock that is showing the correct time is just too unlikely.

Tuesday Oct 30, 2007

Magnitude 5.6 quake

Just after 8pm we had a magnitude 5.6 quake near Alum Rock, about 10 miles east of here. Most of the quakes I've previously felt here have been more like the base of the building being hit with a large metal hammer; this one was much different. There's an earthquake simulator at The Tech where you stand on a small square platform which randomly judders from side to side. This quake was much more like that.

The USGS provides a couple of online resources for earthquake information. A map showing the location of recent earthquakes. A shake map, which shows how the amount of shaking detected around the epicentre. A shake map which is reported by people. There's also raw seismograph data; the link is for Stanford telescope data, other stations can be selected.

Sunday Oct 28, 2007

16 billion pixels of last supper

Saw this article on the BBC about a 16 billion pixel digitised version of The Last Supper being available on line.

Friday Sep 28, 2007

Crime maps

Couple of interesting sites that put crime data onto the map. One for Oakland and that does various cities including San Jose.

Wednesday Jul 18, 2007

That which

One of my colleagues pointed me to this resource on grammar in reference to the appropriate use of which and that. An error that I commonly make.


Darryl Gove is a senior engineer in the Solaris Studio team, working on optimising applications and benchmarks for current and future processors. He is also the author of the books:
Multicore Application Programming
Solaris Application Programming
The Developer's Edge


« April 2014
The Developer's Edge
Solaris Application Programming
OpenSPARC Book
Multicore Application Programming