<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2392353158651136229</id><updated>2011-09-13T19:07:22.737-07:00</updated><category term='NHibernate'/><category term='asp.net'/><category term='recipe'/><category term='exception handling'/><category term='user interface'/><category term='Windows Command'/><title type='text'>Abstractions-R-Us</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-5308624673944645119</id><published>2011-09-13T18:18:00.000-07:00</published><updated>2011-09-13T19:07:22.766-07:00</updated><title type='text'>Just Use a Saw</title><content type='html'>I discovered something profoundly usesless today: When you combine a square wave at amplitude 2x, pitch y with a sawtooth at amplitude x, pitch 2y, the result is a sawtooth at amplitude 2x, pitch y, when the two waves are in phase with each other.&lt;br /&gt;&lt;br /&gt;square(2a,p) + saw(a,2p) = saw(2a,p)&lt;br /&gt;&lt;br /&gt;I can prove it using the harmonic series, but first I should warn that I am not a good mathematician, and there may be errors here, and the above proposition may be false.  Please let me know if you see any errors; children will starve if any flaws go unnoticed.&lt;br /&gt;&lt;br /&gt;A square wave (http://en.wikipedia.org/wiki/Square_wave) contains every odd-integer harmonic n at amplitude a/n where a is the amplitude of the fundamental (the first harmonic).  (Please pardon the infinitely recursive definition... the fundamental is at volume a.)&lt;br /&gt;&lt;br /&gt;A sawtooth wave (http://en.wikipedia.org/wiki/Sawtooth_wave) contains every integer harmonic n at amplitude a/n where a is the amplitude of the fundamental.&lt;br /&gt;&lt;br /&gt;Now, to sum the amplitudes of the harmonics of the 2 waves, we can express one wave's harmonics in terms of the other wave.  Since the square wave in this proposition is lower in frequency and double the amplitude of the sawtooth, I will call its frequency the fundamental (first harmonic) for this example.  (After all, it _is_ the fundamental if both are played together anyway, but that's irrelevant to this proof.)&lt;br /&gt;&lt;br /&gt;Since the frequency of the sawtooth wave is double that of the square wave, its nth harmonic is the (2n)th harmonic of the square wave.  Therefore, it will provide all the even-numbered harmonics.  Since its amplitude is half that of the square wave, its fundamental (the 2nd harmonic of the square wave) will sound at 1/2 the amplitude of the square wave, its 2nd harmonic (the 4th harmonic of the quare wave) will sound at 1/2 _that_ amplitude, its 3rd harmonic (the 6th harmonic of the square wave) will sound at 1/3 its amplitude (1/6 that of the square wave), etc.&lt;br /&gt;&lt;br /&gt;So, the square wave provides all odd-numbered harmonics n at amplitude 1/n, and the sawtooth provides all even-numbered harmonics _of our resulting wave_ at 1/n.  Therefore, by combining a square wave and a sawtooth at twice the frequency and half the amplitude, we have all integer harmonics at volume 1/n, which is a sawtooth at the pitch and amplitude of the contributing square wave.&lt;br /&gt;&lt;br /&gt;I guess there is one application to this: On a synthesizer, using a sawtooth oscillator combined with a square oscillator one octave lower at the same volume is useless.  One octave lower because that's half the frequency, and the same volume because that's twice the ampltidue and frequency times amplitdue equals volume.  So the moral of the story: Just use a saw!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-5308624673944645119?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/5308624673944645119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2011/09/just-use-saw-dummy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/5308624673944645119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/5308624673944645119'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2011/09/just-use-saw-dummy.html' title='Just Use a Saw'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-1627466773381889475</id><published>2010-11-12T16:02:00.000-08:00</published><updated>2010-11-12T16:05:19.115-08:00</updated><title type='text'>Small World Technologies</title><content type='html'>I now have a side job working at &lt;a href="http://smallworldtech.net"&gt;Small World Technologies&lt;/a&gt; to make mobile apps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-1627466773381889475?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/1627466773381889475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/11/small-world-technologies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1627466773381889475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1627466773381889475'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/11/small-world-technologies.html' title='Small World Technologies'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-2588918459283285019</id><published>2010-08-05T07:13:00.001-07:00</published><updated>2010-08-05T07:14:37.526-07:00</updated><title type='text'></title><content type='html'>Just got an email from Amazon that says "Save up to 50% on Summer and Back-to-School Toys".  Somehow, I think the category was pieced together by a bot, since I don't know what a back-to-school toy is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-2588918459283285019?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/2588918459283285019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/08/just-got-email-from-amazon-that-says.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/2588918459283285019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/2588918459283285019'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/08/just-got-email-from-amazon-that-says.html' title=''/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-7580273836606858131</id><published>2010-07-14T09:03:00.000-07:00</published><updated>2010-07-14T09:13:01.731-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Command'/><title type='text'>Windows Command Prompt Keeps Up with One Current Directory Per Drive</title><content type='html'>Or so it seems.  This is copied from a console window on a machine running Windows Server 2003:&lt;br /&gt;&lt;blockquote&gt;C:\Documents and Settings\jyoung&gt;cd E:\InetPub\web sites&lt;br /&gt;&lt;br /&gt;C:\Documents and Settings\jyoung&gt;cd "E:\InetPub\web sites"&lt;br /&gt;&lt;br /&gt;C:\Documents and Settings\jyoung&gt;cd e:&lt;br /&gt;E:\InetPub\web sites&lt;br /&gt;&lt;br /&gt;C:\Documents and Settings\jyoung&gt;e:&lt;br /&gt;&lt;br /&gt;E:\InetPub\web sites&gt;&lt;br /&gt;&lt;/blockquote&gt;Very strange.  It seems that the command prompt keeps up with the “current directory” on a per-drive basis, so that when you cd to some drive that you’re not on, it changes the “current” directory for that drive rather than _the_ current directory.  Then when you change drives, it remembers what drive you changed it to previously.  I did not know that.&lt;br /&gt;&lt;br /&gt;Oddly, using the &lt;b&gt;/d&lt;/b&gt; flag is required to change directories across drives [&lt;a href="http://www.adp-gmbh.ch/win/cmd/cd.html"&gt;reference&lt;/a&gt;].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-7580273836606858131?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/7580273836606858131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/07/windows-command-prompt-keeps-up-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/7580273836606858131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/7580273836606858131'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/07/windows-command-prompt-keeps-up-with.html' title='Windows Command Prompt Keeps Up with One Current Directory Per Drive'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-8313711610664688189</id><published>2010-06-25T08:11:00.000-07:00</published><updated>2010-07-08T13:34:29.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><title type='text'>Do your work, or throw an exception - example</title><content type='html'>The &lt;a href="http://abstractions-r-us.blogspot.com/2010/05/do-your-work-or-throw-exception.html"&gt;last post&lt;/a&gt; gave an illustration of a employee telling his manager if he cannot do his work as usual instead of requiring his manager to ask him if he will start doing what is expected of him every time she asks him to.&lt;br /&gt;&lt;br /&gt;Below is a &lt;a href="http://stackoverflow.com/questions/2737328/why-should-i-not-wrap-every-block-in-try-catch/3111492#3111492"&gt;code example of this idea that I posted on StackOverflow&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;class GoodEmployee {&lt;br /&gt;    void DoWork() {&lt;br /&gt;        if (CarIsInTheShop)&lt;br /&gt;            throw new CantDoWorkException();&lt;br /&gt;        else&lt;br /&gt;            _DoWork();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class BadEmployee {&lt;br /&gt;    bool DoWork() {&lt;br /&gt;        if (CarIsInTheShop)&lt;br /&gt;            return false;&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            _DoWork();&lt;br /&gt;            return true;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Imagine using each of these.  Using GoodEmployee means that client code can operate as normal.  Wherever appropriate, _if_ appropriate, a try/catch _may_ be used to properly handle the exception, if that is even possible.  The most appropriate try/catch may be in place already in a form something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;// main loop:&lt;br /&gt;while(!timeToQuit) {&lt;br /&gt; try {&lt;br /&gt;  REPL(); // read eval print loop, for example&lt;br /&gt; }&lt;br /&gt; catch (TransientException e) {&lt;br /&gt;  TellUserHeCantDoThatRightNow(e);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Meanwhile, client code of GoodEmployee may look like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;myGoodEmployee.DoWork();&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Contrast this with proper usage of BadEmployee:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;if (!myBadEmployee.DoWork) {&lt;br /&gt; return false; &lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;return true;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Not _so_ bad.  But what if we call DoWork in lots of places?  What if there are not 1 but many different methods like DoWork that have to be called?  Worst of all, what if we want to have N layers of indirection that must exit when the employee cannot do his work?  What if we apply this same pattern (return error codes instead of throwing an exception) to those methods?  Then we have something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;A() {&lt;br /&gt; if (!B())&lt;br /&gt;  return false;&lt;br /&gt; // do some other work;&lt;br /&gt; return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;B() {&lt;br /&gt; if (!C())&lt;br /&gt;  return false;&lt;br /&gt; // do some other work;&lt;br /&gt; return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;C() {&lt;br /&gt; if (!myEmployee.DoWork1())&lt;br /&gt;  return false;&lt;br /&gt; if (!myEmployee.DoWork2())&lt;br /&gt;  return false;&lt;br /&gt; if (!myEmployee.DoWork3())&lt;br /&gt;  return false;&lt;br /&gt; // do some other stuff&lt;br /&gt; return true;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;YUCK!&lt;br /&gt;&lt;br /&gt;I have worked on an application like this.  Making any minor little changes to it is an absolute pain because it employs the above pattern throughout.  Contrast that with otherwise comparable apps that throws exceptions and allows exceptions to be thrown--the latter group of apps not only have less code, cleaner code, and fewer bugs, they also have _more robust_ exception handling.&lt;br /&gt;&lt;br /&gt;I hope these clearly examples show how exception-phobia and speculative catch blocks are destructive and literally multiply the amount of code you have to maintain, as well as hide and even introduce bugs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-8313711610664688189?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/8313711610664688189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/06/do-your-work-or-throw-exception-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/8313711610664688189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/8313711610664688189'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/06/do-your-work-or-throw-exception-example.html' title='Do your work, or throw an exception - example'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-1233670882553451797</id><published>2010-05-13T12:33:00.000-07:00</published><updated>2010-06-23T08:51:52.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><title type='text'>Do your work, or throw an exception</title><content type='html'>Imagine this: My car breaks down, and I cannot make it to work.  Should I inform my boss that I will not do my work as usual, or wait until she asks me if I will come to work?  Should she ask me every day if I will do my work as usual?&lt;br /&gt;&lt;br /&gt;If there's something wrong with my car, should a light on the dashboard tell me, or should the engineers that designed it require me to check everything to make sure it is in working order every day before I start driving?&lt;br /&gt;&lt;br /&gt;I think you would agree that, when something or someone does not behave as expected, a notification that he, she, or it did not do its job would be nice.  In many cases, we have a right to expect this sort of behavior.&lt;br /&gt;&lt;br /&gt;Likewise, every method you ever write should either do what it says it will do or throw an exception.  E.g., myObj.Save() should either save myObj or should throw an exception.  It should not return a value indicating if it was successful or not, as that would require client code to check for success.&lt;br /&gt;&lt;br /&gt;If there are multiple occasions where you would catch an exception thrown by a method immediately in order to do something with it, then (and only then) you can create a tryDoSomething method, such as myObj.TrySave(), and use it where applicable.  (Of course, catch only exceptions that you know are caused by specific things; let the exception go if it is due to a bug.)  TryDoSomething() methods should be the exception, not the rule.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-1233670882553451797?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/1233670882553451797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/05/do-your-work-or-throw-exception.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1233670882553451797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1233670882553451797'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/05/do-your-work-or-throw-exception.html' title='Do your work, or throw an exception'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-6605897814026569147</id><published>2010-03-12T07:42:00.000-08:00</published><updated>2010-03-12T08:17:06.394-08:00</updated><title type='text'>Dynamic and static typing are not entirely mutually exclusive</title><content type='html'>Most programming languages are classified as being statically typed or dynamically typed.  I think of static and dynamic typing as features (which can be used together in a single language, if desired), and weak typing as lack of either.&lt;br /&gt;&lt;br /&gt;Static typing is a feature where the compiler checks for type mismatch-related errors.&lt;br /&gt;&lt;br /&gt;Dynamic typing is a feature where the compiled program checks types.  The compiler is involved only in generating executable code that does the check at runtime.  In this scenario, trying to call aPig.Quack() compiles, but throws an exception at runtime.&lt;br /&gt;&lt;br /&gt;Weak typing is lack of type checking--e.g., calling aPig.Quack() will run with undefined behavior.&lt;br /&gt;&lt;br /&gt;In this view, polymorphism is a dynamic typing feature that works well with statically-typed languages: The compiler may ensure that all aDuck really is a Duck, but the runtime environment will check to see what kind of Duck aDuck is--Mallard, WoodenDecoy, or something else--to know which implementation of the virtual method Quack() to call.  Hence we have an example of static and dynamic typing working together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-6605897814026569147?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/6605897814026569147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/03/dynamic-and-static-typing-are-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/6605897814026569147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/6605897814026569147'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2010/03/dynamic-and-static-typing-are-not.html' title='Dynamic and static typing are not entirely mutually exclusive'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-5711915920473334356</id><published>2009-10-09T09:01:00.001-07:00</published><updated>2009-10-09T09:01:09.603-07:00</updated><title type='text'>Bass Tip</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;This is in response to Gio Benedetti's bass tuning tip (&lt;a href='http://www.emginc.com/videos/emgtv/7'&gt;http://www.emginc.com/videos/&lt;wbr/&gt;emgtv/7&lt;/a&gt;), where he demonstrates some useful tips for playing chords on bass.  Be careful tuning any string up what it is normally meant to be tuned to, e.g. tuning a B up to a D.  Doing so not only causes more wear on the string, but also is bad for the neck.  One should either:&lt;br/&gt;-use a capo, or&lt;br/&gt;-use a string designed for that tuning (e.g., tun a heavy E string down to a D).&lt;br/&gt;&lt;br/&gt;Tuning lower is generally fine, although some setup work may be necessary to prevent fret buzz and improper intonation.&lt;br/&gt;&lt;br/&gt;One advantage to a standard bass tuning (i.e. in fourths) is that it simplifies improvising and planning one's part.  Retuning generally makes these harder.  &lt;br/&gt;&lt;br/&gt;On the other hand, myriads of guitarists have learned to play a variety of complex or "alternate" tunings for ages.  Though most (amateur) guitarists may memorize from a book how to play each and every song without ever thinking about the notes they are playing or how to create different chords, many others do take the time to understand (from some lower level of abstraction) what they are playing and why it sounds the way it does--they think about the individual notes that make up the chords, and decide how they will play a chord at a given point in a song based on sound and voicing.  So bassists certainly can learn to do the same if they wish, but they will usually be breaking new ground to do so.&lt;br/&gt;&lt;br/&gt;In my opinion, controlling the pitches of droning open strings is the primary advantage of various guitar tunings (excluding open chord tunings), as they contribute wonderful complexity to the chords with little effort from the guitarist.  The drone provides a comfortably familiar baseline while simultaneously adding dissonant, complex intervals to any chords straying from that baseline.  Open strings also have a slightly less muted sound than that of fretted strings.  The disadvantage of complicated guitar tunings (excluding open chord tunings, again) is that figuring out how to play a riff, melody, or chord can be more difficult.&lt;br/&gt;&lt;br/&gt;Using a capo will add some control over the open string tuning (though not total control) without requiring the bassist to re-learn scales and arpeggios (as would alternate tunings).  Hence, I would try a capo before retuning.&lt;/p&gt;in reference to: &lt;a href='http://www.emginc.com/videos/emgtv/7'&gt;Electric Guitar Pickups &amp;amp; Accessories - EMG Pickups | EMGTV&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/104878274029095217194/id/YCiRz0DGBDBG2t4fEMaftQNrn5A'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-5711915920473334356?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/5711915920473334356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/10/bass-tip.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/5711915920473334356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/5711915920473334356'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/10/bass-tip.html' title='Bass Tip'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-2538578632326008249</id><published>2009-09-28T12:55:00.000-07:00</published><updated>2009-09-28T13:34:51.301-07:00</updated><title type='text'>Joel Spolsky Has an Interesting Idea of Duct Tape</title><content type='html'>&lt;a href="http://www.joelonsoftware.com"&gt;Joel&lt;/a&gt;'s &lt;a href="http://www.joelonsoftware.com/items/2009/09/23.html"&gt;recent post&lt;/a&gt; reveals a strange notion of what a "duct tape programmer" is.&lt;br /&gt;&lt;br /&gt;His first description is of someone who uses C++ templates and multiple inheritance to describe has-a or does-a relationships--someone who knows just enough about inheritance to see how type inheritance can save time, but not enough about contracts to foresee the brokenness of this design.  He then goes to a design patterns meeting.  I am glad he is going to a design patterns meeting to learn about object composition, and all that's wrong with this lazy, hacky implement-via-inheritance antipattern.  I say this template-abuser is a duct tape programmer.  Mr. Spolsky calls this kind of programmer an astronaught, and says the duct tape programmer does _not_ hack in this way.&lt;br /&gt;&lt;br /&gt;Next, Mr. Spolsky says, "You see, everybody else is too afraid of looking stupid because they just can’t keep enough facts in their head at once to make multiple inheritance, or templates, or COM, or multithreading, or any of that stuff work. So they sheepishly go along with whatever faddish programming craziness has come down from the architecture astronauts who speak at conferences and write books and articles and are so much smarter than us that they don’t realize that the stuff that they’re promoting is too hard for us."&lt;br /&gt;&lt;br /&gt;Multiple inheritance per se is simple; the complexity is in actually using it.  Templates (in general) are the mainstay of the copy-and-paste abuser--the extremist duct tape programmer--but I think Joel is speaking here of C++ templates.  A practical and effective programmer will make effective and proper use of generics (assuming static typing is also being used).  Therefore, even with all their problems, C++ templates are a necessary part of good C++ programming if you insist on using C++ to begin with.  Who would use COM for anything other than working with legacy code?  Multithreading is a fact of life sometimes, but should not be used for performance alone without sufficient reason.  What "faddish programming craziness" do practical programmers "sheepishly go along with"?  No answer to this question is explicitly given in the original article, but Joel does proceed to tear about ideas that have passed into common usage.&lt;br /&gt;&lt;br /&gt;Finally, the portrays unit tests as an enemy to releasing on time.  First he quotes Zawinsky, saying unit tests "sound great in principle. Given a leisurely development pace, that’s certainly the way to go. But when you’re looking at, ‘We’ve got to go from zero to done in six weeks,’ well, I can’t do that unless I cut something out. And what I’m going to cut out is the stuff that’s not absolutely critical. And unit tests are not critical. If there’s no unit test the customer isn’t going to complain about that."  Then he says "we’ll forgive [duct tape programmers] if they never write a unit test."&lt;br /&gt;&lt;br /&gt;Technically, you can ship without unit tests.  There are 2 alternatives:&lt;br /&gt;1. Don't test.  This way, when you accidentally encounter a bug, it is harder to find the source.  Also, you risk the customer complaining about bugs that are shipped.  Worse yet, you spend all that time to build a piece of crap.  Such a waste of time is both immoral and unfulfilling.&lt;br /&gt;2. Test manually.  The disadvantages here are more time spent testing (not less!) and having a harder time finding bugs.&lt;br /&gt;&lt;br /&gt;Skipping unit tests is like using duct tape.  Using unit tests is _wise_.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-2538578632326008249?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/2538578632326008249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/09/joel-spolsky-has-interesting-idea-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/2538578632326008249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/2538578632326008249'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/09/joel-spolsky-has-interesting-idea-of.html' title='Joel Spolsky Has an Interesting Idea of Duct Tape'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-4059702492980781249</id><published>2009-08-25T13:51:00.001-07:00</published><updated>2009-08-25T14:07:03.801-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Apples on Pasta?</title><content type='html'>Apples have a sweetness similar to that of tomatoes.  "Self," I thought to myself one day, "if I add an apple to this tomato sauce, will it round out / complete the flavor of the tomato?"  So I tried adding an apple to a simple pasta sauce, and replied to myself "Self, this isn't quite right... but you're on to something!"&lt;br /&gt;&lt;br /&gt;After a few iterations, here's what I have come up with: Saute the following to the desired doneness and serve over pasta:&lt;br /&gt;-diced apple.  Golden delicious has worked well so far, but something less sweet might be more desirable.&lt;br /&gt;-some onion.  Red and white work well.  I do recommend one of the more "onion-y", less sweet onions to contrast with the apples.&lt;br /&gt;-some green bell pepper.  Again, contrast with the sweet apples.&lt;br /&gt;-just a little diced tomato.  Remember, apples are the star of this show.&lt;br /&gt;-sea salt, red pepper, and oregeno to taste.&lt;br /&gt;-Optionally, also add red wine vinegar and/or olive oil.&lt;br /&gt;&lt;br /&gt;Apple on pasta is as easy as any other pasta dish, but offers a very different flavor and texture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-4059702492980781249?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/4059702492980781249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/08/apples-on-pasta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/4059702492980781249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/4059702492980781249'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/08/apples-on-pasta.html' title='Apples on Pasta?'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-8507129285257834492</id><published>2009-05-07T09:26:00.000-07:00</published><updated>2009-05-07T09:42:12.019-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>eventId's 1334, 1089, and 1000</title><content type='html'>Today, I encountered a problem where my ASP.NET app would not run on my machine.  I would get "Server Unavailable" in my browser, and eventId's 1334, 1089, and 1000 in the Application Event Log.  The same application ran smoothly on a fellow developer's machine.&lt;br /&gt;&lt;br /&gt;Many Web resources suggest using aspnet_regiis.exe enable ASPNET to access the GAC, but that was not my particular problem.&lt;br /&gt;&lt;br /&gt;Instead, we have a legacy Visual Studio 2005 Web Application Project (not to be confused with a "Web Site") with unusual configuration requirements: It has to run in a virtual directory located at the root of the Web site.  Something tells me this is redundant.&lt;br /&gt;&lt;br /&gt;Anywho, steps to make it work included:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Publish to the desired folder (C:\inetpub\wwwroot for example).&lt;/li&gt;&lt;li&gt;Set both the Web site root and the virtual directory root (in IIS) to that folder.&lt;/li&gt;&lt;li&gt;In VS, on the Web section of the WAP's properties, under Servers, select "Use IIS Web server".&lt;/li&gt;&lt;li&gt;In the project URL, put "http://localhost/MyVirtualDirectory".&lt;/li&gt;&lt;/ol&gt;I hope this helps someone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-8507129285257834492?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/8507129285257834492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/05/eventids-1334-1089-and-1000.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/8507129285257834492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/8507129285257834492'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/05/eventids-1334-1089-and-1000.html' title='eventId&apos;s 1334, 1089, and 1000'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-1949870657266989764</id><published>2009-05-01T16:10:00.000-07:00</published><updated>2009-05-01T17:03:34.552-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>First Project with NHibernate 1: Lessons Learned</title><content type='html'>The ministry where I work recently completed the first revision of our new &lt;a href="http://moneyandmarriage.org/"&gt;Money And Marriage Web site&lt;/a&gt;, which we built using several new methodologies and tools, one of which was NHibernate.  The team put me, the still-green associate developer, in charge of creating a Data Access Layer (DAL) to house the great ORM beast, taming it if you will.  One of the interesting requirements of this DAL was that it should completely protect the app-at-large from all persistence concerns, as well as _not_ expose NHibernate in case we decide to use a different ORM instead.  Therefore, the app-at-large would not know of NHibernate, but the person writing the app-at-large would have to refer to the *.hbm.xml (NHibernate mapping) files to understand what MyUnitOfWork.Get&lt;bo&gt;(id) would do, precisely.&lt;br /&gt;&lt;br /&gt;Because we are still new with NHibe, our code is probably not as useful of a solution as you will find elsewhere; thus I will not misguide the reader with such, but will instead share what we learned:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For any database, no matter how "legacy" it is, an ORM tool is far better than no ORM tool, even if you still find yourself hand-coding some methods to custom-massage Buisness Objects between the BL and the ORM.&lt;/li&gt;&lt;li&gt;For new or (or perfectly kosher old) databases, you can simply use ISession.Get&lt;type&gt;(id), Set(obj), etc. without customizing anything on a per-type basis.  Yes, this simplifies your DAL by an order of magnitude!  That is, if you have n types in your BL, the number of methods in your DAL goes from O(n) to O(1).&lt;/type&gt;&lt;/li&gt;&lt;li&gt;NHibe is rather awkward for working with legacy databases.  Be prepared to massage data yourself (unless you simply know more NHibernate tricks than I do and can handle insane / exotic situations).&lt;/li&gt;&lt;li&gt;Before committing to NHibernate (or any other complex tool for that matter), hold some tech talks / lectures with all techies involved to not only get everyone on board, but also to brief everyone in how to properly use the tool.  There are a few instances in our code base where we did certain things like handling relationships between entities the manual way, using ID's of related entities in our BO's rather than using references to those entities and letting NHibernate work its relationships magic.  Most of these instances were my doing in working with a legacy database.  More knowledge of NHibernate would have helped.&lt;/li&gt;&lt;li&gt;Unless you are an uber-brilliant programmer who can simultaneously keep client code from caring about persistence concerns like transactions while still providing a DAL API allowing client code to express persistence requests at the domain level, you &lt;span style="font-style: italic;"&gt;should&lt;/span&gt; let the app-at-large control transactions.  I see no way around it.&lt;/li&gt;&lt;li&gt;You can let the app-at-large be blissfully ignorant of connections, and maybe even caches, except that it should keep track of what objects are and are not attached (persisted).&lt;/li&gt;&lt;li&gt;Some ORM-related concerns, such as the fact that you cannot attach two different instances representing the same entity to the same session at the same time, will still percalate up to the client code, unless you invent an ingenius scheme to prevent that.&lt;/li&gt;&lt;/ul&gt;&lt;/bo&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-1949870657266989764?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/1949870657266989764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/05/first-project-with-nhibernate-1-lessons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1949870657266989764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1949870657266989764'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/05/first-project-with-nhibernate-1-lessons.html' title='First Project with NHibernate 1: Lessons Learned'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-3430640727660211116</id><published>2009-04-11T11:45:00.000-07:00</published><updated>2009-05-01T17:05:03.806-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><title type='text'>Pictures Are Worth More Than Words</title><content type='html'>When desiring to open a door, if it has a handle, I pull.  If it has a panel, I push.  This is true regardless of any sign that may be on the door that says "Pull" or "Push"--I obey the real-world object before I even read the sign.&lt;br /&gt;&lt;br /&gt;I find it funny that most hole-in-the-wall stores that have a door with a handle and a sign that says "Push" also have 1,000 other signs and posters and other information that I will not see as I walk in.  If there was just one big, obvious sign that said "Push" and no other distractions, I &lt;span style="font-style: italic;"&gt;might&lt;/span&gt; push on the door to walk through.  But I will &lt;span style="font-style: italic;"&gt;always&lt;/span&gt; pull the handle otherwise.  Then one of the store employees comes to open the door for me and says "You have to push on it," and I feel stupid.&lt;br /&gt;&lt;br /&gt;Resulting lessons include:&lt;br /&gt;1. Real-world objects, images, and conventions trump any amount of text warning users of exceptions to rules, unconventional behaviors, and other gotcha's and pitfalls.&lt;br /&gt;2. Every bit of text is a distraction from something, or itself will be overlooked.  Less is more.  Words and phrases &gt; complete sentences.&lt;br /&gt;&lt;br /&gt;Take your car, for instance.  Does your panel read:&lt;br /&gt;&lt;blockquote&gt;You are travelling at approximately 57 miles per hour.  The current engine temperature is approximately 120 degrees Fahrenheit.  Your lights are on.  ....&lt;/blockquote&gt;Obviously, this would cause problems.&lt;br /&gt;&lt;br /&gt;I hope most people know this already.  This post is for those who do not.  Please, for the love of your fellow humans, make extra effort to make things easy to use, removing the need for long text to read through.  Usually, this will save both you and your users time, and keep your users from feeling embarrassed because they don't know how to open a door.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-3430640727660211116?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/3430640727660211116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/04/1-picture-words.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/3430640727660211116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/3430640727660211116'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/04/1-picture-words.html' title='Pictures Are Worth More Than Words'/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-8542703808114896567</id><published>2009-04-11T11:38:00.000-07:00</published><updated>2009-04-18T17:13:48.365-07:00</updated><title type='text'></title><content type='html'>For archival purposes, my former blogs were:&lt;br /&gt;&lt;a aiotarget="false" aiotitle="my personal blog" href="http://apollodude217.xanga.com/"&gt;my personal blog&lt;/a&gt; - deprecated by facebook notes.&lt;br /&gt;&lt;a href="http://not-so-daily-devotionals.xanga.com/"&gt;not-so-daily-devotionals&lt;/a&gt; - replaced by this more general-purpose blog.&lt;br /&gt;&lt;a href="http://discoveringsharepoint.blogspot.com/"&gt;discoveringsharepoint&lt;/a&gt; - my poorly-named SharePoint blog, which I will no longer update because we will be switching from SharePoint to some other product TBD where I work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-8542703808114896567?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/8542703808114896567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/04/for-archival-purposes-my-former-blogs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/8542703808114896567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/8542703808114896567'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/04/for-archival-purposes-my-former-blogs.html' title=''/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2392353158651136229.post-1857999740890742919</id><published>2009-04-08T14:25:00.000-07:00</published><updated>2009-04-18T17:13:48.371-07:00</updated><title type='text'></title><content type='html'>I have created this blog to share information that might be helpful to others.  Likely topics include theology, software development, programming languages, &lt;a href="http://en.wikipedia.org/wiki/User_interface"&gt;user interfaces&lt;/a&gt; (including &lt;a href="http://en.wikipedia.org/wiki/Human-computer_interaction"&gt;HCI&lt;/a&gt;), games (especially video games), and food recipes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Soli_Deo_gloria"&gt;Soli Deo gloria&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2392353158651136229-1857999740890742919?l=abstractions-r-us.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abstractions-r-us.blogspot.com/feeds/1857999740890742919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/04/i-have-created-this-blog-to-share.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1857999740890742919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2392353158651136229/posts/default/1857999740890742919'/><link rel='alternate' type='text/html' href='http://abstractions-r-us.blogspot.com/2009/04/i-have-created-this-blog-to-share.html' title=''/><author><name>Jason</name><uri>http://www.blogger.com/profile/18342054351286601796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
