MiddleClickClose: New Home!

For those of you who have been pining for a working 64-bit version of MiddleClickClose, your patience is about to be rewarded. A fellow called Tom has taken the MCC code, gotten it working with 64-bit Safari and has moved it to its new home. I am no longer maintaining the code, since I don’t use Safari, so from now on, here’s where you should go for MCC:

github.com/Kabal/MiddleClickClose

There you will find all the source code so you can see how it works, or make changes yourself. If you are only interested in using it, you can get a binary bundle here. I haven’t tried it, but Tom assures me that it works. 🙂

Thanks Tom-of-no-last-name for taking over the code.

2 Solutions To Project Euler Problem #1

In an effort to not go a whole month without blogging, and in the interest of posting some code samples, I give you two solutions to Project Euler: Problem #1. If you’ve never heard of it, Project Euler (pronounced “oiler” after the Swiss mathematician Leonhard Paul Euler) is a set of increasingly difficult programming challenges. Participants can write their programs in any language and the only goal is to solve the problems and learn something. There are no prizes and you don’t have to show your work.

I had looked at this project years ago, and I swear I thought I had already solved some of them, but maybe I only thought about doing it. Anyway, I have two solutions to the first problem; one in Groovy and the other in Scala. Here, then, is how Project Euler describes the problem

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

So, the goal is to take a series of numbers from 0 to 1000, exclusive, find all the numbers divisible by 3 or 5 and add them together. Here’s the Groovy solution.

def subList = (0..<1000).findAll {it % 3 == 0 || it % 5 == 0} 

def sum = subList.inject(0) {i, sum -> sum + i}

println "Sum = ${sum}"

This is a very simple program, and I could have written it as a one-line program. I broke it up into a few lines for clarity. As you can see, the first line creates an exclusive range from 0 to 1000. It then calls the findAll method on that range, passing in a closure that will return true if the passed-in digit from the range, called “it” here, is evenly divisible by 3 or 5. The result of findAll is another collection, containing only those values that passed the divisibility test. We then take that list, passing 0 into the inject method, which will neatly sum the values up and return that value. Easy peasy.

Now here’s the Scala version. You’ll notice it is very similar to the Groovy solution.

val subList = for {
    i <- List.range(0, 1000)
    if i % 3 == 0 || i % 5 == 0
} yield i 

val sum = subList.foldLeft(0) {(i, j) => i + j}

println("Sum = " + sum)

I used a sequence comprehension to generate the sublist here. The bit beginning with “for” generates an exclusive range from 0 to 1000, which is then iterated over, assigning each value to “i”. Then, if it is divisible by 3 or 5, it is yielded up by the comprehension. The result is a collection of just those numbers that we want, assigned to the val called subList. We then call foldLeft on that sublist, doing exactly what we did in the Groovy solution. Again, pretty simple.

Now, I could have solved this one in an almost identical fashion to the Groovy solution by using the filter method of lists, but I wanted to solve it first using a list comprehension. Here is the second solution

val subList = List.range(0, 1000) filter {i => i % 3 == 0 || i % 5 == 0}

val sum = subList.foldLeft(0) {(i, j) => i + j}

println("Sum = " + sum)

I timed the solutions and all three finished in just over a second. The second Scala solution seemed ever-so-slightly faster than the other two.

As I get time, I will work on additional problems from the site and post the answers here. I don’t know that I’ll always do solutions in two languages, but I might.

iPhone Interface For My Blog

09/28/2009 Update: Now added a link to the view from Android.

Last week I learned about WPTouch, which is a plugin for WordPress that reformats the theme for the iPhone, Android and other mobile devices. It was an easy install, and I am now happy to report that if you view my blog on a mobile device, you’ll see the new UI. Here’s what it looks like on an iPhone

IMG_0465

If anybody has an Android phone, or some other supported mobile device, send me a screenshot so I can see what it looks like.

Thanks to Steve Ziegler, here’s what it looks like from an Android device. Thanks, Steve!

I’m Liking Scala’s XML Literals

How many times have you written a class that you needed to save and restore to/from XML? How did you do it? There are libraries that will do this for you, but I don’t know if any of them have taken the lead. Usually, you have to either have external XML templates that will be filled in, or you have to create the XML through code using DOM or JDOM or some other DOM. I think Scala has a better way.

Enter Scala’s XML literals. In Scala, you can embed XML right in the middle of regular Scala code. For example,

val num = 23

val xml = 
	<person>
		<name>Tom</name>
	</person>
	
println(num)
println(xml)

In this code, we assign to the val called num the Int value of 23. We then assign the xml val an XML Node, that begins with “person”. That’s neat, but not terribly useful. Here’s where it gets really interesting.

import scala.xml.{Node, XML}

class Person(val id: Int,
			 val firstName: String,
			 val lastName: String,
			 val title: String) {

	override def toString = {
		id + ", " + firstName + " " + lastName + ": " + title
	}
	
	def toXML = {
		<person>
			<id>{id}</id>
			<firstName>{firstName}</firstName>
			<lastName>{lastName}</lastName>
			<title>{title}</title>
		</person>
	}
}

object Person {
	def fromXML(node: Node): Person = {
		new Person(
			(node  "id").text.toInt,
			(node  "firstName").text,
			(node  "lastName").text,
			(node  "title").text
		)
	}
}

val p = new Person(23, "Tom", "Servo", "Robot")
println(p)

val xml = p.toXML

println(xml)

XML.saveFull("Person.xml", xml, "UTF-8", true, null)

val xmlFromFile = XML.loadFile("Person.xml")

val p1 = Person.fromXML(xmlFromFile)
println(p1)

That’s a longer example, but there’s a lot of interesting stuff in there. Lines 3 – 20 are defining a Scala class, but look at lines 12 – 19. Those lines define a method called toXML that returns the current instance of the class, serialized to XML. I’ve defined the XML structure that I want, and Scala will fill in the values by replacing the stuff between the curly braces with whatever those expressions evaluate to. In this case, it’s just the instance variables, but it could be anything you want, including more XML. So if you have a more complex data structure, it could call the toXML method on its instance variables, and they could handle their own serialization, which would then be placed where it should be in the parent XML document. Nifty, eh?

Now, look at lines 22 – 31. This bit of code is defining a companion object to the Person class, which defines a method to deserialize XML into an instance of class Person. Strictly speaking, I didn’t have to use a companion object; I could have just defined the fromXML method at the top level, but I think this makes the code cleaner. What this method does is take an XML node, tear it apart, and return an instance of class Person, with its instance variables populated.

Lines 33 – 45 exercise this code. The result of running this example look like this

box:~/tmp> scala person.scala 
23, Tom Servo: Robot
<person>
			<id>23</id>
			<firstName>Tom</firstName>
			<lastName>Servo</lastName>
			<title>Robot</title>
		</person>
23, Tom Servo: Robot
box:~/tmp>

Pretty neat, eh? In the exercise code, we created a Person object, printed it out, serialized it to XML, printed that out, then saved the XML to a file. We then read that file back in, and deserialized it into another instance of class Person. Using XML literals for de/serialization is a nice application. I can see using this quite a lot. I like how it keeps the XML format right there with the code it will represent, so that when you change the code, you’ll remember to change the XML, too.

Bogus Search Results From Sys-Con

Updated! Be sure to scroll down for the latest!

I’m writing a blog post dealing with Scala’s XML literal syntax and how to use it for object de/serialization and so I wanted to get a list of existing Java XML de/serialization libraries. I went to Google and searched for “java xml serialization” and here’s the first result that I got

googleres

Notice the date, which is April 23, 2009. That is, ostensibly, the publication date of the article, right? Now check what happens when you click the link and go to read the article

syscon

Again, notice the date. It’s six years ago! So, where did Google get the 2009 date? That’s the date of the latest comment on the article. I’m not sure how they are getting Google to display the latest comment date in such a way that it looks like the publication date, but it looks like they are. I can’t imagine that Google just picked that date from the article when it spidered the site. Am I reading too much into this, or is Sys-Con gaming Google for better placement?

09/24/2009 4:26PM Update: Just for grins, I did my Google search for “java xml serialization” again. The Sys-Con article is still the top hit, but notice what’s missing from the search result

google2

Notice, that there is no longer a date showing. Very interesting.

Scala’s Nice Regex Class

I’m a big fan of regular expressions, because they let you parse text in very concise, and sometimes complicated, ways. Though I agree with jwz about regular expressions in lots of cases, I still use them frequently. Perl was the first language that really let me use regex, way back in 1991. After that I used various implementations in C, Python, Ruby, Java and various other languages. While I was glad that Java 5 finally added regex support, I was disappointed at the implementation. It’s kind of clunky, and because Java doesn’t have regex syntax baked into the language, and no support for “raw” strings, you end up with a regex with twice as many backslashes as necessary.

Last night while reading Programming In Scala, I came upon the discussion of Scala’s regex class. Scala has a raw string, so you have exactly as many backslashes in your pattern as necessary, but each regex you create also defines a Scala extractor, so you can easily bind local variables to groups within the expression.

First, let’s look at the Java code.

[java]Pattern emailParser = Pattern.compile("([\w\d\-\_]+)(\+\d+)?@([\w\d\-\.]+)");

String s = "zippy@scalaisgreat.com";

Matcher m = emailParser.matcher(s);

if (m.matches())
{
String name = m.group(1);
String num = m.group(2);
String domain = m.group(3);

System.out.printf("Name: [%s], Num: [%s], Domain: [%s]n", name, num, domain);
}[/java]

That’s pretty simple, though the double-backslashes really annoy me. Running this code results in the local variables name and domain getting assigned parts of the email address. The variable called num is assigned null, because the email address didn’t contain a plus sign followed by a number. Now, here’s the same program in Scala.

[scala highlight=”1, 5″]val EmailParser = """([wd-_]+)(+d+)?@([wd-.]+)""".r

val s = "zippy@scalaisgreat.com"

val EmailParser(name, num, domain) = s

printf("Name: %s, Domain: %sn", name, domain)[/scala]

In line 1, we are calling the “r” method on a raw string. This method converts the String into a Regex and returns it. We’re then assigning it to a local val called EmailParser. Also notice line 5. In that one line, we are declaring three local vals and assigning them whatever the groups in the regex matched, or null if they didn’t match. Just like with the Java example, num will be null since there was no plus sign followed by a number. If you change the email address in either example to something like “zippy+23@scalaisgreat.com”, then all three variables will be assigned parts of the string.

Do you have to have this level of support to do regex? No. Does it make things a lot nicer? Indeed.

Now, I just discovered that in Scala if the regex doesn’t match at all, then a MatchError is thrown. That’s sort of a bummer, because it means you’ll have to add a try/catch around your code. Still, I like the extractor syntax that binds regex groups to local variables in one step.

You can see some more examples of regex in Scala over here.

Announcing JUnitLaunchFixer Eclipse Plugin

My friend Chris and I both work for the same company. Our product has around 900 JUnit tests, and for some of them, the default heap size that Eclipse runs JUnit tests with has become too small. You can change the heap size on individual JUnit launchers, but if you have lots of tests, this gets tedious. It also means that you have to run a test, see if it runs out of heap, change the setting and then rerun the test. We both thought there had to be a better way.

We were wrong. There is apparently no way within Eclipse to set a default heap size for JUnit launchers, which means you have to set them individually. We don’t like that.

Thus, JUnitLaunchFixer was born. This is an Eclipse plugin that will set the max heap size on a JUnit launcher when it is created to a value you have previously specified in the plugin preferences. The default is 1G, but you can tailor it to whatever you want. The first time you start Eclipse after installing the plugin, you will be presented with a selectable list of launchers that you can update, and a chance to set the default heap size. You can select as many or as few as you want. This will only be run once, unless you ask for it to run again by setting a preference.

JUnitLaunchFixer is released under the Eclipse Public License. It’s an open source project, so if there’s something you’d like to see it do, or you want to help out, let us know.

As of this moment, it’s only been tested with Eclipse Ganymede (3.4) on Windows 7 and Snow Leopard. I will be testing with Europa and Galileo soon.

You can download the source and build it yourself, but we also have an Eclipse update site to easily install it from http://junitlaunchfixer.googlecode.com/svn/trunk/JUnitLaunchFixer-update-site/

MiddleClickClose Will Work With Snow Leopard But…

12/02/2009 Update: MiddleClickClose has been updated for 64-bit Safari. More info here.

I have upgraded my Mac to Snow Leopard, and as soon as I loaded Safari, I could see that MiddleClickClose was no longer working. I had already heard from someone that this was so, and I had expected it, so this was no surprise. It is possible to get it working again by right-clicking (or whatever the native OSX clicks are to get the context menu) on the Safari program in /Applications, selecting Get Info, and then checking the “Open in 32-bit mode” checkbox. Once you do that, SIMBL and MiddleClickClose both load, and the plugin works. But you’re in 32-bit mode.

MiddleClickClose is totally dependent on SIMBL. If SIMBL won’t load, neither will MiddleClickClose. The solution is, most likely, to get a 64-bit build of SIMBL, but I don’t know if that’s a simple matter or not. The SIMBL developer has said that he only has a PPC machine running Tiger, so I don’t really see how he’s going to get it running. If he does, then maybe there is hope. If not, your only option is to run Safari in 32-bit mode.

Or use Firefox, which is what I do.

1 eeePC, 2 SDDs, 1 Pendrive, Ubuntu, Win7 and dd – Hoo-wee!

If you’ve ever been here before, you know that I bought an Asus eeePC 900a a few months ago. After buying it, I pulled out the 1G RAM and 4G SDD and replace them with 2G RAM and a 32G SDD. I also swapped a few times between Easy Peasy and Ubuntu Netbook Remix, but I finally settled on the RC of Windows 7. At first, Win7 seemed to be snappy, but as I really used it, it was dog slow. After running some speed tests on the SDD, I discovered that it was pitifully slow, especially when writing, and that was making the system almost useless. I would open Firefox and try to use Gmail, and it would sometimes take over a minute to open an email, meanwhile the drive light was solid, instead of just flickering.

So I took a chance and ordered what looked like a much faster SDD. It shipped on Thursday evening and, much to my surprise, arrived in my mailbox on Saturday. For comparison, the first SSD I bought had these specs:

  • Sequential Read: up to 40MB/s
  • Sequential Write: up to 15MB/s

By contrast, the new one has these specs:

  • Sequential Read: 155MB/sec
  • Sequential Write: 100MB/sec

You can see a marked difference between the two. When I bought the first one, I didn’t have anything to compare it to, so it didn’t seem like it would be that bad. It was. Now, these numbers are somewhat deceptive in that they are most likely burst rates, not sustained. So while the new drive is capable of hitting 100MB/sec writing, that’s only for short bursts, and won’t hold out over a long series of writes. It’s sort of like a cheetah; it can run extremely fast, but only for short periods of time.

I decided to install it last night, but since I had already installed Windows 7 on the existing drive, I really didn’t want to have to reinstall it, plus reinstall all my programs and reset all my preferences. So I got to thinking, and I came up with a be-you-tee-ful plan. Let me ‘splain.

I have an 8G pendrive that already had the live image of Ubuntu Netbook Remix on it, and I knew that it was bootable. I booted off that drive and mounted the Windows 7 SSD to see how much space it was using and make a copy. Since there wasn’t enough space on the pendrive for a 32G image, I knew that I would need external storage. I brought it up to my office and then got a MacGyvered external drive enclosure and a spare 160G hard drive working with the eeePC. (I say it’s MacGyvered because a few months ago I tore the enclosure apart, removing the existing hard drive to try to turn it into an external CD-ROM drive. That didn’t work, so when I was doing this operation, the drive was sitting on top of part of the enclosure, upside-down, with the cables hanging out. It was ugly.)  I then mounted the 160G drive while booted into Ubuntu from the pendrive, and executed the following command:

dd if=/dev/sda of=eee.iso

For those of you who don’t know Unix commands, dd is a program for doing low-level copies. This command did a full bit-level copy of the entire slow SSD, including all partitions and data, and stored them in a 32G file called eee.iso. (Yes, it’s not really an ISO, but I had to call it something.) That took about 30 minutes to copy the whole drive. I then shut the computer down, replaced the slow SSD with the faster one, and rebooted off the pendrive again. Once it was booted, I remounted the external drive, cd’d into the location where I had put the eee.iso file, and executed this command

dd if=eee.iso of=/dev/sda

About an hour and half later, I had a perfect copy of my original SSD that was bootable, and which Windows 7 was happy with (it even installed the correct driver upon first boot).

I am immensely happy with my system now. It’s extremely fast, and not just compared to what it was. Win7 is snappy and responsive, my programs all work, and I didn’t have to reinstall anything.

And that’s just cool.

The iPhone 3GS GPS Is Crazy Good

I have a Garmin eTrex Venture hand-held GPS that I bought about five years ago. I used it for years mounted to my bicycle handlebars for when I would go trail riding to inject a bit of geekery into my rides. I would then download the tracks off of it and pull them into Google Earth to see where I’d been. It worked pretty well, but it had some annoying tendencies. The first was that it took nearly 10 minutes after turning it on before it really knew where it was. It wanted to get strong signals from twelve satellites before it would give you a decent reckoning of where you were on the planet, and that took a while. It was also very sensitive to cloud cover or tree cover. There were many times I’d be riding through the woods and would be in a particularly dense area and it would completely lose any idea of where we were, which is really not what you want your GPS to do.

Last Sunday I decided to get the bike out after a nearly two-year hiatus and go out to my favorite riding spot, Tribble Mill Park. Before I left, I bought an app for my iPhone 3GS from the app store called Trails. When I got to the park and got my bike out and ready, I ran Trails, created a new track entry and started it up. It almost instantly showed me where we were (just like the Google Maps app that is built-in) on the map. I then put the iPhone back into its leather holster, put that inside a canvas saddlebag that hangs under my bicycle seat, and then climbed into the saddle and started riding. I stopped several times along my route to check on it, and not once did it lose the signal. Let me say that again, in a different way: even though the iPhone was encased in leather, ensconced in a canvas bag and under a bicycle seat and my butt, it never lost the GPS signal. It mapped my route perfectly, as can be seen from this screenshot

IMG_0444

That’s pretty darn cool, for a phone! The GPS is not the primary purpose of the device, yet it performs far better than a dedicated GPS device. Now, GPS devices in general may be a lot better now than they were five years ago when I bought mine, so this may be an unfair comparison, but it really blew me away. I had thought about getting a handlebar mount for the iPhone, but if it can do what it needs to do from the relative safety of the saddlebag, I’d much rather keep it in there.

By the way, the Trails app is quite nice and completely worth the $3.99 it cost. I like the fact that you can stop and restart it to pick up where you left off. One really nice feature is that it has a button to launch the iPhone’s camera, so you can take pictures along the way without exiting the program. That’s a nice touch. It also requires you to name each track, which are kept in separate “files” so one track doesn’t show up overlaying another on the map. If you’re into trail riding and you have an iPhone 3GS or 3G, consider buying this great app.