Neal Stephenson's new book "Reamde" (not a typo) is coming out on September 20th. However, the UK Kindle version appears to be available for download right now! Very jealous.
UPDATE (Sept. 2): the UK Kindle version is now showing up as pre-order, but the UK hardback appears to be available now. Not sure what's going on. Either way, it still looks like I have to wait until the 20th to get the book in the USA.
Anyone still there? Good.
I was signing some JAR files for an Eclipse plugin -- nothing fancy, just using the normal jarsigner command-line tool -- and while this has worked fine for me in the past, this time I was getting errors every time I tried to install the plugin. Not errors about the signature, errors about the plugin itself. "Plugin does not have a valid identifier" and "Plugin does not have a valid version" kinda errors.
The unsigned version of the plugin worked, but not the signed version. I knew it had something to do with the signature process but I couldn't figure out what. After a LOT of searching, my biggest clue was an Eclipse forum post referencing a StackOverflow question, both dealing with the jarsigner tool overwriting the MANIFEST.MF file in the plugin JAR file.
It made sense that this would cause the error I had, and when I looked at my plugin, sure enough my META-INF/MANIFEST.MF file had been replaced by a new file listing the hash digests of the signed files (as described in the jar file documentation).
In the case of a signed OSGi plugin, the Manifest file has a dual purpose. First, to act as a descriptor for the plugin (version information, etc.), and second as a list of hashes as described above. What is supposed to happen is that the signature information gets appended to the file, after the existing plugin information. But for me, the plugin headers were being completely overwritten.
The Eclipse forum and StackOverflow links indicated that this was a problem with some of the Java 1.5 versions and that it was fixed in 1.6. But I was trying with Java 1.5.0_22 as well as 1.6.0_20 (aka Java 6 update 20, aka Java 6u20), and both were giving me the same problem. I went for hours thinking that I must be doing something wrong, and went through manually repackaging the JAR file, converting linefeeds to CRLF, adding and removing and changing order of manifest information, and all sorts of other things, all to no avail.
Then I finally found a bug report for Java 6u20 describing exactly my problem. The solution? Use a Java 1.6 version either prior to update 18 or after update 21. Surely it couldn't be that simple? But I downloaded 1.6.0_26 from the SunOracle website, installed it, and... everything started working!
So the issue was that on the particular Windows VM I was on, I just happened to have these "magical" versions of Java with exactly this bug. Normal automatic Java updates didn't help because those update the JRE but not the JDK. After a manual install of the latest Java 6 JDK, I now have a working signed plugin (and a strong desire to drink a beer).
However, as I've been "on my own" again and finding work, it might seem strange that I haven't been announcing my situation to the world and using my website and all the social networking tools at my disposal, screaming "Hire Me!".
The answer is, actually, that I have been. I've been using my website, podcasts, social networks, personal networks, conferences, and the like in order to continuously announce this for the past 9 years. I just don't use those particular words. Instead, the words have been things like:
That, to me, is how you use social networking (or the Internet in general) to find work or customers. Make yourself discoverable, and when people discover you give them something useful. The caveat is that it's probably a longer sales cycle than most people want it to be. This is the age of the quick hit: Find a Job using Twitter in less than 10 Days! It doesn't work like that. It takes time to build relationships.
For example, one of the things I'm doing right now is providing developer support for the Turtle Partnership. They've already got a very capable development team, but as they have requests or things I can help with, I provide backup. It's good for me because it helps keep me busy while leaving me open to pursue other projects as I can fit them in.
Someone asked me how I made that arrangement, because they wanted to do that sort of thing too. I said, "It's hard to say... we all just kind of knew each other already." We speak at the same conferences, write blogs, make comments on Facebook, chat on Skype. There were no resumes or interviews involved; the relationship was already there.
I know this sounds preachy and I'm sorry about that. But I think this is important. Please don't take this as some kind of arrogant "I'm so great and I know so many people and you should be just like me" kind of statement either. I'm not going to make a laundry list of partnerships I have or projects I've worked on, because that ends up diluting the message. And the message is: you can do this too, if you want, but you have to put yourself out there and it won't happen overnight.
You don't have to be on Twitter and Facebook and Google+ and every other social network all the time, but you should at least dip your toe in the water now and then and see what's going on. Say something every once in a while. Gradually meet people and let them meet you. Go to a few conferences and meet people face-to-face (gasp!).
It does take effort, but it's your choice.
(UPDATE: did that whole thing sound really pompous? I hope not. I guess I just know a lot of people looking for work or wondering where the next job will come from, and I wanted to make the point that social networking can actually work. At least sometimes.)