<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0UERHg8fyp7ImA9WhRVE0k.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666</id><updated>2012-01-11T21:06:45.677-07:00</updated><category term="DVCS" /><category term="Visual Studio" /><category term="CVS" /><category term="nested set model" /><category term="XML" /><category term="language" /><category term="shared_ptr" /><category term="SQLite" /><category term="Java" /><category term="Mercurial" /><category term="static is evil" /><category term="&quot;LDS Tools&quot;" /><category term="git" /><category term="tips" /><category term="thoughts" /><category term="blogger util" /><category term="hierarchical data" /><category term="Ubuntu" /><category term="PopFly" /><category term="code" /><category term="integrity" /><category term="SVN" /><category term="Android" /><category term="data" /><category term="Facebook" /><category term="database" /><title>Code by Dave</title><subtitle type="html">The place that documents all of the crazy ideas I have and all of the wacky projects that come from them.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://codebydave.blogspot.com/" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/codebydave" /><feedburner:info uri="codebydave" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/3.0/" /><feedburner:emailServiceId>codebydave</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0UERHgzcSp7ImA9WhRVE0k.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-6824338681187167121</id><published>2012-01-11T21:06:00.003-07:00</published><updated>2012-01-11T21:06:45.689-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T21:06:45.689-07:00</app:edited><title>Wifi issues on HP Touchpad</title><content type="html">&lt;br /&gt;
&lt;br /&gt;
I got an HP Touchpad and put Cyanogenmod 7 on it for Jenni to play around with. She used it a tiny bit over Christmas break but then when we got back it wouldn't allow me access to the Market and some other apps once it was connected to our wifi.&lt;br /&gt;
&lt;br /&gt;
 Our router had been acting a little odd with the new laptop we had gotten so I assumed it was because of the router. I got a new router and it still had problems, so I did a little digging. I tried playing around with a bunch of settings and doing all sorts of crazy things, but in the end it turns out that the &lt;a href="http://forums.androidcentral.com/hp-touchpad/128767-google-blocking-touchpad-market-3.html#post1376914"&gt;date was reset to the unix epoch&lt;/a&gt; and setting it to the current date seems to have fixed the issue. Don't access me why that has anything to do with stuff like this, but apparently it does.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-6824338681187167121?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/6824338681187167121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=6824338681187167121" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/6824338681187167121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/6824338681187167121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/psRlxZbbQmg/wifi-issues-on-hp-touchpad.html" title="Wifi issues on HP Touchpad" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2012/01/wifi-issues-on-hp-touchpad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkECSXw-eCp7ImA9WhdSGE8.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-9189079463166207898</id><published>2011-07-27T20:44:00.000-07:00</published><updated>2011-07-27T20:44:28.250-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T20:44:28.250-07:00</app:edited><title>Whether it's a good idea or not...</title><content type="html">As the title implies, this may or may not be a good idea, but here's the story of how I drug my pager into the 21st century. &lt;br /&gt;
So I used to have an iPhone and used Google Voice but at the time there wasn't an official Google Voice app (which ended up being a bit of a dud in my opinion) and the best jailbreak app that I could find at the time (GVMobile+) didn't support push notifications. There were some solutions out there, but they usually involved routing your data through a 3rd party server and that made me feel a little uncomfortable. So I looked into Google App Engine and made my &lt;a href="http://code.google.com/p/gvpush4ios/"&gt;own forwarding server&lt;/a&gt;. Yes, it was still going through a 3rd party server, but it was one that I at least had the warm fuzzy of having control over (who knows what Google may or may not be doing with all the data my app receives, processes and sends).&lt;br /&gt;
Shortly after getting this all up and running, the official Google Voice app came out and not too long after that I switched to an Android phone, so this project became useless and just sat on the shelf...&lt;br /&gt;
That is until I resurrected it to send all my Google Voice notifications to my pager. Most of the time it's unnecessary because I have my phone, but when I don't, it's nice to still get timely notification of texts, voicemails and missed calls. But the best part about it is that to everyone else in the world, they don't have to worry about whether they should call my phone or my pager. I just give out my Google Voice number and it now can act as the single point of contact for me whether I have my phone or not.&lt;br /&gt;
So, if you're interested in using this, then check out the new &lt;a href="http://code.google.com/p/gvpush4pager/"&gt;gvpush4pager project&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-9189079463166207898?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/9189079463166207898/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=9189079463166207898" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/9189079463166207898?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/9189079463166207898?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/j_0kA-xhYxE/whether-its-good-idea-or-not.html" title="Whether it's a good idea or not..." /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2011/07/whether-its-good-idea-or-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUANQ384fSp7ImA9Wx9aFkk.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-7449171127072060940</id><published>2011-03-08T21:06:00.001-07:00</published><updated>2011-03-08T21:09:52.135-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-08T21:09:52.135-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><category scheme="http://www.blogger.com/atom/ns#" term="&quot;LDS Tools&quot;" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>LDS Tools for Android</title><content type="html">So I wanted to start working on the LDS Tools app for Android and it was a bit of a pain to get it all setup, so here's the list of stuff that I had to do to get it to work and hopefully it will help someone else out. I did it with Ubuntu 10.10, but the same general steps should apply to any OS.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Install Eclipse (sudo apt-get install eclipse)&lt;/li&gt;
&lt;li&gt;Verify that Eclipse Update repo setup correctly (&lt;a href="http://code.google.com/intl/es/eclipse/docs/faq.html#wstinstallerror"&gt;instructions here&lt;/a&gt;) (this was actually only a problem for me in Fedora and not Ubuntu)&lt;/li&gt;
&lt;li&gt;Install Android SDK (&lt;a href="http://developer.android.com/sdk/installing.html"&gt;instructions found here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Create a Virtual Device (&lt;a href="http://developer.android.com/guide/developing/devices/index.html"&gt;instructions here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Checkout the code (&lt;a href="https://tech.lds.org/wiki/LDS_Tools_for_Android#Source_control"&gt;Instructions here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Change JDK Compliance to 1.6 in Windows-&amp;gt;Preferences-&amp;gt;Java-&amp;gt;Compiler &lt;/li&gt;
&lt;li&gt;Create a new Android Project in Eclipse using the checked out source&lt;/li&gt;
&lt;li&gt;Install Checkstyle (&lt;a href="http://eclipse-cs.sourceforge.net/downloads.html"&gt;Instructions here&lt;/a&gt;) (I had to set it to exclude the "files not open in editor" to avoid a ton of places that didn't match the style file. Hopefully, that can be resolved as people start to write compliant code)&lt;/li&gt;
&lt;li&gt;Add the checkstyle-config-1.0.0.xml as an "External Configuration File" in the Checkstyle section of the Project Properties&lt;/li&gt;
&lt;li&gt;In the Java Code Style-&amp;gt;Formatter section of the Project Properties, import the ldssa.codestyle.xml file and select that as the Active Profile&lt;/li&gt;
&lt;/ol&gt;Automatic build is enabled by default, so let it do its thing and then you should be able to run the generated executable. For me to get the Android emulator to connect to the internet on my laptop I had to disable my ethernet connection so it would use the wireless, but other than that the compiled app ran great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-7449171127072060940?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/7449171127072060940/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=7449171127072060940" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/7449171127072060940?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/7449171127072060940?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/yPhp-nEoanw/lds-tools-for-android.html" title="LDS Tools for Android" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2011/03/lds-tools-for-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYNRH44fCp7ImA9WxBWGUk.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-6281253362102545825</id><published>2010-02-11T19:36:00.000-07:00</published><updated>2010-02-11T19:36:35.034-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T19:36:35.034-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Why didn't I think of that?</title><content type="html">As much as I love C++, I've also thought that formatted output was a bit of a pain. Every time I have to do it, I spend tons of time looking things up and getting everything to work the way I expect. It's the only time that I long for a C feature (printf). Well, today I stumbled along &lt;a href="http://www.horstmann.com/cpp/iostreams.html"&gt;this article&lt;/a&gt;, and I have to say that the guy is a genius. It's definitely one of those "oh ya" type of things that's almost so simple that it's stupid and makes you wonder why you didn't think of it, but is also so profound that it's amazingly powerful. I tip my hat to the wonderful beauty and power contained in this simple solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-6281253362102545825?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/6281253362102545825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=6281253362102545825" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/6281253362102545825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/6281253362102545825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/kHd0hw6oV8k/why-didnt-i-think-of-that.html" title="Why didn't I think of that?" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2010/02/why-didnt-i-think-of-that.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMQ3k6fSp7ImA9WxNTE0w.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-4723836200312200726</id><published>2009-08-14T21:54:00.003-07:00</published><updated>2009-08-14T22:03:02.715-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-14T22:03:02.715-07:00</app:edited><title>Changing the world...a baby step at a time</title><content type="html">I just finished reading this &lt;a href="http://www.devx.com/cplus/Article/42448/"&gt;excellent interview with Bjarne Stroutrup&lt;/a&gt;. The guy just blows my mind with how much he understands and takes in, and it just made me start thinking about some thing. He uses an amazing analogy in the interview where he points out that the amount of energy required to move a boulder across a town is far greater than to move a pebble across that town, but in the end everyone cares where the boulder is and only if the pebble ends up in someone's shoe does he whine about it.&lt;br /&gt;It made me realize that for the majority of my life I have viewed "genius" and "skill" as getting something done quickly or in some clever manner, but in reality, true genius is in the slow and steady work that moves that boulder. Even in life, very little of any consequence is done in a minute, an hour, or even a day, but the things that truly matter can take a lifetime. It was just an interesting thought that helped me remember that the old adage, "slow and steady wins the race," probably has more truth than even an initial inspection lets on.&lt;br /&gt;...or maybe I'm just getting old.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-4723836200312200726?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/4723836200312200726/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=4723836200312200726" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/4723836200312200726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/4723836200312200726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/c3kX350_iVk/changing-worlda-baby-step-at-time.html" title="Changing the world...a baby step at a time" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2009/08/changing-worlda-baby-step-at-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MEQXw4fCp7ImA9WxJaFkg.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-7916442360867796495</id><published>2009-07-15T22:02:00.004-07:00</published><updated>2009-08-07T06:23:20.234-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-07T06:23:20.234-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nested set model" /><title>Queries for Nested Set Model</title><content type="html">So this is just a follow up post to my &lt;a href="http://codebydave.blogspot.com/2009/07/so-maybe-databases-arent-half-bad.html"&gt;Nested Set Model post&lt;/a&gt; to document the scheme/queries that I'm using to define my tree. I created a node with id=0 called ROOT (since it's basically just a place holder that I use to do the dirty work and won't ever show the user) and create a UNIQUE constraint on (lft, rgt) to satisfy my obsession with data integrity (and I imagine that it should help speed up the queries as well).&lt;br /&gt;&lt;br /&gt;So here's the queries I use to grab the information in useful manners.&lt;br /&gt;&lt;br /&gt;Grab the Whole Tree:&lt;br /&gt;&lt;blockquote&gt;SELECT *&lt;br /&gt;FROM bills&lt;br /&gt;ORDER BY lft;&lt;br /&gt;&lt;/blockquote&gt;Grabs the Ancestors of a Node:&lt;br /&gt;&lt;blockquote&gt;SELECT parent.*&lt;br /&gt;FROM bills AS node, bills AS parent&lt;br /&gt;WHERE node.lft BETWEEN parent.lft AND parent.rgt&lt;br /&gt;AND node.id = ? AND parent.id &lt;&gt; ?     (NOTE: Both ?'s are the same value)&lt;br /&gt;ORDER BY node.lft;&lt;br /&gt;&lt;/blockquote&gt;Grabs the Descendents of a Node:&lt;br /&gt;&lt;blockquote&gt;SELECT node.*&lt;br /&gt;FROM bills AS node, bills AS parent&lt;br /&gt;WHERE node.lft &gt; parent.lft AND node.rgt &lt; id =" ?"&gt;&lt;br /&gt;&lt;/blockquote&gt;Grab the Parent of a Node:&lt;br /&gt;&lt;blockquote&gt;SELECT parent.*&lt;br /&gt;FROM bills AS node, bills AS parent&lt;br /&gt;WHERE node.lft BETWEEN parent.lft AND parent.rgt&lt;br /&gt;AND node.id = ?&lt;br /&gt;ORDER BY parent.lft DESC LIMIT 1,1&lt;/blockquote&gt;Obviously, the '?' is the ID of the node that you're interested in and you can cater the selected columns to your needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-7916442360867796495?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/7916442360867796495/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=7916442360867796495" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/7916442360867796495?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/7916442360867796495?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/E1jKtWeeHWg/queries-for-nested-set-model.html" title="Queries for Nested Set Model" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2009/07/queries-for-nested-set-model.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQNSHs-eip7ImA9WxJUFUU.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-4546812964270189895</id><published>2009-07-14T07:04:00.003-07:00</published><updated>2009-07-14T07:39:59.552-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T07:39:59.552-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><category scheme="http://www.blogger.com/atom/ns#" term="nested set model" /><category scheme="http://www.blogger.com/atom/ns#" term="hierarchical data" /><title>So maybe databases aren't half bad afterall</title><content type="html">So I've been working on a budgeting program for the last few years (none of the available ones had the features that I needed/wanted) and when I first started I put all of the data in XML. It was easy/quick to get it up and running and handled the hierarchical nature of the data very well, but as is the case with XML is was very space heavy and took a while to save, load, and query the information (I later changed the program to just load the XML to mirrored data structures in memory to speed things up, but querying transactions by date or bill assignment still meant that I had to touch every single transaction in memory).&lt;br /&gt;&lt;br /&gt;So I eventually made the switch to &lt;a href="http://sqlite.org/"&gt;SQLite&lt;/a&gt; and since the hierarchy was fixed and I didn't have any trees in my data structures, the weaknesses of hierarchical data in databases weren't a concern. Currently there's only 2 levels in my bills structure (categories and then bills), but a few weeks ago I decided that I wanted to get rid of categories and change the way I did bills to allow infinite depth/sub-bills to my bill organization.&lt;br /&gt;&lt;br /&gt;This then had me wondering if I should go back to a more hierarchical friendly data format. After the compactness and speed of SQLite, I didn't want to go back to XML and a little searching turned up &lt;a href="http://code.google.com/p/protobuf/"&gt;Protocol Buffers&lt;/a&gt;. They are actually really cool and I was amazed by them that I was about to redo my whole program to make use of them (I'm a sucker for strict typing), but then I started thinking about the whole querying thing again. Right now, I can query in so many ways in a very easy and efficient manner that it's almost impossible to match with my own data structures. I thought about reorganizing the data so that querying was more efficient, but then I was just recreating a database by hand in my code and I just couldn't justify all of the programming time that that would require just to get some potential speed improvements (and then all of the data would have to be resident in memory all the time (or I'd have to write my own read/write/cache system) and the cons definitely started outweighing the potential pros).&lt;br /&gt;&lt;br /&gt;So I was then left with getting the hierarchical data working in SQLite. The standard parent-child tree structure was the simple approach that popped into my head first and apparently some &lt;a href="http://www.adp-gmbh.ch/ora/sql/connect_by.html"&gt;new SQL&lt;/a&gt; to handle such a thing in some DBs (but not SQLite). I figured that someone smarter than myself must have already solved this problem, and some digging revealed that I was right about that. I stumbled on the &lt;a href="http://www.developersdex.com/gurus/articles/112.asp?Page=1"&gt;nested set&lt;/a&gt; &lt;a href="http://dev.mysql.com/tech-resources/articles/hierarchical-data.html"&gt;model&lt;/a&gt;, and it's one of those beautifully elegant solutions that I love so much about programming (but that's another post). It's pretty cool, because you actually encode all of the links in a separate table (or you can do the same table if you like) and you do it by doing a pre-order tree traversal and numbering as you go. So insert, moving, and deleting nodes is just a matter of updating the numbering in linkage. The one disadvantage is that when you add/delete/change a node in the tree, you are going to have to touch half the entries in the table on average, but in my program adding/moving bills is infrequent and there are FAR fewer bills than transactions, so paying that small hit in performance on the bills is more than worth it for the big gains with transactions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-4546812964270189895?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/4546812964270189895/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=4546812964270189895" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/4546812964270189895?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/4546812964270189895?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/__B6plmkNEQ/so-maybe-databases-arent-half-bad.html" title="So maybe databases aren't half bad afterall" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2009/07/so-maybe-databases-arent-half-bad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcMRnY_eyp7ImA9WxJTF0w.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-25511379802000258</id><published>2009-04-25T20:11:00.003-07:00</published><updated>2009-04-25T20:21:27.843-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-25T20:21:27.843-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Disabling Trackpad while typing in Ubuntu 9.04 (Jaunty)</title><content type="html">So I just upgraded my laptop to the official release of Ubuntu 9.04 and I was annoyed that the trackpad wasn't disabled automatically when typing (why this isn't just done in the hardware I don't know), but after piecing together some posts from &lt;a href="http://ubuntuforums.org/showthread.php?t=271052"&gt;these instructions&lt;/a&gt;, I was able to get it working. Here's what I did:&lt;br /&gt;&lt;br /&gt;1) Enabled SHMConfig by following &lt;a href="https://help.ubuntu.com/community/SynapticsTouchpad#shmconfig"&gt;these instructions&lt;/a&gt;, which is to basically create the file /etc/hal/fdi/policy/shmconfig.fdi and add this to it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;#60deviceinfo version="0.2"&amp;#62&lt;br /&gt;&amp;#60device&amp;#62&lt;br /&gt;  &amp;#60match key="input.x11_driver" string="synaptics"&amp;#62&lt;br /&gt;    &amp;#60merge key="input.x11_options.SHMConfig" type="string"&amp;#62True&amp;#60/merge&amp;#62&lt;br /&gt;  &amp;#60/match&amp;#62&lt;br /&gt;&amp;#60/device&amp;#62&lt;br /&gt;&amp;#60/deviceinfo&amp;#62&lt;/pre&gt;&lt;br /&gt;2) Add the following command "syndaemon -i 1 -d -t -S" to System-&gt;Preferences-&gt;Startup Applications&lt;br /&gt;&lt;br /&gt;3) Restart&lt;br /&gt;&lt;br /&gt;It worked like a charm and now I don't have to worry about the cursor jumping around like crazy when I'm typing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-25511379802000258?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/25511379802000258/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=25511379802000258" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/25511379802000258?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/25511379802000258?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/e181kwLcBlM/disabling-trackpad-while-typing-in.html" title="Disabling Trackpad while typing in Ubuntu 9.04 (Jaunty)" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2009/04/disabling-trackpad-while-typing-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCSHw4cCp7ImA9WxRVFUo.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-3942701512897235122</id><published>2008-11-12T21:00:00.005-07:00</published><updated>2008-11-13T04:41:09.238-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-13T04:41:09.238-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DVCS" /><category scheme="http://www.blogger.com/atom/ns#" term="CVS" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="SVN" /><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>I'm converted</title><content type="html">For quite a while now, I have been hearing a lot about how cool distributed version control systems are and then a few months ago, Brad Fish &lt;a href="http://www.bradwich.com/2008/06/06/adventures-source-control/"&gt;posted about git&lt;/a&gt; and gave it a glowing endorsement, so I finally got around to doing a little detailed research and trying one out for myself.&lt;br /&gt;&lt;br /&gt;While I &lt;a href="http://www.bradwich.com/2008/06/06/adventures-source-control/#comments"&gt;can't stand Linus personality&lt;/a&gt;, I have to admit that the DVCS idea is just plain AMAZING. I personally like &lt;a href="http://www.selenic.com/mercurial/"&gt;Mercurial&lt;/a&gt; over &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt; since it uses the same interface as CVS/SVN whenever possible and it seems to be a little simpler than git without giving up any of the advantages (I'm still new to both of them, so that may not necessarily be true). One of Linus' big knocks on Mercurial was that it couldn't scale and that it couldn't perform as well as git, but in the benchmarks/timing studies that I &lt;a href="http://laserjock.wordpress.com/2008/05/09/bzr-git-and-hg-performance-on-the-linux-tree/"&gt;could&lt;/a&gt; &lt;a href="http://git.or.cz/gitwiki/GitBenchmarks"&gt;find &lt;/a&gt;they seemed to be in the same ballpark, so maybe that claim was earlier in the development cycle or something.&lt;br /&gt;&lt;br /&gt;But at any rate, I think that the ease of merging branches is a HUGE gain and I have already cleaned up some of the ugly brances and odd copies that I had hanging around on my computer. I'm definitely converted to the DVCS revolution.&lt;br /&gt;&lt;br /&gt;I would also just like to add that to get WinMerge to work with TortoiseHg 0.5 I added the following lines to my mercurial.ini file:&lt;blockquote&gt;[extensions]&lt;br /&gt;hgext.extdiff=&lt;br /&gt;&lt;br /&gt;[extdiff]&lt;br /&gt;cmd.vdiff = C:\Program Files\WinMerge\WinMergeU.exe&lt;/blockquote&gt;They have a wiki page describing &lt;a href="http://www.selenic.com/mercurial/wiki/index.cgi/MergeToolConfiguration"&gt;how to setup merge tools&lt;/a&gt;, but I couldn't get it to work for some reason, but the above worked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-3942701512897235122?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/3942701512897235122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=3942701512897235122" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3942701512897235122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3942701512897235122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/s2-I0JRjX8U/im-converted.html" title="I'm converted" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2008/11/im-converted.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcBQHczeCp7ImA9WxRVEE0.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-8438563186310070033</id><published>2008-11-06T13:38:00.002-07:00</published><updated>2008-11-06T13:40:51.980-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-06T13:40:51.980-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><title>Foreign Keys in SQLite</title><content type="html">As a followup to my &lt;a href="http://codebydave.blogspot.com/2007/10/integrity-is-virtue.html"&gt;previous post on foreign keys in SQLite&lt;/a&gt;, I just wanted to point out that &lt;a href="http://www.sqlite.org/cvstrac/fileview?f=sqlite/tool/genfkey.c"&gt;code to generate&lt;/a&gt; the &lt;a href="http://www.sqlite.org/cvstrac/fileview?f=sqlite/tool/genfkey.README"&gt;triggers to emulate foreign keys&lt;/a&gt; has been official added to SQLite in &lt;a href="http://www.sqlite.org/releaselog/3_6_4.html"&gt;version 3.6.4&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-8438563186310070033?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/8438563186310070033/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=8438563186310070033" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/8438563186310070033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/8438563186310070033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/AUvTL8AB_MA/foreign-keys-in-sqlite.html" title="Foreign Keys in SQLite" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2008/11/foreign-keys-in-sqlite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAHSXs_eSp7ImA9WxRVEE0.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-5940697930760531005</id><published>2008-11-06T13:33:00.003-07:00</published><updated>2008-11-06T13:35:38.541-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-06T13:35:38.541-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><title>sqlite-manager</title><content type="html">Maybe everyone already know about this, but I just stumbled across &lt;a href="http://code.google.com/p/sqlite-manager/"&gt;sqlite-manager&lt;/a&gt;. It's a Firefox add-on that can also be run with XULRunner which allows you admin an SQL database using a GUI. It's still somewhat early on in development, but it's functional and VERY useful. So go check it out for yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-5940697930760531005?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/5940697930760531005/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=5940697930760531005" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/5940697930760531005?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/5940697930760531005?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/NpLzVwNaxD0/sqlite-manager.html" title="sqlite-manager" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2008/11/sqlite-manager.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08FQ3kzfCp7ImA9WxdSEE4.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-1169896434401583073</id><published>2008-05-17T08:48:00.002-07:00</published><updated>2008-05-17T08:56:52.784-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-17T08:56:52.784-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="PopFly" /><title>Stupid Facebook</title><content type="html">I had been wondering why there wasn't a "Facebook Reader" application that allowed me to browse through all of the actions of my friends on Facebook like I do with items in RSS feeds in &lt;a href="http://reader.google.com"&gt;Google Reader&lt;/a&gt;, so after waking up and feeding &lt;a href="http://davidjohansen.blogspot.com/2008/04/miracle-of-life-and-modern-medicine.html"&gt;Charlie&lt;/a&gt; this morning, I decided that I would start playing around with making my own. I started reading the &lt;a href="http://wiki.developers.facebook.com/index.php/API"&gt;Facebook API&lt;/a&gt; and playing with &lt;a href="http://www.popfly.ms/"&gt;PopFly&lt;/a&gt; (which is actually kind of cool), but I couldn't figure out how to get access to the mini-feed data. I did some more searching and I finally realized that Facebook doesn't make the mini-feed data available, and I know understand why so many people complain about Facebooks death grip on your data. I joined the &lt;a href="http://www.facebook.com/group.php?gid=21849432496"&gt;group that's trying to petition for this to change&lt;/a&gt;, but there's just over 40 members, so I'm not keeping my fingers crossed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-1169896434401583073?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/1169896434401583073/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=1169896434401583073" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/1169896434401583073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/1169896434401583073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/lG5pn1LBYWw/stupid-facebook.html" title="Stupid Facebook" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2008/05/stupid-facebook.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUENSX09fSp7ImA9WxZbGEQ.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-3529727306258028362</id><published>2008-04-22T12:46:00.001-07:00</published><updated>2008-04-22T12:48:18.365-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-22T12:48:18.365-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>My Old Code</title><content type="html">So I'm out sick today and I decided to put all of my old code up on a Google Code Project. It's probably not that exciting, but if anyone is ever interested they can &lt;a href="http://code.google.com/p/codebydave/"&gt;check it out here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-3529727306258028362?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/3529727306258028362/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=3529727306258028362" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3529727306258028362?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3529727306258028362?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/ETmdTqn9xxU/my-old-code.html" title="My Old Code" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2008/04/my-old-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEAQH44fyp7ImA9WxZQFUs.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-3043954675018508763</id><published>2008-02-20T20:28:00.003-07:00</published><updated>2008-02-20T21:20:41.037-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-20T21:20:41.037-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thoughts" /><title>A question of ethics?</title><content type="html">One thing that I have always struggled with regarding my current job is being part of the "war machine". Obviously, I know that war is a horrible and deeply saddening affair, but I also realize that it's a necessary evil and that if we don't maintain our military might that someone else will. So it's kind of a bittersweet type of thing, and I also take comfort in the fact that I work on a &lt;a href="http://en.wikipedia.org/wiki/SM-3"&gt;defense missile&lt;/a&gt; (so in a certain aspect you can say I'm stopping war, or at least part of it).&lt;br /&gt;&lt;br /&gt;But on to the real purpose of this post. I just saw an &lt;a href="http://it.slashdot.org/article.pl?sid=08/02/20/1449244"&gt;article on Slashdot&lt;/a&gt;, and it really struck a cord with me. The article basically talks about the dangers of being careless and how all engineering/programming should be deliberate, but a lot of the comments just point the finger at management/capitalism/other "invisible hands". I agree with the principle and have even experienced it myself, but I believe that trying to point the finger at someone else without taking some personal responsibility is just plain dumb. There's always pressure to get things done in any job, but I believe that the biggest responsibility of any job (not just engineering/programming) is to make the judgment about how crucial any potential problem is and take the appropriate action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-3043954675018508763?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/3043954675018508763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=3043954675018508763" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3043954675018508763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3043954675018508763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/FLRWhENezu0/question-of-ethics.html" title="A question of ethics?" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2008/02/question-of-ethics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENSHs4fSp7ImA9WB9UEEk.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-7249733470974390813</id><published>2007-12-07T09:14:00.001-07:00</published><updated>2007-12-07T09:41:39.535-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-07T09:41:39.535-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="language" /><title>The Myth of Dynamic Typing?</title><content type="html">&lt;a href="http://codebydave.blogspot.com/2007/12/super-global-variables.html"&gt;My last post&lt;/a&gt; has also got me thinking about a different idea (dynamic programming paradigms), and I have begun to think about this topic as programming languages versus scripting languages. I personally prefer programming languages, but I can't deny the power of scripting languages. I've often heard that the power of scripting languages comes from dynamic typing and the ability to give any variable of any type to a function and let it do it's thing. But I think this is flawed logic, because at some point the type becomes fixed and the appropriate algorithm must be used to handle this data. So dynamic typing is just a convenience for the programmer that abstracts away a piece of the truth. And now you have to ask yourself, "Why couldn't this same mechanism be done with templates, functional programming, and other mechanisms in a programming language?" The correct answer is that there's no reason it couldn't be.&lt;br /&gt;&lt;br /&gt;I think that the problem is not that the programming languages are compiled, statically typed, or any of the other non-sense that you always hear, but the problem is simply what we expect from them. We expect a language like C/C++ to be low-level, operating system agnostic, and portable without any of the "mess" of GUIs, rendering capabilities, etc. But we expect a language like MATLAB/Python to be high-level, operating system agnostic, and portable with all of the "power" of GUIs, rendering capabilities, etc. Each of these paradigms definitely has it's own pros/cons, but I just think that the divide that exists between the two doesn't necessarily have to be as big as it is right now.&lt;br /&gt;&lt;br /&gt;This also brings up the real topic that I am actually interested in, "Why can't databases (and their results) be statically-typed?" Why can't I do something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;struct Transaction&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   unsigned int id;    //Primary Key&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Date date;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   DecimalValue amount;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   std::string description;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;struct BudgetCategory&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   unsigned int id;    //Primary Key&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   std::string name;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   DecimalValue budgeted_spending;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   PaymentType frequency;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;struct Transaction_BudgetCategory&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   unsigned int transaction_id;    //Foreign Key(Transaction.id)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   unsigned int budgetcategory_id;    //Foreign Key(BudgetCategory.id)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;auto_type category_sums =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;SELECT BudgetCategory.name, sum(Transaction.amount)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;FROM Transaction_BudgetCategory, Transaction&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;WHERE Transaction_BudgetCategory.id == Transaction.id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;GROUP BY Transaction.id;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Obviously I'm talking about a whole new language/paradigm, but why couldn't you do something like that? The compiler could figure out the appropriate types and create the appropriate structure for you. I know that this is kind of what &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx"&gt;LINQ&lt;/a&gt; is trying to do, but my understanding is that with LINQ you have to create your own structures to store the results in, and why can't the compiler just do it for you?&lt;br /&gt;&lt;br /&gt;Maybe I'm just dreaming or not seeing the drawbacks to something like this, but I still think it'd be cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-7249733470974390813?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/7249733470974390813/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=7249733470974390813" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/7249733470974390813?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/7249733470974390813?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/zRdP6e0dAbQ/myth-of-dynamic-typing.html" title="The Myth of Dynamic Typing?" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/12/myth-of-dynamic-typing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQHg_fyp7ImA9WB9UEEk.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-469087540665195348</id><published>2007-12-07T08:37:00.000-07:00</published><updated>2007-12-07T09:14:41.647-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-07T09:14:41.647-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Super Global Variables</title><content type="html">I've been working on a program to manage my budget for the last few months and when I first started out I had it store all of the data in XML files which were loaded into well organized classes. It was pretty simple to get up and running and was working really well until I started to want to "link" some of the values together (transactions to budget categories) and do some statistical analysis type of things. I definitely could have added support for storing these links and doing these types of "queries" in my classes, but it just seemed like reinventing the wheel because databases could do exactly what I wanted and more.&lt;br /&gt;&lt;br /&gt;So I decided to start playing around with using a database. SQLite was amazingly simple to get up and running, and despite a few complaints (&lt;a href="http://www.sqlite.org/omitted.html"&gt;no foreign key support and limited ALTER TABLE support&lt;/a&gt; which fortunately have solutions (&lt;a href="http://codebydave.blogspot.com/2007/10/integrity-is-virtue.html"&gt;foreign keys through triggers&lt;/a&gt; and &lt;a href="http://www.sqlite.org/faq.html#q11"&gt;work around for removing columns&lt;/a&gt;)) it got the job done with less hassle than I expected. I definitely had to brush up on my SQL since I hadn't written a line of it in years, but for the most part it's a pretty simple language and I was linking and querying the data in no time.&lt;br /&gt;&lt;br /&gt;But this whole thing got me wondering, "this ease of use has to have an explanation and most likely an associated drawback or cost". After thinking about this for a while, I came to the conclusion that databases are basically just "Super Global Variables". They're "global" because they're a nebulous set of data that's accessible from any part of a program, and they're "super"&lt;br /&gt; because you can grab them in various forms/combinations. When I first realized this, I kind of chuckled to myself, because programmers always talk about how global variables (just a super set of static variables) are evil/problematic but they'll use a database without even thinking about it. It just made me realize how sometimes our own abstractions actually hide us from the ugly truth that we'd probably rather ignore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-469087540665195348?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/469087540665195348/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=469087540665195348" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/469087540665195348?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/469087540665195348?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/wF5yhEZDiSg/super-global-variables.html" title="Super Global Variables" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/12/super-global-variables.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AER3kzeCp7ImA9WB9VGEs.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-3207471648464862442</id><published>2007-12-05T08:04:00.000-07:00</published><updated>2007-12-05T08:48:26.780-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-05T08:48:26.780-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><category scheme="http://www.blogger.com/atom/ns#" term="shared_ptr" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Memory Leak Detection with Visual Studio 2008</title><content type="html">&lt;a href="http://www.bradwich.com/"&gt;Brad Fish&lt;/a&gt; told me that Visual Studio 2008 was definitely worth the upgrade (especially on Vista), so I took the plunge. For a C++ programmer, I don't think it was as cool of a jump as 2003 to 2005 and not even close to the HUGE jump from 6 to 2003 (I skipped 2002), but it's still been a very nice upgrade.&lt;br /&gt;&lt;br /&gt;But anyway, I have been working on making my own little SQLite3 C++ wrapper, because I just didn't like the ones that I could find out there. While doing that I also decided that it would be easiest to use a smart pointer to manage all of the pointers to SQLite stuff. I had played around with the &lt;a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm"&gt;Boost shared_ptr&lt;/a&gt;, but once again I just didn't like some of the syntax (mostly the custom deleter being in the constructor rather than a template parameter), so I just dusted off some old shared pointer code of my own and added a custom deleter to it.&lt;br /&gt;&lt;br /&gt;It all seemed to be working just fine, but I just wanted to make sure that I was cleaning everything up properly and then I remembered that the current versions of Visual Studio don't dump out the memory leaks like Visual Studio 6 used to do by default. So I started some Googling and found &lt;a href="http://msdn2.microsoft.com/en-us/library/x98tx3cf%28VS.90%29.aspx"&gt;this page&lt;/a&gt;. It says that it doesn't work with Express Edition, but it must be a typo or something, because it works (just not quite as described). Basically, here's what I was able to figure out from playing around with it. All you need to do is:&lt;br /&gt;1) Add the header crtdbg.h&lt;br /&gt;2) Call _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );&lt;br /&gt;&lt;br /&gt;You can find out more about _CrtSetDbgFlag() &lt;a href="http://msdn2.microsoft.com/en-us/library/5at7yxcs%28VS.90%29.aspx"&gt;here&lt;/a&gt;, but calling it this way this will turn on the printing out of the memory leaks when your program exits (only when _DEBUG is defined).&lt;br /&gt;&lt;br /&gt;After creating some artifical memory leaks, I noticed that it didn't dump the line that the memory was allocated on like it used to. So I did a little scavenging through the crtdbg.h header file and I found a conditional compile that would enable the printing of the allocation line.  I added the two conditions to my code:&lt;br /&gt;#define _CRTDBG_MAP_ALLOC&lt;br /&gt;#define _CRTDBG_MAP_ALLOC_NEW&lt;br /&gt;But unfortunately, this is just a mechanism to allow old code to still compile, because now it just prints the line in the crtdbg.h file. This is obviously useless (something that's I just noticed is also pointed out in the comments of the crtdbg.h file), so I guess this is the first thing I've found in the newer versions of Visual Studio that just aren't up to par with Visual Studio 6 (I know I didn't think I'd ever say/hear/read that either).&lt;br /&gt;&lt;br /&gt;I guess that I should just be happy that I was able to get my memory leak dump again, but I'm still wondering why that's not on by default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-3207471648464862442?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/3207471648464862442/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=3207471648464862442" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3207471648464862442?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3207471648464862442?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/mGTEnFVEoaE/memory-leak-detection-with-visual.html" title="Memory Leak Detection with Visual Studio 2008" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/12/memory-leak-detection-with-visual.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cARn45eSp7ImA9WB9SGUg.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-3118727393756956924</id><published>2007-10-09T12:35:00.000-07:00</published><updated>2007-10-09T12:44:07.021-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-09T12:44:07.021-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="integrity" /><title>Integrity is a Virtue</title><content type="html">I've finally accepted that I'm kind of obsessive/anal when it comes to programming and that's probably why I'm so fascinated by C++ instead of all of the other crazy languages out there. But I've started playing around with SQLite and it really bothered me that it didn't enforce foreign key constraints. So I did some digging and found &lt;a href="http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers"&gt;this&lt;/a&gt;. It's a description of how you can use triggers to enforce foreign keys. It's actually a pretty slick idea and allows people that want/need them to turn them on without the unnecessary overhead for those that don't care (but it would still be nice if this was just added as a code thing that could be taken out with conditional compilation). But the little online tool is pretty handy and I'd definitely recommend it to anyone that's using SQLite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-3118727393756956924?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/3118727393756956924/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=3118727393756956924" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3118727393756956924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3118727393756956924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/8uTlF6Zxr5c/integrity-is-virtue.html" title="Integrity is a Virtue" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/10/integrity-is-virtue.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QHQHw5fip7ImA9WB9SGE0.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-3379595603123437752</id><published>2007-10-07T16:48:00.000-07:00</published><updated>2007-10-07T16:55:31.226-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-07T16:55:31.226-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="static is evil" /><title>static Initialization Order Fiasco</title><content type="html">So I haven't posted on here in quite some time, but I wanted to post about something I learned this week. It's called the &lt;a href="http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12"&gt;"static initialization order fiasco"&lt;/a&gt; and it's pretty crazy. First off I always remember that "static is evil" and try to avoid it, but I was helping someone else try and debug a problem and they had used a bunch of C++ fanciness (returning references to static variables inside a static member function) to "hide" the use of global variables and it was coming back to bite them. At first I thought that it must have been some memory problem that they were incorrectly using/overwriting memory, but it ended up being this. It's pretty crazy what types of messes that people can get themselves into when they're trying to be "fancy" but real don't know what they're doing.&lt;br /&gt;&lt;br /&gt;Also, I love that &lt;a href="http://www.parashift.com/c++-faq-lite/"&gt;"lite" FAQ&lt;/a&gt; by the way. It's always got GREAT information and it's usually very well written and very clear. Anytime I have a question about C++, syntax, or odd problems that's the first place I look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-3379595603123437752?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/3379595603123437752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=3379595603123437752" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3379595603123437752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/3379595603123437752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/kxar_n5L8ZI/static-initialization-order-fiasco.html" title="static Initialization Order Fiasco" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/10/static-initialization-order-fiasco.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cAQn04fSp7ImA9WB5REks.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-516294582549669763</id><published>2007-06-19T07:55:00.000-07:00</published><updated>2007-06-19T07:57:23.335-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-19T07:57:23.335-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger util" /><title>Blogger Util</title><content type="html">So I haven't had time to put all of my old code up yet, but I'll get around to it soon. My current project is that I'm learning Python, so I can make a little Blogger Util that will automatically get all of the feeds for you to import into an RSS Reader. I'll add some more info as I get it up and running.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-516294582549669763?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/516294582549669763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=516294582549669763" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/516294582549669763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/516294582549669763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/J3EQieYV8DI/blogger-util.html" title="Blogger Util" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/06/blogger-util.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cMRH89cSp7ImA9WB5REks.&quot;"><id>tag:blogger.com,1999:blog-6322478114067402666.post-8781272127354626997</id><published>2007-05-08T17:24:00.000-07:00</published><updated>2007-06-19T07:58:05.169-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-19T07:58:05.169-07:00</app:edited><title>The Plan is in Effect</title><content type="html">So this is the blog that will be about code and projects that I'm working on. I figured that it was better to have one for personal posts and one for "work" so I divided it up and this is the result.&lt;br /&gt;And just in case you were wondering, here's the link to &lt;a href="http://davidjohansen.blogspot.com/"&gt;my other blog&lt;/a&gt; and &lt;a href="http://www.et.byu.edu/%7Edj29/"&gt;my website&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6322478114067402666-8781272127354626997?l=codebydave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://codebydave.blogspot.com/feeds/8781272127354626997/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6322478114067402666&amp;postID=8781272127354626997" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/8781272127354626997?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6322478114067402666/posts/default/8781272127354626997?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/codebydave/~3/zfDmcuEHaVw/plan-in-effect.html" title="The Plan is in Effect" /><author><name>Dave Johansen</name><uri>https://profiles.google.com/102434142169851250751</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-eiWH7XM_dzE/AAAAAAAAAAI/AAAAAAAAAAA/1axlgkUqUNU/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://codebydave.blogspot.com/2007/05/plan-in-effect.html</feedburner:origLink></entry></feed>

