<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Catalina Creek</title>
		<link>http://catalinacreek.com/blog//</link>
		<description>Catalina Creek Blog</description>
		<copyright>Copyright 2008-2009 Catalina Creek, LLC</copyright>
		<pubDate>Sat, 06 Feb 2010 2:17:11 +0000</pubDate>
		<language>en-us</language>
		<docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
		<generator>Catalina Creek Editor</generator>
		<managingEditor>brian@catalinacreek.com</managingEditor>
		<webMaster>brian@catalinacreek.com</webMaster>
		<item>
			<title>Dude Where&apos;s My Website?</title>
			<link>/blog/Dude_Where%27s_My_Website%3F</link>
			<guid>/blog/Dude_Where%27s_My_Website%3F</guid>
			<description>A funny thing happened on my way to getting a software development contract signed.  To secure the insurance, I reviewed all the wording on my website, and took down my blog.&lt;br&gt;&lt;br&gt;Here is what happened:&lt;br&gt;&lt;br&gt;A representative from a sort of head-hunter called me up, and said a big company was interested in hiring me to do some mobile development of applications on Blackberry and Android.  Fantastic! I knew the company and the people, and was really looking forward to working with them.  &lt;br&gt;&lt;br&gt;We agreed on price and starting date.  He listed the things I needed, which were the usual requests, such as a business license, general liability insurance, and a couple non standard items: Fidelity (theft) insurance, and &lt;a href=&apos;http://www.businessinsurancenow.com/professional_liability.aspx&apos;&gt;Professional Liability Insurance&lt;/a&gt;.  I&apos;d also have to pass a background check.  No biggie.&lt;br&gt;&lt;br&gt;All the paperwork arrives that I need to sign, including the consent for the background check. I fill it out, fax it all back.  I also went to City Hall, got a copy of my business license, contacted my insurance agency (State Farm), and had them fax in the information on my business insurance to the head-hunter agency.&lt;br&gt;&lt;br&gt;I get a call that I passed the background check, so I&apos;m ok to work. Cool.&lt;br&gt;&lt;br&gt;I&apos;m on the job now, which was actually a little funny as it was a great team, but just meeting after meeting, no one really writing code, just discussions on how best to write a list control.  So I get tired of that, and write the code to get the app off the ground, and this really seemed to motivate the team, and we were off, writing code, making the product.&lt;br&gt;&lt;br&gt;Well, a week or so goes by of solid work, and I get a call from a lady at the headhunter that the insurance I have from State Farm is just general business insurance, not Professional Liability Insurance, and also not Theft insurance.  Also, if I don&apos;t get the insurance squared away, they can&apos;t put me officially into their system, which means I won&apos;t get paid. Oh crap!&lt;br&gt;&lt;br&gt;On my lunch break, I call up the State Farm rep, tell her the deal, and we schedule a time where we can go over the application for the insurance.  Ugh, sounds painful.  The following day, we go through questionnaire that takes around twenty minutes to complete.  She said she will send this off to their underwriter, who will do whatever they do, then get back to me with a quote.&lt;br&gt;&lt;br&gt;Three or four days later, the State Farm rep calls me up and says my application for Professional Liability Insurance was denied.  I asked her why.  She didn&apos;t know, so she had to make some calls.  Wonderful.  She gets back to me and said that it was because my company website states it, &quot;designs software&quot;.  They did not want to insure DESIGNS.  Designs outlive the implementation; the design could outlive me!  I guess it&apos;s the difference of being the architect who draws up the blueprints, and the person who hammers the nails.  Insuring the blueprints is a whole different thing than insuring the work of someone hammering the nails.&lt;br&gt;&lt;br&gt;The thing is, I was redesigning my website anyway.  It used to be all about location based applications, and in the text, I said something about being a design and development shop.  It&apos;s this line that apparently cost me the insurance (or cost them a customer, I guess). &lt;br&gt;&lt;br&gt;I wasn&apos;t too worried about getting the insurance from somewhere.  I mean, companies that build bombs get insurance.  Companies that build parts that keep airplanes in the air get insurance.  Surely I can get insurance for building consumer smartphone applications. &lt;br&gt;&lt;br&gt;But in redesigning my website in the evening, I scrubbed every word I put up there, trying to see it from the eye of an insurance agent.  Did I want to say, &quot;Software Development&quot; ? Well, I mean, that is what I do.  I figured &quot;design&quot; is part of &quot;development&quot; anyway, so I could leave out &quot;design&quot;.  What about the blog.  Oh, that had to go.  I imagined the voice of the next place denying me coverage saying something like, &quot;Well in this blog post you said..&quot;  Forget that.&lt;br&gt;&lt;br&gt;I called up another insurance agency, and this guy said something like, &quot;Do you build rockets, or anything that explodes?&quot;  I answered, &quot;No.&quot;  He said, &quot;Ok then I can get you insured.&quot;  This guy was great.  It took a lot of work to figure out exactly what the headhunter place was looking for and in what amounts, but it eventually got done, underwritten through The Hartford.  &lt;br&gt;&lt;br&gt;It took about three weeks, from applying for insurance at State Farm, to getting their rejection, to finding a new place, to the back-and-forth between the headhunter, to finally getting the insurance confirmation faxed over to the headhunter. &lt;br&gt;&lt;br&gt;That was over six months ago, so I&apos;m putting back the blog, and going to try to get back to writing and not worrying about the glances of insurance agents.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
			<pubDate>Sat, 06 Feb 2010 02:09:59 -0500 </pubDate>
		</item>
		<item>
			<title>Sore Achilles Ships!</title>
			<link>/blog/Sore_Achilles_Ships%21</link>
			<guid>/blog/Sore_Achilles_Ships%21</guid>
			<description>The Sore Achilles workout log combination Android application and Web application, sync&apos;ing between them, and between multiple android devices, exportable to sd card, GPS aware, runs in the background, finally ships!  You can check it out at &lt;a href=&apos;http://www.soreachilles.com&apos; target=&apos;_blank&apos;&gt;soreachilles website&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;strong&gt;If you have an Android device,&lt;/strong&gt; you can find it at &lt;a href=&apos;market://search?q=pname:cc.soreachilles&apos; target=&apos;_blank&apos;&gt;the Android Market&lt;/a&gt; &lt;em&gt;(this link only works from an Android device)&lt;/em&gt;.&lt;br&gt;&lt;br&gt;Also from an Android device, you can visit the main &lt;a href=&apos;http://www.soreachilles.com&apos;&gt;sore achilles site&lt;/a&gt; and tap the Android device image, and it&apos;ll take you to the store.  It looks like:&lt;br&gt;&lt;img src=&apos;/images/msandroid.jpg&apos;&gt;&lt;br&gt;&lt;br&gt;It&apos;s a free beta right now while looking at how it&apos;s getting used.  &lt;br&gt;&lt;br&gt;Already I&apos;m seeing people trying to delete everything from the Testdrive account, heh.&lt;br&gt;&lt;br&gt;Anyway lots more to follow on this, but just wanted to throw out a quick note that my latest app is out there available to get hammered.  &lt;br&gt;&lt;br&gt;The plan is to soak it in beta for a week while it gets some usage and I fix things here and there. Then release a free slightly limited (1 hour/10 mile limit per workout, probably with admob ads), and an unlimited no ads version for $10.  That&apos;s the plan.&lt;br&gt;&lt;br&gt;</description>
			<pubDate>Sun, 26 Jul 2009 20:38:32 -0500 </pubDate>
		</item>
		<item>
			<title>Google IO Wrap Up</title>
			<link>/blog/Google_IO_Wrap_Up</link>
			<guid>/blog/Google_IO_Wrap_Up</guid>
			<description>Google puts on a nice conference.  The 2009 Google I/O show ended a few days ago. Between pulling out weeds from my yard so I&apos;m not the eye-sore of the neighborhood, I&apos;ve been going over what was said and shown there.&lt;br&gt;&lt;br&gt;The big news for me really wasn&apos;t Google Wave itself, though the demo looked great and it seems like it could be huge, but I can&apos;t get in.  After filling out the registration form from the email, I&apos;m still waiting for an account. I was interested in that Google Wave was created using the Google Web Toolkit.  More on that in a bit.&lt;br&gt;&lt;br&gt;To me the really big news was all about Android, and the best part of that was the new phone with OS version 1.5 literally handed out to everyone there.  Ten minutes after receiving the new phone, I had the (working title) Sore Achilles Workout Log application running on it, including the 3d rotation, the touch graph, the network sync, and everything else.  It just worked.  The new phone has orientation sensors that cause a flip from portrait to landscape on rotate, the first generation G1 phone requires flipping out the keyboard to cause an orientation change.  It didn&apos;t matter, from an application point of view, it worked the same.  To be handed a phone, with a charged battery and a SIM, and be told essentially to &quot;go play with it&quot; was just fantastic and fun.  Even better was that the version of Android seemed fully backward compatible.&lt;br&gt;&lt;br&gt;The Android engineers were hanging out in their office hours booth and very approachable, answering technical question after technical question.  I showed Romain Guy the 3d rotation and asked if there was a bilinear filter bit I could set to make the image smooth duration rotation.  He said he there was, but it&apos;s currently super slow and it&apos;s something they need to work on.  Great answer.&lt;br&gt;&lt;br&gt;On to GWT.  It&apos;s a bit of a quirky idea: write a website in Java on Eclipse, then have a compiler spit out optimized Javascript.  In keeping with the quirky nature, the GWT team likes to pronounce all quirky acronyms.  GWT = &quot;Guh-wit&quot; , OOPHM = &quot;Uuf-Umm&quot; , JSNI = &quot;Jisney&quot; and so on.  &lt;br&gt;&lt;br&gt;I&apos;ve been using the Google Web Toolkit since 2007 or so, and really bought into the promise of it: Easier AJAX than you can write by hand, Java tools for creating websites, and a shield between browser quirks.  I&apos;ve written several applications using GWT and have been really impressed, but there have always been a couple more features I&apos;ve wanted.&lt;br&gt;Well, the Wave team, Wave is web application that runs in the browser just like Google Maps, wasn&apos;t impressed with it in 2007 and apparently wrote a huge internal document describing the problems (this from the Google Wave using GWT session).  The GWT team just fixed everything, and made it possible for the Wave team to write a huge, Java, multi-megabyte application that is downloaded async in pieces,  without worrying much about Javascript quirks across browsers.  They eat their own dogfood, and the development of Wave really pushed the development of GWT.  &lt;br&gt;&lt;br&gt;They key part for me, however, is the Wave team grabs trunk build of GWT.  They don&apos;t wait for milestones drops.  There are currently a lot of features on the trunk that should be in GWT 2.0, tentatively scheduled for release in Q3.  So onto the trunk I go for my builds of internal projects.  &lt;br&gt;&lt;br&gt;I attended a couple of other session tracks, such as Persistence in App Jet.  I just can&apos;t get that excited right now about a hosting environment that requires redo&apos;ing the whole persistence layer.  That&apos;s filed under the, &quot;good to know for a start-from-scratch project, or when there&apos;s lots of time to port an app to Google&apos;s App Engine&quot;.  The App Engine persistence layer isn&apos;t SQL, isn&apos;t relational.  But it does scale really, really well.  It&apos;s definitely a good thing to have out there, but it&apos;s real work to get an existing MySQL or whatever project ported over to it.&lt;br&gt;&lt;br&gt;Good times at Google IO.  Saw friends there, got a nice phone, talked to engineers, saw Wave, fun party on Wednesday night.  What&apos;s not to like?&lt;br&gt;</description>
			<pubDate>Mon, 01 Jun 2009 10:38:55 -0500 </pubDate>
		</item>
		<item>
			<title>Sore Achilles on Android during Triathlon</title>
			<link>/blog/Sore_Achilles_on_Android_during_Triathlon</link>
			<guid>/blog/Sore_Achilles_on_Android_during_Triathlon</guid>
			<description>Here&apos;s some video from the indoor mini-tri we at the Lifetime gym.  I&apos;m trying to demo some alpha-testing of the app, while hammering on the spinbike.&lt;br&gt;&lt;br&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-fewLV1N9qY&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-fewLV1N9qY&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;&lt;br&gt;What&apos;s actually kind of interesting, besides showing a cool product, is that the touch screen works really well even when super hot and sweaty. I&apos;ve noticed the iPhone screen doesn&apos;t respond well after I&apos;ve been on the elliptical or treadmill for 20 mins or so.</description>
			<pubDate>Mon, 18 May 2009 19:38:19 -0500 </pubDate>
		</item>
		<item>
			<title>SoreAchilles App Action Shot</title>
			<link>/blog/SoreAchilles_App_Action_Shot</link>
			<guid>/blog/SoreAchilles_App_Action_Shot</guid>
			<description>We did another indoor tri yesterday at the Lifetime gym, then had drinks and food afterward.  I&apos;m smoked!&lt;br&gt;&lt;br&gt;This time, I had the Sore Achilles application on Android on the bike and treadmill.  Very cool!  Here I am using it on the spin bike:&lt;br&gt;&lt;br&gt;&lt;img src=&apos;http://www.catalinacreek.com/images/LifetimeTri.jpg&apos;&gt;</description>
			<pubDate>Mon, 18 May 2009 14:56:03 -0500 </pubDate>
		</item>
		<item>
			<title>Placing a prepopulated sqlite database in an Android app</title>
			<link>/blog/Placing_a_prepopulated_sqlite_database_in_an_Android_app</link>
			<guid>/blog/Placing_a_prepopulated_sqlite_database_in_an_Android_app</guid>
			<description>How do you stick a prepopulated sqlite database into your Android app&apos;s data directory at runtime?  That&apos;s a question that has been cropping up in the Android forums and IRC channel.  In order to create a big database at runtime, like a phone number database, one technique is to ship an xml file, and run through it, doing INSERT commands one at a time into the database for each row.&lt;br&gt;&lt;br&gt;But you can just take the database file off an emulator, and store it in your android raw resources.  Then when your app runs, just blast the whole database into the right place.&lt;br&gt;&lt;br&gt;It&apos;s best to take the database off the emulator, as opposed to creating it on a desktop PC, to ensure the raw file&apos;s endianness matches the hardware and the sqlite database versions are compatible. &lt;br&gt;&lt;br&gt;To get the database off the emulator, use &quot;adb pull&quot;&lt;br&gt;From a terminal prompt:&lt;br&gt;adb pull data/data/&amp;lt;your package&amp;gt;/databases/&amp;lt;database name&amp;gt;.db prepopulated.db&lt;br&gt;&lt;br&gt;Put prepopulated.db into the &quot;res/raw&quot; directory in your android project.&lt;br&gt;&lt;br&gt;To actually import the code, just open an import stream to your raw file, and an output stream to the right directory for your database.&lt;br&gt;Then you can just the exiting Android database wrappers to get to the database, like so:&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;codeblock&quot;&gt;&lt;br&gt;public class HelloDB extends Activity {&lt;br&gt;&lt;br&gt;	private static final String PACKAGE_NAME = &quot;cc.HelloDB&quot;;&lt;br&gt;&lt;br&gt;	private static final String DATABASE_NAME = &quot;prepopulated.db&quot;;&lt;br&gt;	private static final String TEST_TABLE_NAME = &quot;tableInDB&quot;;&lt;br&gt;&lt;br&gt;// this is the ID of the database in your res/raw folder:&lt;br&gt;	private static int DB_RAW_RESOURCES_ID = R.raw.preopulateddb;&lt;br&gt;&lt;br&gt;	private static class DatabaseHelper extends SQLiteOpenHelper {&lt;br&gt;		DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, 1);}&lt;br&gt;		public void onCreate(SQLiteDatabase db) {}&lt;br&gt;		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}&lt;br&gt;	}&lt;br&gt;	public void onCreate(Bundle savedInstanceState) {&lt;br&gt;		super.onCreate(savedInstanceState);&lt;br&gt;		setContentView(R.layout.main);&lt;br&gt;		importDB();&lt;br&gt;	}&lt;br&gt;	private void importDB(){&lt;br&gt;		try {&lt;br&gt;			String myDbDir = &quot;/data/data/&quot; +PACKAGE_NAME+ &quot;/databases&quot;;		&lt;br&gt;			(new File(myDbDir)).mkdir();&lt;br&gt;&lt;br&gt;			OutputStream dos = &lt;br&gt;    new FileOutputStream(&quot;/data/data/cc.HelloDB/databases/&quot;+DATABASE_NAME);&lt;br&gt;			InputStream dis =&lt;br&gt;    getResources().openRawResource(DB_RAW_RESOURCES_ID);&lt;br&gt;			byte[] buffer = new byte[1028];&lt;br&gt;			int length;&lt;br&gt;			while ( (length = dis.read(buffer)) &gt; 0 ) {&lt;br&gt;				dos.write(buffer);&lt;br&gt;			}&lt;br&gt;			dos.flush();&lt;br&gt;			dos.close();&lt;br&gt;			dis.close();&lt;br&gt;&lt;br&gt;			DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br&gt;			SQLiteDatabase db = dbHelper.getWritableDatabase();&lt;br&gt;&lt;br&gt;			Cursor c = db.rawQuery(&lt;br&gt;                          &quot;select count(*) from &quot; +TEST_TABLE_NAME, null);&lt;br&gt;			c.moveToFirst();&lt;br&gt;			int numRows = c.getInt(0);&lt;br&gt;			Toast.makeText(&lt;br&gt;                          this, &quot;Num rows = &quot;+numRows, Toast.LENGTH_LONG).show();			&lt;br&gt;		} catch (Exception e ){&lt;br&gt;			e.printStackTrace();&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;</description>
			<pubDate>Thu, 14 May 2009 11:16:17 -0500 </pubDate>
		</item>
		<item>
			<title>iPhone Globe first cut snow effects</title>
			<link>/blog/iPhone_Globe_first_cut_snow_effects</link>
			<guid>/blog/iPhone_Globe_first_cut_snow_effects</guid>
			<description>I did some consulting work on this project, programming the snow effects (hey I even created the snow flake in photoshop ;) as a simple randomized sin/cos function with hittesting against the sides of the globe each frame.  This just took a few hours to demo that the framerate was pretty good with the number of flakes, and so on.&lt;br&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/l-Mkj754WRE&amp;hl=en&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/l-Mkj754WRE&amp;hl=en&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</description>
			<pubDate>Fri, 03 Apr 2009 13:10:22 -0500 </pubDate>
		</item>
		<item>
			<title>Thinkpad Keyboard Replacements</title>
			<link>/blog/Thinkpad_Keyboard_Replacements</link>
			<guid>/blog/Thinkpad_Keyboard_Replacements</guid>
			<description>Some of the new Thinkpads (T400/T500 series) are being manufactured with lighter keyboards that contain a lot of flex, compared to older Thinkpad&apos;s and their rock-solid keyboards.  Lenovo finally figured out the problem and are offering a keyboard replacement program, where you let them know your laptop model, and they send you back an older-style (T61) keyboard, which you slap in, and apparently that fixes the problem.&lt;br&gt;&lt;br&gt;As of yesterday (March 9th), the new laptops are supposed to be manufactured with the new, lighter keyboards, but still maintain the solid feel.&lt;br&gt;&lt;br&gt;They&apos;re stopping the keyboard replacement program as of March 31st, as the manufacturing problem is supposedly fixed.&lt;br&gt;&lt;br&gt;More information on the &lt;a href=&apos;http://forums.lenovo.com/lnv/board/message?board.id=Special_Interest_General&amp;message.id=3978#M3978;&apos;&gt; Lenovo forum&lt;/a&gt;&lt;br&gt;</description>
			<pubDate>Wed, 11 Mar 2009 00:31:30 -0500 </pubDate>
		</item>
		<item>
			<title>Eclipse Method Collapse</title>
			<link>/blog/Eclipse_Method_Collapse</link>
			<guid>/blog/Eclipse_Method_Collapse</guid>
			<description>One feature I really got used to with SlickEdit was collapsing and expanding methods via SlickC&apos;s plusminus method.&lt;br&gt;&lt;br&gt;I poked around Eclipse to figure out how to do the same thing, or something similar (that is, keybindings to collapse source to all methods, expand all, collapse individual methods and expand individual methods)&lt;br&gt;&lt;br&gt;It seems like you have to enter &quot;collapse mode&quot; by hitting ctrl-numpad-/  then the collapse methods Quick-Access (ctrl-3) will list Collapse Methods.&lt;br&gt;&lt;br&gt;I bound ctrl-shift-numpad-plus to &apos;expand all&apos; and ctrl-shift-numpad-minus to &apos;collapse methods&apos;.  The &quot;when&quot; is set to &quot;Editing Text&quot;. This isn&apos;t quite as nice as plusminus &apos;s ability to toggle between collapse expand on a single key, but it&apos;s close.&lt;br&gt;&lt;br&gt;I&apos;m not sure why, but binding those keys to expand all and collapse methods didn&apos;t work until I bound them to the numpad keys.  No idea why.</description>
			<pubDate>Sun, 08 Mar 2009 19:33:01 -0500 </pubDate>
		</item>
		<item>
			<title>Indoor Tri</title>
			<link>/blog/Indoor_Tri</link>
			<guid>/blog/Indoor_Tri</guid>
			<description>Video of indoor triathlon I did with friends in our running group - courtesy of Janet Choi:&lt;br&gt;&lt;br&gt;&lt;object width=&quot;425&quot; height=&quot;349&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/P-8KJARdZ8g&amp;border=1&amp;color1=0x6699&amp;color2=0x54abd6&amp;hl=en&amp;feature=player_embedded&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/P-8KJARdZ8g&amp;border=1&amp;color1=0x6699&amp;color2=0x54abd6&amp;hl=en&amp;feature=player_embedded&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;349&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;&lt;br&gt;&lt;a href=&apos;http://soreachilles.org&apos;&gt;Sore Achilles&lt;/a&gt;&lt;br&gt;</description>
			<pubDate>Mon, 02 Mar 2009 03:47:22 -0500 </pubDate>
		</item>
		<item>
			<title>Building OpenJDK on Vista and XP</title>
			<link>/blog/Building_OpenJDK_on_Vista_and_XP</link>
			<guid>/blog/Building_OpenJDK_on_Vista_and_XP</guid>
			<description>There&apos;s a lot of information around on how to build the JDK, but some if it seems dated already, so I just wanted to jot down my experience trying to get it to build.&lt;br&gt;&lt;br&gt;I stopped trying to get it to build on Vista.  I guess during the &apos;make sanity&apos; process, it tries to run freetype_versioncheck.  On Vista with VS2008, this would cause one unhandled exception after another.  I popped into the debugger to see if I could see anything, but I couldn&apos;t tell what was wrong.&lt;br&gt;Then in trying a &apos;make fastdebug_build&apos; it failed again somewhere.  I forget where.  I ran the command prompt as administrator &amp; turned off DEP, but that didn&apos;t help.&lt;br&gt;&lt;br&gt;So I booted up an xp box, copied over all the files I downloaded from Vista, and tried again.  Much better.&lt;br&gt;&lt;br&gt;A couple of notes on things I did:&lt;br&gt;&lt;br&gt;I copied all dependencies into a common directory, and renamed them to not contain spaces.&lt;br&gt;The freetype that makes freetype_versioncheck that I downloaded looks for &quot;zlib1.dll&quot; and &quot;freetype6.dll&quot;.  The makefile seems to try and copy &quot;freetype.dll&quot;.  This causes problems.  I copied freetype6.dll and zlib1.dll (from the freetype/bin directory) into my Windows/System32 directory.&lt;br&gt;&lt;br&gt;On the Windows XP box, I&apos;m using VS2003.  Before running the cygwin shell, I run vcvars32.bat to get the path to the environment set.&lt;br&gt;&lt;br&gt;The binary plugs can&apos;t just be extracted with 7zip.  You can extract the README, but you have to execute it like this:&lt;br&gt;java -jar jdk-7-ea-plug-b49-windows-i586-26_feb_2009.jar&lt;br&gt;then it extracts the rtclosed.jar file.  It&apos;s this extracted path that is needed for the plugs.&lt;br&gt;&lt;br&gt;make sanity  finds a lot of problems, but not everything.  For instance, it didn&apos;t notice that I had the wrong binary-plugs folders (at first, I didn&apos;t run the jar, I just extracted the contents using 7zip).  &lt;br&gt;&lt;br&gt;The rest of the information out there seems accurate enough: make ver 3.81 doesn&apos;t work, need all those ALT_ paths set, need directX, need cygwin.&lt;br&gt;&lt;br&gt;Building this thing is a long process of encountering a problem, trying to fix it, and starting the build over to see if it works.&lt;br&gt;&lt;br&gt;~ 2.5 hours later and it&apos;s done.&lt;br&gt;&lt;pre&gt;&lt;br&gt;&gt;&gt;&gt;Finished making images @ Sun Mar  1 19:43:19 EST 2009 ...&lt;br&gt;...&lt;br&gt;finished:&lt;br&gt;$&lt;br&gt;&lt;pre&gt;</description>
			<pubDate>Sun, 01 Mar 2009 20:26:36 -0500 </pubDate>
		</item>
		<item>
			<title>From C++ to Objective-C</title>
			<link>/blog/From_C%2B%2B_to_Objective-C</link>
			<guid>/blog/From_C%2B%2B_to_Objective-C</guid>
			<description>Found a &lt;a href=&apos;http://ktd.club.fr/programmation/fichiers/cpp-objc-en.pdf&apos;&gt;pretty nice PDF&lt;/a&gt; that gives a quick overview of syntax and languages differences from C++ to Objective-C.&lt;br&gt;It has been translated from French, so it&apos;s a little awkward here and there, but otherwise, very nice to have the overview.&lt;br&gt;&lt;br&gt;I&apos;ve &lt;a href=&apos;/files/cpp-objc-en.pdf&apos; target=&apos;_blank&apos;&gt;hosted a copy here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;</description>
			<pubDate>Sun, 07 Dec 2008 13:32:11 -0500 </pubDate>
		</item>
		<item>
			<title>MacBook Pro Water Submersion</title>
			<link>/blog/MacBook_Pro_Water_Submersion</link>
			<guid>/blog/MacBook_Pro_Water_Submersion</guid>
			<description>I bought a refurbished MacBook Pro after Apple announced the new versions.&lt;br&gt;&lt;br&gt;A few days ago, I left it open and running XCode while I went upstairs to take a shower.  When I came downstairs, woooh, I noticed a leak in my ceiling directly above the MacBook Pro.  It was as bad as it could be -- the screen was up, and water was continually falling right into the keyboard.  The Mac had shut itself off.&lt;br&gt;&lt;br&gt;The upshot of this is, I&apos;m now typing this blog entry on the flooded computer.  It&apos;s as good as new (err, refurbished, which as far as I can tell, is like new).&lt;br&gt;&lt;br&gt;What I did wrong:  After freaking out that A) My ceiling had a leak and B) My laptop was flooded, my brain didn&apos;t work so well. I hit the power button on the laptop.  Nothing.  I think it tried to boot, but I&apos;m not sure.  Just a black screen.&lt;br&gt;&lt;br&gt;Here&apos;s how I learned how much of a geek I am: I was 100x more concerned with the laptop than the ceiling.&lt;br&gt;&lt;br&gt;Tilted the laptop to the side, and I believe just about a cup of water poured out the side by the DVI port.   There was a lot of water; it just kept pouring out.&lt;br&gt;&lt;br&gt;I figured it was dead.  I was checking online from my Windows box for deals on other refurbished macs. Anyway, I started taking the Mac apart just to see what was inside.  I&apos;m sure every warantee was violated, but it was probably violated by the water.&lt;br&gt;&lt;br&gt;After getting down to the motherboard, I was able to sop up more water.  Putting it back together and hitting the Power button just resulted in a dead mac, but I was missing a few screws when putting it back.&lt;br&gt;&lt;br&gt;Took it apart again, learned where all the screws were supposed to go and how far they were to be screwed in, and.... it made a noise like the hd was spinning up, then died and everything stopped.&lt;br&gt;&lt;br&gt;Took it apart again down to the motherboard, left it under a lamp, cranked the heat in the house, and hit the sack.&lt;br&gt;&lt;br&gt;Put it back together the next day very carefully, where now I knew where all the screws went, and the screws were just tight enough to hold it together but no more -- it booted and stayed running.  And it&apos;s still running a week later.&lt;br&gt;&lt;br&gt;It&apos;s just as good as when I got it.  All the screws are tight, the fans are running normally, and it seems fine.&lt;br&gt;&lt;br&gt;~1 Month Update:&lt;br&gt;Macbook Pro is still working as good as new/refurbished.  I haven&apos;t rebuilt it since the last time (Dec 6th, I believe) I took it apart.  What can I say, I&apos;m really impressed it&apos;s working at all, let alone perfectly, after  being submerged in water.  &lt;br&gt;Concept C++ runs slow as hell on it, but I&apos;m not blaming Apple for that...&lt;br&gt;I&apos;ve taken to taking showers in the secondary bathroom as I have no clue how to fix the actual ceiling leak...&lt;br&gt;&lt;br&gt;</description>
			<pubDate>Sat, 06 Dec 2008 00:18:17 -0500 </pubDate>
		</item>
		<item>
			<title>So True...</title>
			<link>/blog/So_True...</link>
			<guid>/blog/So_True...</guid>
			<description>&lt;img src=&quot;/images/blog/wtfm.jpg&quot; alt=&quot;wtf per min&quot;&gt;</description>
			<pubDate>Thu, 27 Mar 2008 13:40:34 -0500 </pubDate>
		</item>
		<item>
			<title>From Who Are You Learning C++ ?</title>
			<link>/blog/From_Who_Are_You_Learning_C%2B%2B_%3F</link>
			<guid>/blog/From_Who_Are_You_Learning_C%2B%2B_%3F</guid>
			<description>Would you learn C++ technique from someone who states:&lt;br&gt;&lt;br&gt;&quot;I have not written production software in over 20 years, and I have never written production software in C++. Nope, not ever. Furthermore, I&apos;ve never even &lt;em&gt;tried&lt;/em&gt; to write production software in C++, so not only am I not a real C++ developer, I&apos;m not even a wannabe.&quot;&lt;br&gt;&lt;br&gt;Sounds pretty bad.  And if he goes on :&lt;br&gt;&lt;br&gt;&quot;My C++ programming has been limited to toy &quot;let&apos;s see how this works&quot; (or, sometimes, &quot;let&apos;s see how many compilers this breaks&quot;) programs, typically programs that fit in a single file. (make? Who needs stinkin&apos; make?)&quot;&lt;br&gt;&lt;br&gt;And then if he talks about the standardization work he does:&lt;br&gt;&lt;br&gt;&quot;I&apos;ve never been a member of the C++ standardization committee, I&apos;ve never been on the committee&apos;s mailing lists, and I&apos;ve never attended any standardization meetings. My knowledge of the inner workings of the committee-including the things that have had a significant impact on it-is based on what I&apos;ve read and heard from others.&quot;&lt;br&gt;&lt;br&gt;It turns out, the above are all quotes from &lt;a href=&quot;http://www.artima.com/cppsource/top_cpp_books.html&quot;&gt;Scott Meyers&lt;/a&gt;.  I own and have learned from several of his books, including &lt;a href=&quot;http://www.amazon.com/Effective-C%2B%2B-Addison-Wesley-Professional-Computing/dp/0321334876/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1206575667&amp;amp;sr=8-1&quot;&gt;Effective C++&lt;/a&gt;. He&apos;s a good writer and a great C++ thinking, but wow, what a surprise to find out he doesn&apos;t write production code.  I know the teams I&apos;ve been on have benefited from his books -- but still -- that he has &lt;em&gt;never&lt;/em&gt; have written production C++ code is a surprise. &lt;br&gt;The gap between what&apos;s in the books and what happens in production code is a blog entry waiting to happen.</description>
			<pubDate>Wed, 26 Mar 2008 19:23:05 -0500 </pubDate>
		</item>
		<item>
			<title>Vista Service Pack 1 Success</title>
			<link>/blog/Vista_Service_Pack_1_Success</link>
			<guid>/blog/Vista_Service_Pack_1_Success</guid>
			<description>No problems installing Vista Service Pack 1.  The SP1 install was flawless on my machine, and took 40 minutes.&lt;br&gt;&lt;br&gt;The first (and only so far) change I&apos;ve noticed, is I no longer get an error message from the Apache HTTP server when I boot.  Prior to SP1, I&apos;d get an error message saying, &quot;The operation completed successfully&quot; from Apache.  It&apos;s gone.  Good riddance.&lt;br&gt;&lt;br&gt;&lt;img src=&apos;/images/vistasp1install.jpg&apos; alt=&apos;Vista SP1 Install&apos;&gt;</description>
			<pubDate>Tue, 18 Mar 2008 14:48:27 -0500 </pubDate>
		</item>
		<item>
			<title>Tomcat Comet Pushlet Sample Fixes</title>
			<link>/blog/Tomcat_Comet_Pushlet_Sample_Fixes</link>
			<guid>/blog/Tomcat_Comet_Pushlet_Sample_Fixes</guid>
			<description>The &lt;a href=&apos;http://tomcat.apache.org/tomcat-6.0-doc/aio.html&apos;&gt;chat sample used to illustrate Tomcat&apos;s CometProcessor&lt;/a&gt; doesn&apos;t work. To be fair, it is listed as pseudo code and it&apos;s nice in that it illustrates the proper flow, but I wanted more proof and so fleshed out the sample to be able to chat.&lt;br&gt;&lt;br&gt;The major changes:&lt;br&gt;&lt;ul&gt;&lt;li&gt;It compiles&lt;/li&gt;&lt;li&gt;If you request &lt;strong&gt;chat&lt;/strong&gt;, your message is added to the list (original version just throws them away)&lt;/li&gt;&lt;li&gt;Any request other than &lt;strong&gt;chat&lt;/strong&gt; is a &lt;strong&gt;hold&lt;/strong&gt;.  This is the &apos;long poll&apos; socket -- a response is not returned immediately.&lt;/li&gt;&lt;li&gt;Chat messages are posted to the held sockets.&lt;/li&gt;&lt;li&gt;It uses the JSESSIONID cookie to track if there has already been established.  If so, it&apos;s released.  This fixes a case in Internet Explorer where if you navigate away, the socket is still held &amp; when you return to the chat page, you miss message.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;a href=&quot;/files/ChatServlet.html&quot; target=&quot;_blank&quot;&gt;The code is here.&lt;/a&gt;&lt;br&gt;&lt;br&gt;Update (2/25/2009): I took down the chat pushlet server, as I&apos;m no longer running Tomcat on port 80. The code (a bit hacky, I know, but I didn&apos;t want to completely rewrite the sample) moved around, but it&apos;s there again.</description>
			<pubDate>Fri, 14 Mar 2008 11:10:08 -0500 </pubDate>
		</item>
		<item>
			<title>Latitude Longitude Map Utility</title>
			<link>/blog/Latitude_Longitude_Map_Utility</link>
			<guid>/blog/Latitude_Longitude_Map_Utility</guid>
			<description>In making these various location based services, I&apos;m always needing to figure the Latitude/Longitude for some geographic area.  There area  few on Google Maps, but you have to be signed on access Your Maps, etc.  Just more friction that I need.&lt;br&gt;I&apos;ve put online my utility to get the Lat/Lng for any place, using the Google Maps API.&lt;br&gt;Drag the marker around, and a bubble will appear showing the lat/lng at that point.  You can zoom in using the mouse wheel, drag the map, and so on.&lt;br&gt;&lt;a href=&apos;/files/latlngutil/LatLng.html&apos; target=&apos;_blank&apos;&gt;Latitude Longitude Utility&lt;/a&gt;&lt;br&gt;</description>
			<pubDate>Thu, 06 Mar 2008 12:11:47 -0500 </pubDate>
		</item>
		<item>
			<title>Tilt SmartPhone with iPhone SIM</title>
			<link>/blog/Tilt_SmartPhone_with_iPhone_SIM</link>
			<guid>/blog/Tilt_SmartPhone_with_iPhone_SIM</guid>
			<description>I picked up the AT&amp;amp;T Tilt the other day, but didn&apos;t get another plan or SIM with it. Instead, I decided to use the SIM that&apos;s in my iPhone.  Here are a few results:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Voice calls work&lt;/li&gt;&lt;li&gt;SMS text messaging works&lt;/li&gt;&lt;li&gt;Voice Mail works&lt;/li&gt;&lt;li&gt;Notification of voice mail is an SMS with very cryptic contents, which does not include the phone number of the caller.  This weird SMS (probably related to Visual Voice Mail) notification is followed by a more normal &apos;you have voicemail&apos; style notification&lt;/li&gt;&lt;li&gt;GPS works, assuming you&apos;re using an application that calls the APIs (C   and C# both work).  None of the pre-installed GPS applications work.&lt;/li&gt;&lt;li&gt;TeleNav does not work, requires $10 a month plan.&lt;/li&gt;&lt;li&gt;AIM, MSN, Yahoo Do Not Work : Message says, &quot;IM is not supported over Wi-Fi connections&quot; &lt;/li&gt;&lt;li&gt;Browsing over WiFi works&lt;/li&gt;&lt;/ul&gt;A few of the applications (TeleNav, Messaging) require a real data plan, and aren&apos;t usable over WiFi. &lt;br&gt;&lt;br&gt;AT&amp;amp;T offers a data-only plan for around $30 a month, and another $10 a month plan for TeleNav.  This requires a 2-year contract, and gets you a new SIM and a phone number which no one can call you on, since there isn&apos;t a voice plan.</description>
			<pubDate>Thu, 21 Feb 2008 10:34:24 -0500 </pubDate>
		</item>
	</channel>
</rss>
