Why are smartphone manufacturers fixated on America?

In response to the news that HTC is not planning to make any more QWERTY smartphones, reddit user makken compiled a list of recent QWERTY Android phones. Looking at that list as an Australian is rather depressing:

  • Motorola Droid 4 - Not sold outside the USA, there is no GSM version and it has a locked bootloader
  • Samsung Captivate Glide - Not sold outside North America
  • Sony Xperia Pro - Actually available, but doesn’t seem to have an active community on XDA and I am loathe to give Sony money.
  • HTC Evo Shift - Not sold outside the USA. CMDA/WiMAX only so useless outside the USA anyway.
  • HTC MyTouch 4G Slide - Not sold outside USA. No band V (850 MHz) or band VII (900 MHz) UMTS (3G). Also, the “4G” in the name refers to HSPA+ which everyone but US carriers acknowledges is 3G (sometimes “3.5G”).
  • Samsung Epic 4G - Not sold outside the USA. The “4G” in the name refers to HSPA+ in UMTS band I (2100MHz) and there’s no support for any other GSM or UMTS band.
  • HTC Desire Z (aka Vision or G2) - I have this phone. It’s old and slow and the keyboard is wearing out - but I can’t find anything better to replace it with.

Why do smartphone manufacturers focus so strongly on America when it’s such a small fraction of the global market? How much would it really cost to stick a GSM/UMTS radio in these phones and sell them in the other 80% of the world?

Palm’s braindead refusal to market their Pre smartphones outside America was the death of a once-great company (and being bought by HP did not save them). Motorola now seems to be headed down the same path (even now after being bought by Google). Nokia used to be relatively good by have tied their future to the sinking ship that is Windows Phone 7. Do Australians (or indeed, most of the world’s population) have any hope for a decent QWERTY smartphone?

Governments should build infrastructure

It just makes sense for governments to build infrastructure. There are a whole bunch of economic and social benefits to having good infrastructure, well above and beyond the money you’d make charging for use.

If we left road-building up to private enterprise, you’d pay dollars in tolls to get to the local shops and you’d need a four-wheel-drive to get to anywhere outside of the capital cities. Many of the older generation (i.e. almost all of our elected representatives) don’t yet see the internet as part of our vital national infrastructure - they grew up without it, they’re fine with what’s commercially available now and don’t see what all the fuss it about.

Then again, it seems like selling off vital infrastructure (roads, power, water, comms) is a popular thing for Australian state and federal governments to do - giving up future revenues and the responsibility for maintaining the infrastructure for a quick buck. We’ve been down that road, we know where it leads but somehow we’re always eager to start down it again for a quick budget fix (not that state governments have many other options for balancing their books).

I find it perplexing and greatly disheartening that Labor have the vision to build the NBN, but the short-sightedness to flog it off as soon as it’s done.

uudecode in bash

Because “modern”, “friendly” distros like Ubuntu no longer include uudecode in the default install, today I had to make it work in pure bash. Stick this at the top of your sharchive to make sure it’ll extract on such distros:

if ! hash uudecode; then
	uudecode() {
		bs=0
		while read -rs t ; do
		  if [ $bs -eq 1 ] ; then
			if [ "a$t" = "aend" ] ; then
			  bs=2
			else
			  x=1
			  i=($(printf "%d " "'${t:0:1}" "'${t:1:1}" "'${t:2:1}" "'${t:3:1}" "'${t:4:1}" "'${t:5:1}" "'${t:6:1}" "'${t:7:1}" "'${t:8:1}" "'${t:9:1}" "'${t:10:1}" "'${t:11:1}" "'${t:12:1}" "'${t:13:1}" "'${t:14:1}" "'${t:15:1}" "'${t:16:1}" "'${t:17:1}" "'${t:18:1}" "'${t:19:1}" "'${t:20:1}" "'${t:21:1}" "'${t:22:1}" "'${t:23:1}" "'${t:24:1}" "'${t:25:1}" "'${t:26:1}" "'${t:27:1}" "'${t:28:1}" "'${t:29:1}" "'${t:30:1}" "'${t:31:1}" "'${t:32:1}" "'${t:33:1}" "'${t:34:1}" "'${t:35:1}" "'${t:36:1}" "'${t:37:1}" "'${t:38:1}" "'${t:39:1}" "'${t:40:1}" "'${t:41:1}" "'${t:42:1}" "'${t:43:1}" "'${t:44:1}" "'${t:45:1}" "'${t:46:1}" "'${t:47:1}" "'${t:48:1}" "'${t:49:1}" "'${t:50:1}" "'${t:51:1}" "'${t:52:1}" "'${t:53:1}" "'${t:54:1}" "'${t:55:1}" "'${t:56:1}" "'${t:57:1}" "'${t:58:1}" "'${t:59:1}" "'${t:60:1}"))
			  l=$[${i[0]} -32 & 63 ]
			  while [ $l -gt 0 ] ; do
				i0=$[${i[$[x++]]} -32 & 63]
				i1=$[${i[$[x++]]} -32 & 63]
				i2=$[${i[$[x++]]} -32 & 63]
				i3=$[${i[$[x++]]} -32 & 63]
				if [ $l -gt 2 ] ; then
				  echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]\0$[$i1 >> 2 & 3]$[$i1 << 1 & 6 | $i2 >> 5]$[$i2 >> 2 & 7]\0$[$i2 & 3]$[$i3 >> 3 & 7]$[$i3 & 7]" >>"$name"
				  echo -n .
				elif [ $l -eq 2 ] ; then
				  echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]\0$[$i1 >> 2 & 3]$[$i1 << 1 & 6 | $i2 >> 5]$[$i2 >> 2 & 7]" >>"$name"
				else
				  echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]" >>"$name"
				fi
				l=$[l-3]
			  done
			fi
		  elif [ "${t:0:5}" = "begin" ]; then
			bs=1
			mode="${t:6:3}"
			name="${t:10}"
			rm "$name"
		  fi
		done
		chmod $mode "$name"
	}
fi

Getting some Diaspora/Tumblr/Twitter integration up in this bitch

Legislation: tl;dr

When a bill is introduced to parliament, it’s called the “first reading” because the clerk reads the title of the bill.

Personally, I find the idea that our representatives vote on legislation that they haven’t read disgusting. As an engineer, if I approve of a design that I haven’t inspected in detail that’s called “not doing my job”. Since the entire job of our politicians is to shape our legislation, shouldn’t they be more familiar with it than anyone? What hope do us voters have of understanding what our representatives are doing if they don’t even know what they’re doing?

I think this could be vastly improved. Legislation doesn’t have to be so complicated. If some effort was put into making legislation simple and fair instead of adding special cases until all relevant special interest groups are appeased there’s no reason bills couldn’t be short and comprehensible.

One way to achieve this would be to change parliamentary procedure so that the entire text of bills is actually read aloud in a “reading”, and if a member isn’t present for a reading then they can’t debate or vote on the bill.

Computer Engineering at UQ

This rant is based on an email I wrote when I learned that UQ is planning on dropping the Computer Systems Engineering major, and with it the COMP2304 course “Programming for Engineers”. I don’t know if this has been publicly announced yet, but from what I’ve head it’s happening and there’s nothing we can do about it. Although my job title is “Software Engineer”, Computer Systems is my major, and COMP2304 one of the courses that I was involved in teaching at UQ so this is a issue close to my heart.

COMP2304 emphasises C++, subversion, unit testing, and an automated build environment.  It was introduced as a direct consequence of earlier IAB meetings where industry stated that they needed strong coding skills and strong C++ expertise.  These coding skills and build tools were built into this course over several years by tutors who had worked for Google and are now Senior Google Software Engineers.   Graduates also stated that their degree was weak in this area.  Certainly both Google and CISRA rate this course very highly and it is one of the reasons they really like our graduates.  The program can certainly change but I think it would be very bad for the degrees if this material was not covered appropriately elsewhere.

I’m not particularly fond of COMP2304 as a course, and I think that version control, unit testing and automatic build systems should be able to be covered by CSSE2002 (or perhaps CSSE2003, but that is only taught to SEs). That said, C++ is a uniquely useful language with a great many features and concepts that are not taught elsewhere at UQ. It is also notoriously difficult to use correctly, so graduates with no experience using it cannot be expected to quickly pick it up on-the-job. Dropping C++ would effectively shut UQ graduates out of entire industries.

If anything, UQ should be teaching a wider variety of programming paradigms and environments - which unavoidably means a wider variety of languages. With CSSE1001 now being taught in Python (in itself a huge improvement), functional programming at UQ is no more than a week of irrelevant, quickly-forgotten material.

Worse still, UQ students are taught very little of how programming languages are implemented, and thus have little ability to relate the code they write to what the computer actually does. Some of the implementation details of C are taught in the (excellent, and highly regarded) CSSE1000 and COMP2303 but the material is being slowly removed to make room for higher-level concepts like threads, and to make the courses easier. COMP4403 obviously teaches the implementation of programming languages, but business of dealing with actual computer hardware is skipped over and the course is (sadly) only taught to a small number of SEs. This leaves UQ students with little ability to reason about the performance of their code (a topic that is largely ignored at UQ anyway, with the exception of COMP3506 which only teaches the very basics of computer science theory, and only from the imperative-language objects-are-references perspective of Java).

Two big growth areas in computing right now are mobile and GPGPU - areas in which a strong understanding of how code runs on actual hardware is required in order to produce efficient solutions - and UQ is not equipping its graduates for success in those areas. 

[edit]

I don’t believe Electrical or Software Engineering graduates would be well-suited to the work I am doing now. In the last two weeks I’ve been writing software to enable automatic testing on a production line, hacking on Linux kernel drivers, designing a system architecture for production automation, finding board design faults (and fixing them with a soldering iron) and designing digital logic with VHDL. A pure Electrical Engineering or Software Engineering program might prepare you for half of that.

Australian “First Home Saver” accounts

The Australian government has a program to (ostensibly) help with the high cost of housing in Australia called the “First Home Saver account”. The idea is simple: you open a special bank account to save for a deposit on your first home. The government puts in 17% of what you put in (up to $5500 per year and a maximum balance of $80,000). The only catch is that you can only take money out of the account to buy your first home.

At least, that looks at first glance like the only catch. It’s hard to turn down free money, so let’s work an example.

Let’s look at Sydney’s north shore because I’m thinking of moving there. The rent for 2-bedroom apartment starts at about $400 per week, and to buy one would cost $450,000 to $500,000. Let’s say me and my partner both open a First Home Saver Account an put in $5500 per year each to extract the maximum amount of money from the government. That’s $211 per week, so we’re now putting $611 per week towards housing.

10 years later, we’ve just hit the $80,000 cap (so $160,000 total), so we take out a mortgage based on continuing to spend $611 per week on housing. The Commonwealth Bank home loan calculator tells me this would afford us a $321,000 loan over 20 years. This gives us $481,000 to spend on a home, which is right about in the middle of the price range for buying an apartment similar to what we’d been renting for the last 10 years. 20 years later (30 years from now), we own our 2-bedroom apartment outright.

Sounds pretty good, right? But … what if you just put that money in a regular savings account instead? The Commonwealth Bank currently pays 4.75%pa on an online-only savings account and I’m sure you do can better than that if you look around - or set up a term deposit. If you deposit that extra $211 per week in a savings account at 4.75%pa (paid monthly), after 10 years the balance is $141,010.26 - $20,000 short of what you’d have in your First Home Saver Account. But after the full 30 years the balance is $731,472.74.

Obviously this is a very simplistic analysis, ignoring whatever may or may not happen to rent and/or house prices over the next 30 years but I’d like to hope that they’re at least somewhat related - this is about trying to decide if it’s worth spending above what it costs to rent to eventually own a home.

So what’s worth more to you 30 years from now? A 2-bedroom apartment currently worth $480,000 or $731,000 cash? And if you think the apartment will be worth more, how sure are you? Certain enough to lock away $140,000 over the next 10 years to get the $20,000 the government is willing to put in? Of course, that’s assuming the program will actually continue for the next 10 years.

Kawasaki Idle Speed Adjustment

This is literally everything my Z750’s service manual says about how to adjust the idle speed:

So helpful!

Great use of a bike lane

Great use of a bike lane