<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>John Flinchbaugh Blog</title>
        <link>https://www.hjsoft.com/blog/</link>
        <atom:link href="https://www.hjsoft.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
        <description>Technology, Code, Photography, etc</description>
        <language>en-us</language>
        <pubDate>Mon, 30 Mar 2026 09:46:02 -0400</pubDate>
        <lastBuildDate>Mon, 30 Mar 2026 09:46:02 -0400</lastBuildDate>
        <item>
            <title>
                One-Shot and Retreat
            </title>
            <link>
                https://www.hjsoft.com/blog/2026/One-Shot_and_Retreat.html
            </link>
            <pubDate>Mon, 30 Mar 2026 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2026/One-Shot_and_Retreat.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Years ago,
I played a Timeline game
with some coworkers,
and I immediately wanted
to play this game
to sequence other events
in more specific
(or even personal) domains.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Years passed with only a TODO note,
so this year,
I figured
this might be a good candidate
to see what &lt;a href=&quot;https://geminicli.com/&quot;&gt;Gemini CLI&lt;/a&gt;
can mostly do on its own
in &quot;one shot&quot;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I wrote an initial
&lt;a href=&quot;https://github.com/jflinchbaugh/timeline/blob/main/SPEC.md&quot;&gt;spec&lt;/a&gt;,
and I told the agent to read it
and implement the whole thing.
Of course,
it ran off in the wrong direction for the first pass,
so I deleted the resulting code,
expanded the spec with some more detail,
and kicked it off again.
I did this about 7 more times,
and the results kind of worked,
but randomly included and ignored some of my directions.
As usual,
the guesses it took were mostly welcome,
since I just needed to see something,
but didn&amp;#8217;t know what yet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Spending tokens
to generate the whole thing
and throw it away
spent lots of tokens
and time.
Is it really &quot;one shot&quot;
if you need to do it multiple times?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A handful of those candidate
applications
would have been a fine starting point,
so I kept one,
and went into &lt;em&gt;iterative mode&lt;/em&gt;.
From that point,
I asked the agent for small focused changes
like I had  for other apps.
It&amp;#8217;s really good at gathering the context
from the existing project
and implementing those fixes and enhancements.
I (we?) worked much faster and consistently
in small bites.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The agent was able to locate
and build some datasets for me,
but I also scraped and transformed
a dataset from the Computer History Museum.
That was one of my main motivations
to get this project going.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.hjsoft.com/timeline&quot;&gt;My implementation of Timeline&lt;/a&gt;
is fun to explore very specific domains
and to learn.
It&amp;#8217;s like flashcards.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Reverse Proxy in shadow-cljs
            </title>
            <link>
                https://www.hjsoft.com/blog/2026/Reverse_Proxy_in_shadow-cljs.html
            </link>
            <pubDate>Tue, 3 Mar 2026 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2026/Reverse_Proxy_in_shadow-cljs.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve broken my reverse proxy configuration
in shadow-cljs multiple times,
so I need a reminder for myself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have the server-side api running
in a container,
and the CLJS is running in shadow-cljs in dev mode.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With a &lt;code&gt;:proxy-url&lt;/code&gt; set,
shadow-cljs will forward
any request it can&amp;#8217;t match
with a file
in the root
to the other server.
This helps avoid Cross-Site-Request-Forgery failures
in the browser
during development.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt; :dev-http {3000 {:root &quot;public&quot;
                  :proxy-url &quot;http://localhost:7000/my-backend-service&quot;}}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The important part
is to ensure
the URL lacks the trailing slash.
With the slash, I see lots of not-found errors
from the backend server
for everything but the default index.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Teach the AI to Unit Test
            </title>
            <link>
                https://www.hjsoft.com/blog/2026/Teach_the_AI_to_Unit_Test.html
            </link>
            <pubDate>Thu, 19 Feb 2026 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2026/Teach_the_AI_to_Unit_Test.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Gemini AI will make some pretty good guesses
about how a 3rd-party API may work.
It &lt;em&gt;is&lt;/em&gt; good at searching the internet,
but when APIs have changed across versions,
the old and new docs and examples it&amp;#8217;ll find
can confuse it.
In a dynamic language and environment
you&amp;#8217;ll not spot these errors
until runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To combat the ambiguity
and to give the AI agent more power
to solve its own problems,
ask it to add some tests
around the code that uses the API.
(In my case, the API is the XTDB client API.)
Once it has a way to execute the code
through tests,
it&amp;#8217;ll quickly start figuring out
where it&amp;#8217;s made mistakes
and start running its own experiments
to observe errors,
search for fixes,
and applying those fixes
around the codebase.
I exhibit the same pattern
when I&amp;#8217;m doing it by hand.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The tests also give you,
the human,
an easier entry point to evaluate
the code the AI generated.
If the tests look gnarly,
you know to suggest refactorings
to improve the architecture
and make it easier to test.
When the AI has the tests passing,
and the test code is easy enough to read,
then you can have a closer look
at the application code
to refine
and keep that maintainable too.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Relearn TPMS on the Bolt
            </title>
            <link>
                https://www.hjsoft.com/blog/2026/Relearn_TPMS_on_Bolt.html
            </link>
            <pubDate>Tue, 17 Feb 2026 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2026/Relearn_TPMS_on_Bolt.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I saw a tire was low on the display
of my &lt;a href=&quot;https://www.kbb.com/chevrolet/bolt-ev/2017/&quot;&gt;2017 Chevy Bolt EV&lt;/a&gt;,
so I topped up the tire
with the &lt;a href=&quot;https://www.amazon.com/dp/B0F93RS2BH&quot;&gt;tire inflator jumpstarter&lt;/a&gt;
I keep in the car.
The next day,
I noticed it was still low,
so I hit it again
and brought it up a little higher.
When I checked in the car again,
I saw it&amp;#8217;s still low, but the back tire is high.
&lt;em&gt;The TPMS sensors aren&amp;#8217;t in the right place.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;They apparently are the type of sensors
that I can receive with my &lt;a href=&quot;https://www.rtl-sdr.com/&quot;&gt;RTL-SDR&lt;/a&gt;
as they drive by the house.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To get the car to register each sensor in the right place,
I needed to tell it to relearn the IDs.
I bought a &lt;a href=&quot;https://www.amazon.com/dp/B072BK693N&quot;&gt;little tool for $10&lt;/a&gt;
to trigger the sensors,
but I apparently could have also
done it by deflating the tires in turn
to also trigger the sensor on demand.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Activate the &lt;em&gt;Service Mode&lt;/em&gt;
by pressing the &lt;em&gt;Start&lt;/em&gt; button
for 5 seconds with no foot on the brake.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the driver&amp;#8217;s display,
select the &lt;em&gt;Tire Pressure&lt;/em&gt; display,
and click it to activate &lt;em&gt;Relearn Mode&lt;/em&gt;.
The horn chirps twice at the start,
and the display says it&amp;#8217;s active.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start at the front left tire.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Place the relearn tool
next to the sidewall near the valve stem
and pointing the antenna toward the center of the wheel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Press the button once
and it&amp;#8217;ll transmit for 10 seconds or so,
to trigger the TPMS sensor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The car chirps the horn
when it registers the actiated sensor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go around to the others tires clockwise
(front left, front right, back right, back left)
activating each in turn.
The car will chirp the horn as each sensor registers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Done!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Ask the AI
            </title>
            <link>
                https://www.hjsoft.com/blog/2026/Ask_the_AI.html
            </link>
            <pubDate>Mon, 9 Feb 2026 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2026/Ask_the_AI.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/google-gemini/gemini-cli&quot;&gt;Gemini CLI&lt;/a&gt;
is getting even stronger
for &lt;a href=&quot;https://clojure.org/&quot;&gt;Clojure&lt;/a&gt; code.
The &lt;a href=&quot;https://github.com/bhauman/clojure-mcp&quot;&gt;&lt;code&gt;clojure-mcp&lt;/code&gt;&lt;/a&gt;
is part of that power:
it&amp;#8217;s exploring the code and fixing up syntax
quicker now.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In addition to writing code,
it&amp;#8217;s been good at listing and implementing
optimizations and refactorings
to improve the code
when asked.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;d still like to remind you
to &lt;em&gt;ask the AI to explain itself&lt;/em&gt;.
It&amp;#8217;s still our responsibility
to understand what it&amp;#8217;s doing
and to question its decisions,
just like we would
to get the best we can
from any other teammate.
It&amp;#8217;s our opportunity to learn
and understand too
from a very comprehensive
summary of all the internet searches
I used to need to do for myself.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Remapping the CoPilot Key on IdeaPad with Keyd and CW
            </title>
            <link>
                https://www.hjsoft.com/blog/2026/IdeaPad_CW_Keyd.html
            </link>
            <pubDate>Mon, 19 Jan 2026 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2026/IdeaPad_CW_Keyd.html
            </guid>
            <description>
                &lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_the_copilot_key&quot;&gt;The CoPilot Key&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Lenovo IdeaPad 5 has a CoPilot where it should have
a Control Key.
The key simulates a combination of keys,
so normal ways of mapping the key
(&lt;code&gt;udev/hwdb.d&lt;/code&gt; on Debian) do not work.
&lt;a href=&quot;https://askubuntu.com/questions/526449/how-to-remap-the-windows-copilot-key-in-ubuntu&quot;&gt;&lt;code&gt;keyd&lt;/code&gt; can hook the key&lt;/a&gt;,
though,
and present another virtual keyboard device.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_usb_adapter_for_cw_keys&quot;&gt;USB Adapter for CW Keys&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are inexpensive USB adapters
that allow plugging a CW key or Iambic paddle
into the computer
for use with &lt;a href=&quot;https://hamradio.solutions/vband/&quot;&gt;vBand&lt;/a&gt;
or &lt;a href=&quot;https://www.reddit.com/r/amateurradio/comments/1k379qp/what_else_can_i_use_my_vband_interface_on/&quot;&gt;other games&lt;/a&gt;.
The adapter presents as a keyboard,
and the paddles show up as additional Left and Right Ctrl keys.
If you are running &lt;code&gt;keyd&lt;/code&gt; on the machine,
its default behavior of mapping Right Ctrl to be Left Ctrl
(which I guess lots of people find useful)
will interfere
and cause both sides of the paddle to trigger the same dit or dah.
Fortunately, we can undo this broken behavior to get the key working again.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_the_complete_configuration&quot;&gt;The Complete Configuration&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Create &lt;code&gt;/etc/keyd/default.conf&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;[ids]
*

[main]
# copilot key
leftshift+leftmeta+f23 = rightcontrol
# keep right ctrl as it is. keyd by default remaps it to left ctrl for some reason
rightcontrol = rightcontrol&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Restart &lt;code&gt;keyd&lt;/code&gt;: &lt;code&gt;systemctl restart keyd&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_testing&quot;&gt;Testing&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After the mappings have been applied,
you can be observe it with &lt;code&gt;evtest&lt;/code&gt;.
You&amp;#8217;ll also see the key working in vBand.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I wouldn&amp;#8217;t have needed &lt;code&gt;keyd&lt;/code&gt; if it wasn&amp;#8217;t for
needing to remap the useless CoPilot key.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Iterative Development with Gemini CLI
            </title>
            <link>
                https://www.hjsoft.com/blog/2025/Iterative_Development_with_Gemini_CLI.html
            </link>
            <pubDate>Wed, 31 Dec 2025 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2025/Iterative_Development_with_Gemini_CLI.html
            </guid>
            <description>
                &lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_models_and_expectations&quot;&gt;Models and Expectations&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve had &lt;a href=&quot;https://github.com/google-gemini/gemini-cli&quot;&gt;Gemini CLI&lt;/a&gt;
installed on my workstation
since August 2025.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Originally,
it would default
to use the &lt;code&gt;gemini-2.5-pro&lt;/code&gt; model
and your &quot;access&quot; to that
would run out for the day,
and it would switch to using &lt;code&gt;gemini-2.5-flash&lt;/code&gt;.
I found the &lt;code&gt;flash&lt;/code&gt; model to be adequate
for the way I&amp;#8217;d use it to do Clojure and ClojureScript,
so most the time I&amp;#8217;d override
it to just use &lt;code&gt;flash&lt;/code&gt; from the beginning.
I thought I could kick over to &lt;code&gt;pro&lt;/code&gt;
if I found a problem for which I&amp;#8217;d need more power.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Eventually,
Gemini CLI started switching back and forth
between models more intelligently,
so it didn&amp;#8217;t burn through your limited access
to &lt;code&gt;pro&lt;/code&gt;,
so I no longer override it with &lt;code&gt;3.0&lt;/code&gt; models.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_pairing_with_a_junior_developer&quot;&gt;Pairing with a Junior Developer&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The AI agent by itself
has read lots of documentation,
and it&amp;#8217;s pretty good at Googling the answers to questions
and picking something to try.
(&lt;em&gt;I&lt;/em&gt; often get a bit of analysis paralysis
when trying to choose a library.)
It can be surprisingly good
at translating sample usage
of some JavaScript library
it finds into a simple bit of ClojureScript.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In my experience,
it&amp;#8217;s sometimes bad at matching parentheses,
so I just fix them myself.
Recently,
it may be getting better,
and some &lt;a href=&quot;https://github.com/bhauman/clojure-mcp&quot;&gt;Clojure MCP&lt;/a&gt; projects
can cleanup parentheses automatically.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I only ask it to do small tasks,
and I closely review and test
the code it generates.
When it looks good,
I commit and push the code,
but I know I can always
easily go back to a previous working version
when the AI goes off the rails.
I don&amp;#8217;t have to worry too much
about it getting too confused
or destroying something.
I tell it to forget what we were doing,
&lt;code&gt;/clear&lt;/code&gt; the context,
or just restart the agent completely,
and recover my known good state from &lt;code&gt;git&lt;/code&gt;.
(Update 2026-02-17:
&lt;code&gt;/rewind&lt;/code&gt; may be better these days
for clearing some context.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I find that even if it fails to complete a task,
I at least learn a little from what it did,
and often have an initial direction or two
to explore.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It&amp;#8217;s pretty good at keeping my momentum
when working and keeping me from spinning my wheels,
like pairing with another programmer.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Porting Scripts for GIMP 3.0
            </title>
            <link>
                https://www.hjsoft.com/blog/2025/Porting_Scripts_for_GIMP_3.0.html
            </link>
            <pubDate>Wed, 26 Nov 2025 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2025/Porting_Scripts_for_GIMP_3.0.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;GIMP 3.0 hit my Linux machines a while ago,
and all my personal and 3rd-party scripts broke.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I finally took a moment to look at the errors
and figure out what needed to be updated.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My simplest script merely sets the current layer&amp;#8217;s blend mode
to &lt;em&gt;Soft Light&lt;/em&gt;, but even that broke.
Why&amp;#8217;s that useful? Once there&amp;#8217;s an action in the menu,
I can bind a keyboard shortcut (Ctrl-S)
to it.
I need to switch lots of new layers
to Soft Light:
High Pass for sharpening,
or a layer for dodging and burning.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Registering the menu is what often failed:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;attempted to install procedure &quot;&quot;
with a full menu path &quot;&amp;lt;Image&amp;gt;/Shortcuts/_Change to Softlight&quot; as menu label,
this is not supported any longer.&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To fix it,
we move the menu path into a separate call, instead of all at once
in &lt;code&gt;script-fu-register&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here&amp;#8217;s the fixed script:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;(define (softlight-layer img inLayer)
  (gimp-layer-set-mode inLayer LAYER-MODE-SOFTLIGHT)
    (gimp-displays-flush))

(script-fu-register
    &quot;softlight-layer&quot;                         ;function name
    &quot;Change to Softlight&quot;                     ;menu label
    &quot;Change current layer to Softlight mode&quot;  ;description
    &quot;John Flinchbaugh&quot;                        ;author
    &quot;Copyright 2025, John Flinchbaugh&quot;        ;copyright notice
    &quot;November 26, 2025&quot;                       ;date created
    &quot;RGB* GRAY*&quot;                              ;image type that the script works on
    SF-IMAGE &quot;image&quot; 0
    SF-DRAWABLE &quot;drawable&quot; 0)

(script-fu-menu-register &quot;softlight-layer&quot; &quot;&amp;lt;Image&amp;gt;/Shortcuts&quot;)&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Clojure for SRCC
            </title>
            <link>
                https://www.hjsoft.com/blog/2025/Clojure_for_SRCC.html
            </link>
            <pubDate>Mon, 11 Aug 2025 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2025/Clojure_for_SRCC.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For our local art collective,
&lt;a href=&quot;https://www.srccpaart.org/&quot;&gt;Susquehanna River Creative Collective&lt;/a&gt; (SRCC),
I setup some Raspberry PIs connected to televisions
to display our flyers advertising benefits of membership
and upcoming events.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_initial_setup_for_displays&quot;&gt;Initial Setup for Displays&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The machines are behind a firewall
and running on a read-only overlay filesystem
for resiliency,
so I had the machines periodically pull the event images
from the &lt;a href=&quot;https://www.srccpaart.org/&quot;&gt;website&lt;/a&gt;,
and I can change out the images on the website any time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This was all done with desktop autostart scripts
and &lt;code&gt;cron&lt;/code&gt; for quite some time,
but eventually, we needed more control.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_the_new_setup_for_displays&quot;&gt;The New Setup for Displays&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We wanted to have different sets of images
and to be able to choose them.
For a show, we may want to only show the logo,
while other times might call
for all the normal advertisements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The machines have no keyboards or mice,
so they needed to be controlled by a web browser.
I also don&amp;#8217;t know if they&amp;#8217;ll start up
on the same IP addresses,
so I needed a bit of Javascript in a static place
to have the browser search and find running slide servers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/jflinchbaugh/srcc-slide-server&quot;&gt;service on each machine&lt;/a&gt;
now runs as a &lt;a href=&quot;https://babashka.org/&quot;&gt;babashka script&lt;/a&gt; that starts upon automatic login.
It pulls new images from the website
and from a Google Drive,
periodically refreshes them,
and starts Eye of Mate (&lt;code&gt;eom&lt;/code&gt;)
to run the slide show.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The babashka script
also starts a small web server
on &lt;code&gt;http-kit&lt;/code&gt; to let us
to choose image sets
and to trigger a refresh of the images.
&lt;code&gt;http-kit&lt;/code&gt; is provided by default in babashka.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_updating_the_website_with_more_clojure_code_and_ai&quot;&gt;Updating the Website with More Clojure Code and AI&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The SRCC website is a static site built
with Hugo,
so I add all the events to it
via an image or 2 and some YAML.
It&amp;#8217;s hard to train another normal person
to do this stuff,
so the responsibility fell exclusively on me.
I scripted it up with some bash,
but that&amp;#8217;s still only accessible to me.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Finally,
I&amp;#8217;ve been coding all Clojure code
for the past couple weeks,
and I&amp;#8217;ve started playing
with &lt;a href=&quot;https://cloud.google.com/gemini/docs/codeassist/gemini-cli&quot;&gt;Gemini CLI&lt;/a&gt;
to see what it can do
with some Clojure code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I now have a web form available to
&lt;a href=&quot;https://github.com/jflinchbaugh/srcc-builder&quot;&gt;allow others to create events&lt;/a&gt;
for the website,
and it interacts with &lt;code&gt;git&lt;/code&gt;
for publishing to the Hugo site.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The service is deployed on my normal Linux servers
as a container run by &lt;code&gt;podman kube play&lt;/code&gt;
and &lt;code&gt;systemd quadlet&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I can direct Gemini to make changes
or add features,
and I review the code,
ask for corrections
or just make updates myself.
It&amp;#8217;s kind of like pair programming
with someone who&amp;#8217;s really good
at Googling answers
and jumping to some (mostly) useful conclusions.
Having the AI agent has helped maintain some momentum
and saved me jumping down some deep rabbit holes
before I needed.
I&amp;#8217;m asking it for small changes and iterating,
not trying to get it to do everything in one shot.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Gemini&amp;#8217;s CLI interface
makes it easy to switch to another project directory
and let it try some stuff on lots of my projects recently.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had also played with Claude CLI
for a day,
but Gemini&amp;#8217;s free tier
is proving capable enough for me so far.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Clojure Projects
            </title>
            <link>
                https://www.hjsoft.com/blog/2025/Clojure_Projects.html
            </link>
            <pubDate>Mon, 24 Mar 2025 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2025/Clojure_Projects.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have a
&lt;a href=&quot;https://github.com/jflinchbaugh?tab=repositories&amp;amp;language=clojure&quot;&gt;long list of Clojure projects&lt;/a&gt;
I&amp;#8217;ve created over the years to learn Clojure
and accomplish various personal tasks.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_advent_of_code&quot;&gt;Advent of Code&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of the end of 2024,
I&amp;#8217;ve done at least some of &lt;a href=&quot;https://adventofcode.com/&quot;&gt;Advent of Code&lt;/a&gt;
for 7 years in a row.
I&amp;#8217;ve had the most fun and practice
parsing and transforming
the input data
for each puzzle
into a suitable model.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned pretty quickly from the puzzles
to store the common grids as sparse maps
to save lots of memory and keep the problem in memory.
I sometimes got stuck on the puzzle and the algorithm,
but I still got lots of practice in general Clojure.
I definitely see that the Clojure data structures
lend themselves well to the puzzles.
I&amp;#8217;ve gotten to effectively apply
lots of common Clojure libraries
like &lt;code&gt;core.async&lt;/code&gt; and &lt;code&gt;core.logic&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_incidents&quot;&gt;Incidents&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My &lt;a href=&quot;https://github.com/jflinchbaugh/incidents&quot;&gt;incidents project&lt;/a&gt;
scrapes an RSS feed of emergency response incidents
in Lancaster County
and stores them into an &lt;code&gt;XTDB&lt;/code&gt; database
for history.
It generates static site of current events with &lt;code&gt;hiccup&lt;/code&gt;
and historical charts with &lt;a href=&quot;https://clerk.vision/&quot;&gt;Clerk&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.hjsoft.com/~john/incidents/&quot;&gt;Running this project&lt;/a&gt;
day-to-day,
I learned that the Clojure/JVM start up
is a bit too heavy to start frequently
from &lt;code&gt;cron&lt;/code&gt;,
so I run it as a service in &lt;code&gt;systemd&lt;/code&gt; with its own scheduling.
Clerk is also a bit heavy
with the amount of historical data,
so I have that scheduled to rebuild less frequently than the scraper.
The site is still all static.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_event_logger&quot;&gt;Event Logger&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With &lt;a href=&quot;https://github.com/jflinchbaugh/event-logger&quot;&gt;this CLJS project&lt;/a&gt;,
I was trying to derive a standard &lt;code&gt;shadow-cljs&lt;/code&gt; workflow
to make sure I could start any new CLJS web project quickly.
It started using Reagent,
and I migrated to Helix
to be less-insulated from newer React features.
I also wrote code to migrate data
in local browser storage from an old Transit format
to EDN.
I&amp;#8217;m constantly learning the better flows
for data in React and local storage.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This project also now has a
&lt;a href=&quot;https://github.com/jflinchbaugh/event-logger&quot;&gt;back-end API&lt;/a&gt;
running on &lt;code&gt;http-kit&lt;/code&gt; as a server
and storing its data in XTDB 2.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_covid_warehouse_and_covid_web&quot;&gt;COVID Warehouse and COVID Web&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The beginning of 2020
provided some of us with lots of downtime,
so I started loading and analyzing Johns Hopkins University&amp;#8217;s
data on COVID
with my own &lt;a href=&quot;https://github.com/jflinchbaugh/covid-warehouse&quot;&gt;data warehouse&lt;/a&gt;
and &lt;a href=&quot;https://github.com/jflinchbaugh/covid-web&quot;&gt;web app to display my data&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The data was pretty messy early on,
and it changed over time,
so I needed to parse lots of different formats.
I generated a static site with my historic graphs
and focused on World, US, and counties in Pennsylvania.
It was a classic ETL for a star schema data warehouse,
since I wanted to refresh my experience on that.
I initially stored in in a SQL database
using &lt;code&gt;hugsql&lt;/code&gt; and &lt;code&gt;next.jdbc&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After a bit of time,
this became my first project to explore CRUX/XTDB
and NoSQL data structures.
I learned a bit about how changes applied in XTDB
and how to limit history
and otherwise save space
on my small server environment.
I could easily apply &lt;code&gt;core.async&lt;/code&gt;
when it was time to get things done faster.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/jflinchbaugh/covid-web&quot;&gt;web app project&lt;/a&gt;
that I added later
provided a more dynamic Reagent app in CLJS
that used the static data produced by warehouse project.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_planning_poker&quot;&gt;Planning Poker&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I wanted a &lt;a href=&quot;https://github.com/jflinchbaugh/planning-poker&quot;&gt;simple tool&lt;/a&gt;
for conducting planning poker in sprint planning,
so I built one
in JS to run on mobile phones.
When I started learning CLJS,
I converted it to Reagent and used Leiningen to build it.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_clojure_all_the_other_things&quot;&gt;Clojure All the Other Things!&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve enjoyed finding there are ways to apply Clojure to everything!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;_structured_intepretation_of_computer_programs&quot;&gt;Structured Intepretation of Computer Programs&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m reading SICP and
&lt;a href=&quot;https://github.com/jflinchbaugh/sicp&quot;&gt;implementing all the exercises in Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;_music_in_overtone&quot;&gt;Music in Overtone&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have a &lt;a href=&quot;https://github.com/jflinchbaugh/music&quot;&gt;project&lt;/a&gt;
where I play with data structures for music
and explore lots of examples in Overtone,
including Rich Hickey&amp;#8217;s experiments in additive synthesis
and sequencing some simple beats
from drum-n-bass tutorials for other DAWs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It required lots of yak-shaving work over the years to keep
the native wiring to Supercollider and Linux sound working.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect2&quot;&gt;
&lt;h3 id=&quot;_3d_objects&quot;&gt;3D Objects&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve found a library to interface
Clojure to OpenSCAD,
so I have some
&lt;a href=&quot;https://github.com/jflinchbaugh/objects-clj/&quot;&gt;3D models defined in Clojure code&lt;/a&gt;
for printing.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Scaling for Small Displays
            </title>
            <link>
                https://www.hjsoft.com/blog/2024/Scaling_for_Small_Displays.html
            </link>
            <pubDate>Tue, 13 Aug 2024 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2024/Scaling_for_Small_Displays.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I bought a very small laptop
to use with radio work in the field,
and the screen resolution is a bit small (1366x768).
Pair the small display
with current desktop environments&apos;
tendency toward chunky, touch-friendly interfaces,
and it doesn&amp;#8217;t allow one to cram much on the screen.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My desktop environment is Gnome,
so I slimmed it down with some stylesheets:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;headerbar {
  margin: 0 1em 0 1em;
  padding-top: 0;
  padding-bottom: 0;
  border-width: 0px;
  font-size: 12pt;
  min-height: 0px;
}

headerbar * {
  margin: 0;
  padding-top: 0;
  padding-bottom: 0;
  border-radius: 0;
  border-width: 0px;
  min-height: 0px;
}

headerbar box {
  padding: 0.1em 0.5em 0.1em 0.5em;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;WSJT-X is a QT app,
so I scaled the fonts
there to make everything fit better by setting the DPI
in a launch script:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;#!/bin/sh

export QT_FONT_DPI=75
/usr/bin/wsjtx&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                ReloaderJS
            </title>
            <link>
                https://www.hjsoft.com/blog/2024/ReloaderJS.html
            </link>
            <pubDate>Thu, 25 Apr 2024 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2024/ReloaderJS.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I created a little
&lt;a href=&quot;https://github.com/jflinchbaugh/reloaderjs&quot;&gt;ReloaderJS&lt;/a&gt;
script that I use with a couple projects.
Upon applying the script,
the page is always reloaded
and up-to-date
any time I switch to the tab
or wake the laptop.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The script allows reloading
at a period that matches
the schedule
at which the underlying site
is updated.
It also doesn&amp;#8217;t bother updating when the site
is unavailable (down or the client is offline).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It really stands out now
when I see a site that&amp;#8217;s tried to reload
but couldn&amp;#8217;t, so it&amp;#8217;s showing an error page
from the browser
when I open my laptop.
It feels good to have solved
that problem for myself.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                KC3WWC Blog
            </title>
            <link>
                https://www.hjsoft.com/blog/2024/KC3WWC_Blog.html
            </link>
            <pubDate>Thu, 11 Apr 2024 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2024/KC3WWC_Blog.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve been playing with &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;
for &lt;a href=&quot;https://www.srccpaart.org/&quot;&gt;other sites&lt;/a&gt;
and liking it a whole lot.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I used it to host my next site,
the &lt;a href=&quot;https://kc3wwc.johnflinchbaugh.com/&quot;&gt;KC3WWC Amateur Radio Blog&lt;/a&gt;.
I&amp;#8217;ll collect all my notes
on amateur radio over there.
I had been keeping a running document
in org-roam,
so it&amp;#8217;s now time to make it public.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                SmartThings Home &amp; Away
            </title>
            <link>
                https://www.hjsoft.com/blog/2023/SmartThings_Home_Away.html
            </link>
            <pubDate>Mon, 27 Nov 2023 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2023/SmartThings_Home_Away.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have &lt;a href=&quot;https://www.smartthings.com/&quot;&gt;Samsung SmartThings&lt;/a&gt;
automatically setting the thermostat
and turning things on and off
for me
based on the location
of my phone (and me).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Of course,
it stopped working,
so I needed to debug.
All the other things connected
to the hub were working fine.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_things_that_didnt_fix_it&quot;&gt;Things That Didn&amp;#8217;t Fix It&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Restart my phone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wipe the SmartThings app data on my phone and login again&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the SmartThings Hub&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check app permissions on the phone:
no optimization, fine location access always on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_the_fix&quot;&gt;The Fix&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Open SmartThings app on the phone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Menu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Settings Cog&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get your location from this phone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Turn it off, then back on&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Visit my 2 location-based triggers
and re-add myself as a member.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fixed!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Roll Your Own HTML in Clerk
            </title>
            <link>
                https://www.hjsoft.com/blog/2023/Roll_Your_Own_HTML_in_Clerk.html
            </link>
            <pubDate>Sun, 23 Apr 2023 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2023/Roll_Your_Own_HTML_in_Clerk.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The
&lt;a href=&quot;https://github.clerk.garden/nextjournal/book-of-clerk/commit/7097b690e91a3c5297db604546f8b538eef2f97f/#tables&quot;&gt;&lt;code&gt;clerk/table&lt;/code&gt;&lt;/a&gt;
component
automatically limits
itself to only showing 20 results.
Other presentation components,
especially text,
have configurable
&lt;a href=&quot;https://github.clerk.garden/nextjournal/book-of-clerk/commit/7097b690e91a3c5297db604546f8b538eef2f97f/#elisions&quot;&gt;&lt;em&gt;elision&lt;/em&gt;&lt;/a&gt;
behaviors,
but it doesn&amp;#8217;t apply
to the &lt;code&gt;table&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After searching,
guessing at ways to do it,
and even asking in conference talks,
I finally realized
that we can render
our own HTML
with &lt;code&gt;clerk/html&lt;/code&gt;
and hiccup.
That HTML
is not limited
to any size,
and building a table
is easy.
We used to do it
all the time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I wrote
my own simple function
to render a table,
and I used that instead of the &lt;code&gt;clerk/table&lt;/code&gt;.
It takes the same parameters I was already using.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;^{:nextjournal.clerk/visibility {:code :hide :result :hide}}
(ns sample
  {:nextjournal.clerk/visibility {:code :fold :result :show}}
  (:require
   [nextjournal.clerk :as clerk]))

^{:nextjournal.clerk/visibility {:code :hide :result :hide}}
(defn my-table
  &quot;display a simple table in html.
  :head is the sequence of head labels.
  :rows is a sequence of sequences.
  :limit is the max to display of the rows. (default 100)&quot;
  [params]
  (clerk/html [:table
               [:thead
                [:tr
                 (for [h (:head params)] [:th h])]]
               [:tbody
                (for [r (take (or (:limit params) 100) (:rows params))]
                  [:tr
                   (for [c r]
                     [:td c])])]]))

(my-table
  {:head [&quot;x&quot; &quot;y&quot;]
   :limit 100
   :rows [[1 2]
          [3 4]]})&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_update_2023_11_27&quot;&gt;Update 2023-11-27&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As of the
&lt;a href=&quot;https://github.com/nextjournal/clerk/blob/main/CHANGELOG.md#015957-2023-09-28&quot;&gt;0.15.957 release&lt;/a&gt;,
clerk tables have a &lt;code&gt;::clerk/page-size&lt;/code&gt; parameter,
so I use that now
instead of the code above.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Digital Archeology
            </title>
            <link>
                https://www.hjsoft.com/blog/2023/Digital_Archeology.html
            </link>
            <pubDate>Sat, 4 Feb 2023 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2023/Digital_Archeology.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;span class=&quot;image right&quot;&gt;&lt;img src=&quot;/blog/images/2023/floppies.jpg&quot; alt=&quot;Floppies&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_nostalgia_for_old_code&quot;&gt;Nostalgia for Old Code&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve been coding for a very long time,
so I&amp;#8217;ve had lots of projects
in various languages,
on various platforms,
and stored very differently.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I got nostalgic
on and off
over the past couple years
and went digging around
to recover
the source
for some of those old projects.
I uploaded the more notable projects
to my &lt;a href=&quot;https://github.com/jflinchbaugh&quot;&gt;GitHub account&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_old_floppies&quot;&gt;Old Floppies&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I spent money to buy a 3.5-inch USB floppy drive
and an old 386 PC
with a 5.25-inch and 3.5-inch floppy drive,
so I could ultimately copy files
from really old 5.25-inch floppies
that I used
in the late 1980s
and early 1990s
to my live storage
of today.
Among those old files
were binaries and source
in GWBASIC and QuickBasic.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_quickbasic&quot;&gt;QuickBasic&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I found one of the first games I wrote
and sort of distributed,
&lt;a href=&quot;https://github.com/jflinchbaugh/gravity-blocks&quot;&gt;Gravity Blocks&lt;/a&gt;.
I could play the compiled binary
with &lt;a href=&quot;https://www.dosbox.com/&quot;&gt;DOSBox&lt;/a&gt;
and read the main source file,
but some of the source code
for my common libraries
is still locked up in a compressed format
from QuickBasic 4.5.
I may need to dig deeper into
&lt;a href=&quot;https://github.com/QB64Official/qb64&quot;&gt;QB64&lt;/a&gt;,
a clone of QuickBasic 4.5
that seems to be able
to read, run, and compile
those old compressed files.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_gwbasic&quot;&gt;GWBASIC&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I also found source code
for the first software
I wrote for the local fire company
to help track statistics on calls
and print reports
to submit
to the local municipalities
we served.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It was written in &lt;a href=&quot;https://en.wikipedia.org/wiki/GW-BASIC&quot;&gt;GWBASIC&lt;/a&gt;,
so I was able
to &lt;a href=&quot;https://github.com/danvk/gwbasic-decoder&quot;&gt;decode&lt;/a&gt;
the compressed source
where needed to read it.
I published my
&lt;a href=&quot;https://github.com/jflinchbaugh/call-rep-1992&quot;&gt;CALL-REP source&lt;/a&gt;,
so I could go back
and have a look
at the simple,
but useful,
things I used to write
as a kid.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_copies_of_old_servers_and_subversion&quot;&gt;Copies of Old Servers and Subversion&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I continued
to build stuff
through college
(and obviously beyond).
Some of it was in C, PERL, and Java.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I recovered these bits
of source code
laying around in backups and copies
of old Linux servers I&amp;#8217;ve run
over the years.
This source was in old Subversion repositories
that used old versions of Berkeley DB.
Initially,
This BDB version mismatch
kept &lt;code&gt;svn checkout&lt;/code&gt; from working,
but the current Subversion tools
have an &lt;code&gt;svnadmin recover&lt;/code&gt; command
that could fix the repository
for normal reading today.
I&amp;#8217;m sure some
of those old SVN repositories
had previously been migrated
from CVS.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_java&quot;&gt;Java&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I found the source code
from my final project
in the Java class
in my last year of college
in 2000.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/bust&quot;&gt;Pop-a-Prof&lt;/a&gt;
is a clone of my favorite puzzle game,
&lt;a href=&quot;https://en.wikipedia.org/wiki/Puzzle_Bobble&quot;&gt;Bust-a-Move&lt;/a&gt;.
It&amp;#8217;s a &lt;a href=&quot;https://en.wikipedia.org/wiki/Java_applet&quot;&gt;Java Applet&lt;/a&gt;
that ran in Netscape
allowing any number of players,
and it coordinated everyone&amp;#8217;s play
with a shared public server,
Each round lasted 5 minutes,
and any time you topped-out,
you&amp;#8217;d lose some points,
and start over,
so no one needed to sit around watching
the last people battle it out.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After school,
I started on
&lt;a href=&quot;https://github.com/jflinchbaugh/pop-a-prof-2&quot;&gt;Pop-a-Prof 2&lt;/a&gt;.
This one ran as a plain Java application,
and implemented rebounding balls
in the game.
It was more of a proof-of-concept
for the new game mechanics,
and it never got network play.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_java_me&quot;&gt;Java ME&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I liked running little bits of code,
like applets did,
so I continued
into writing
&lt;a href=&quot;https://en.wikipedia.org/wiki/Java_Platform,_Micro_Edition&quot;&gt;Java ME (J2ME)&lt;/a&gt;
for my
&lt;a href=&quot;https://www.hjsoft.com/blog/2020/Past_Phones.html&quot;&gt;feature phones&lt;/a&gt;
around 2005.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I did a gas-logging app
that stored fuel-ups
and drew graphs to show fuel economy.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I also wrote
a quick little
game called &lt;a href=&quot;https://github.com/jflinchbaugh/BensBackhoe&quot;&gt;Ben&amp;#8217;s Backhoe&lt;/a&gt;
to give the kids
a little something
to do on my phone.
By the time
I was building this sort
of thing,
though,
I&amp;#8217;m a decent Java programmer,
so it&amp;#8217;s not the fun mess
that we see in the other old project.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_still_more&quot;&gt;Still More&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I spent most the day
poking around
at various old BASIC files
and trying to tweak them
a bit to run
in &lt;a href=&quot;https://robhagemans.github.io/pcbasic/&quot;&gt;PCBasic&lt;/a&gt;
or &lt;a href=&quot;https://github.com/QB64Official/qb64&quot;&gt;QB64&lt;/a&gt;.
I used lots of weird graphics modes
from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_1000&quot;&gt;Tandy 1000&lt;/a&gt;
and didn&amp;#8217;t think much about portability.
I may post more projects over time.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                The Friendly Orange Glow
            </title>
            <link>
                https://www.hjsoft.com/blog/2023/Friendly_Orange_Glow.html
            </link>
            <pubDate>Mon, 2 Jan 2023 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2023/Friendly_Orange_Glow.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;span class=&quot;image right&quot;&gt;&lt;img src=&quot;/blog/images/2023/friendly_orange_glow.jpg&quot; alt=&quot;The Friendly Orange Glow&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_obscurity&quot;&gt;Obscurity&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/34373814-the-friendly-orange-glow&quot;&gt;The Friendly Orange Glow&lt;/a&gt;
tells the history
of a piece
of educational software,
&lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_(computer_system)&quot;&gt;PLATO&lt;/a&gt;,
that grew
into a whole microcosm
of the internet
and cyber culture
years before the internet
we&amp;#8217;ve known for the past 25 years.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Brian Dear attributes
the obscurity
of PLATO to it having been
built and developed
at University of Illinois
in the Midwest and not
at a school on the coast.
The PLATO system also used
dedicated client hardware
with integrated slide projectors,
and it ran on a single mainframe.
Everything was coded
in a programming language
called TUTOR,
which was primarily designed
for authoring interactive lessons
using the orange gas plasma display,
a rudimentary touch input for the screen,
the keyboard,
an slide projector integrated into the display,
and even occasional peripherals
like some sort of synthetic woodwind sound device.
It was all very specialized
from the beginning.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I loved the time the author dedicated
to describing technical details,
like how the orange
gas plasma display was developed:
the grids of wiring,
pockets of noble gases
trapped between them,
and the way accidental
contamination allowed them
to discover a memory effect
they could use to keep
each pixel lit.
Fixing the contamination
lost the memory effect.
He presented a wonderful
level of detail
for my interest.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_cyber_culture&quot;&gt;Cyber Culture&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Donald Bitzer
showed off PLATO
to anyone who would
take a moment to try it.
He wanted people to learn
and get creative,
seldom shutting down experiments.
He&amp;#8217;d embrace the high school
and university hackers
who would wander into the labs,
and he put some of them to work
building hardware or testing.
These people would go on
to build all sorts of multiplayer games
and other software to be used
by other users on the system.
Bitzer recognized the value
in observing what people
did with the spare cycles
of the system
at night.
From that freedom
sprung an entire hacker culture
similar to what I found in my youth,
so I felt great nostalgia for this work.
Again though,
I was discovering
this culture in the 1990s
with bulletin board systems
and the internet
in college,
and Bitzer&amp;#8217;s revolution
had already happened
in the 1970s.
We were always
pushing the limits
of what we were supposed
to do with these systems.
It looked like wasted time,
but we learned the most.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Discovering new lessons
or software
on the PLATO system
seemed akin
to our exploration of BBSes
via our modems in the 1990s.
We&amp;#8217;d stumble around trying
to find some new phone number
or new corner of an existing BBS,
and these kids in the 1970s
were exploring PLATO
to find games
or long threaded discussions
in notes that others
were developing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;PLATO started
as a way to display some slides
and teach a self-paced lesson,
but grew into games,
forums, and email
before such things existed.
It could have grown into one
of the great online services
that followed,
but they may have gotten
too tied up in their centralization
and specialized hardware.
The management
of their commercial partner
may not have helped either,
because they just wanted
to sell mainframes,
and didn&amp;#8217;t recognize the value of community
that had been built around the system.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The book was an exciting listen,
and I blasted
through the whole thing
in about 2 days,
because I just couldn&amp;#8217;t put it down.
It reminded me of my childhood
and all the potential
of the systems of the day
and the creativity that came
from the limitations
of the day.
PLATO evolved
in an alternate universe
in the middle of the country
away from the technology hubs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Podcast List for November 2022
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/Podcast_List_for_November_2022.html
            </link>
            <pubDate>Thu, 3 Nov 2022 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/Podcast_List_for_November_2022.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have 73 feeds I currently follow.
I have a whole system of prioritization,
so I can listen to important things first.
I&amp;#8217;ve listed them alphabetically here:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;99% Invisible &lt;a href=&quot;https://feeds.simplecast.com/BqbsxVfO&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/BqbsxVfO&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All About Android (Audio) &lt;a href=&quot;https://feeds.twit.tv/aaa.xml&quot; class=&quot;bare&quot;&gt;https://feeds.twit.tv/aaa.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All Songs Considered &lt;a href=&quot;https://feeds.npr.org/510019/podcast.xml?uid=n1qe4e85742c986fdb81d2d38ffa0d5d53&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/510019/podcast.xml?uid=n1qe4e85742c986fdb81d2d38ffa0d5d53&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Allusionist &lt;a href=&quot;https://www.omnycontent.com/d/playlist/3aeeb75f-3358-42d4-8232-acad017ea3bd/dac5a742-0a1b-4f4b-b917-acb7015564f7/e7e10a67-651c-4ddf-9c47-acb70155651d/podcast.rss&quot; class=&quot;bare&quot;&gt;https://www.omnycontent.com/d/playlist/3aeeb75f-3358-42d4-8232-acad017ea3bd/dac5a742-0a1b-4f4b-b917-acb7015564f7/e7e10a67-651c-4ddf-9c47-acb70155651d/podcast.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android Central Podcast &lt;a href=&quot;https://androidcentral.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;https://androidcentral.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Arrested DevOps &lt;a href=&quot;https://www.arresteddevops.com/episode/index.xml&quot; class=&quot;bare&quot;&gt;https://www.arresteddevops.com/episode/index.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At Liberty &lt;a href=&quot;https://feeds.soundcloud.com/users/soundcloud:users:40330678/sounds.rss&quot; class=&quot;bare&quot;&gt;https://feeds.soundcloud.com/users/soundcloud:users:40330678/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Back to Work &lt;a href=&quot;https://feeds.fireside.fm/backtowork/rss&quot; class=&quot;bare&quot;&gt;https://feeds.fireside.fm/backtowork/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Best of Car Talk &lt;a href=&quot;https://feeds.npr.org/510208/podcast.xml&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/510208/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Candid Frame: Conversations on Photography &lt;a href=&quot;https://thecandidframe.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;https://thecandidframe.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CaSE: Conversations about Software Engineering &lt;a href=&quot;https://www.case-podcast.org/feed/aac&quot; class=&quot;bare&quot;&gt;https://www.case-podcast.org/feed/aac&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Changelog: Software Development, Open Source &lt;a href=&quot;https://changelog.com/podcast/feed&quot; class=&quot;bare&quot;&gt;https://changelog.com/podcast/feed&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ClojureStream Podcast &lt;a href=&quot;https://feeds.soundcloud.com/users/soundcloud:users:627190089/sounds.rss&quot; class=&quot;bare&quot;&gt;https://feeds.soundcloud.com/users/soundcloud:users:627190089/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cognicast &lt;a href=&quot;https://feeds.feedburner.com/cognicast&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/cognicast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Daily &lt;a href=&quot;https://feeds.simplecast.com/54nAGcIl&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/54nAGcIl&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Darknet Diaries &lt;a href=&quot;https://feeds.megaphone.fm/darknetdiaries&quot; class=&quot;bare&quot;&gt;https://feeds.megaphone.fm/darknetdiaries&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;defn &lt;a href=&quot;https://feeds.soundcloud.com/users/soundcloud:users:220484243/sounds.rss&quot; class=&quot;bare&quot;&gt;https://feeds.soundcloud.com/users/soundcloud:users:220484243/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Distractible &lt;a href=&quot;https://feeds.megaphone.fm/QCD8163454930&quot; class=&quot;bare&quot;&gt;https://feeds.megaphone.fm/QCD8163454930&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do By Friday &lt;a href=&quot;https://feeds.simplecast.com/5nKJV82u&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/5nKJV82u&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do By Friday After Show (Private Link)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;#8217;t Ask Tig &lt;a href=&quot;https://feeds.publicradio.org/public_feeds/dont-ask-tig/itunes/rss.rss&quot; class=&quot;bare&quot;&gt;https://feeds.publicradio.org/public_feeds/dont-ask-tig/itunes/rss.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Engineering Culture by InfoQ &lt;a href=&quot;https://feeds.soundcloud.com/users/soundcloud:users:258266127/sounds.rss&quot; class=&quot;bare&quot;&gt;https://feeds.soundcloud.com/users/soundcloud:users:258266127/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Escape Pod &lt;a href=&quot;https://escapepod.org/feed/podcast/&quot; class=&quot;bare&quot;&gt;https://escapepod.org/feed/podcast/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Everything is Alive &lt;a href=&quot;http://feeds.everythingisalive.com/everythingisalive&quot; class=&quot;bare&quot;&gt;http://feeds.everythingisalive.com/everythingisalive&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FLOSS Weekly (Audio) &lt;a href=&quot;https://feeds.twit.tv/floss.xml&quot; class=&quot;bare&quot;&gt;https://feeds.twit.tv/floss.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Fox News Rundown &lt;a href=&quot;https://feeds.megaphone.fm/FOXM1880458659&quot; class=&quot;bare&quot;&gt;https://feeds.megaphone.fm/FOXM1880458659&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Freakonomics Radio &lt;a href=&quot;https://feeds.simplecast.com/Y8lFbOT4&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/Y8lFbOT4&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Functional Geekery &lt;a href=&quot;https://www.functionalgeekery.com/feed/mp3/&quot; class=&quot;bare&quot;&gt;https://www.functionalgeekery.com/feed/mp3/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Global News Podcast &lt;a href=&quot;https://podcasts.files.bbci.co.uk/p02nq0gn.rss&quot; class=&quot;bare&quot;&gt;https://podcasts.files.bbci.co.uk/p02nq0gn.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grammar Girl Quick and Dirty Tips for Better Writing &lt;a href=&quot;https://feeds.simplecast.com/XcH2p3Ah&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/XcH2p3Ah&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Groovy Podcast &lt;a href=&quot;http://groovypodcast.podbean.com/feed/&quot; class=&quot;bare&quot;&gt;http://groovypodcast.podbean.com/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hacker Public Radio &lt;a href=&quot;http://hackerpublicradio.org/hpr_rss.php&quot; class=&quot;bare&quot;&gt;http://hackerpublicradio.org/hpr_rss.php&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hanselminutes with Scott Hanselman &lt;a href=&quot;https://feeds.simplecast.com/gvtxUiIf&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/gvtxUiIf&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hidden Brain &lt;a href=&quot;https://feeds.simplecast.com/kwWc0lhf&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/kwWc0lhf&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How I Built This with Guy Raz &lt;a href=&quot;https://rss.art19.com/how-i-built-this&quot; class=&quot;bare&quot;&gt;https://rss.art19.com/how-i-built-this&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Interview Podcast – Echoes &lt;a href=&quot;https://echoes.org/category/program-highlights/interviews/feed/&quot; class=&quot;bare&quot;&gt;https://echoes.org/category/program-highlights/interviews/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jeffery Saddoris: Everything &lt;a href=&quot;https://pcr.apple.com/id1438550795/&quot; class=&quot;bare&quot;&gt;https://pcr.apple.com/id1438550795/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JS Party: JavaScript, CSS, Web Development &lt;a href=&quot;https://changelog.com/jsparty/feed&quot; class=&quot;bare&quot;&gt;https://changelog.com/jsparty/feed&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JUXT Cast &lt;a href=&quot;https://feeds.feedburner.com/JuxtCast&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/JuxtCast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LensWork - Photography and the Creative Process &lt;a href=&quot;https://www.lenswork.com/podcast.xml&quot; class=&quot;bare&quot;&gt;https://www.lenswork.com/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Life Kit &lt;a href=&quot;https://feeds.npr.org/510338/podcast.xml&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/510338/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linux Inlaws &lt;a href=&quot;https://linuxinlaws.eu/inlaws_rss.xml&quot; class=&quot;bare&quot;&gt;https://linuxinlaws.eu/inlaws_rss.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lost in Lambduhhs &lt;a href=&quot;https://anchor.fm/s/581d4eb4/podcast/rss&quot; class=&quot;bare&quot;&gt;https://anchor.fm/s/581d4eb4/podcast/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Marketplace All-in-One &lt;a href=&quot;https://www.marketplace.org/feed/podcast/marketplace-all-in-one&quot; class=&quot;bare&quot;&gt;https://www.marketplace.org/feed/podcast/marketplace-all-in-one&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Mortified Podcast &lt;a href=&quot;https://feeds.feedburner.com/MortifiedPod&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/MortifiedPod&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Moth &lt;a href=&quot;https://feeds.feedburner.com/themothpodcast&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/themothpodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No Stupid Questions &lt;a href=&quot;https://feeds.simplecast.com/dfh_verV&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/dfh_verV&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NPR News Now &lt;a href=&quot;https://feeds.npr.org/500005/podcast.xml&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/500005/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Oh No, Ross and Carrie &lt;a href=&quot;https://feeds.simplecast.com/ftB6Gihc&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/ftB6Gihc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the Media &lt;a href=&quot;https://feeds.feedburner.com/onthemedia&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/onthemedia&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;People I (Mostly) Admire &lt;a href=&quot;https://feeds.simplecast.com/rP60Wf24&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/rP60Wf24&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Podcast – Cory Doctorow&amp;#8217;s craphound.com &lt;a href=&quot;https://feeds.feedburner.com/doctorow_podcast&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/doctorow_podcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Radiolab &lt;a href=&quot;https://feeds.feedburner.com/radiolab&quot; class=&quot;bare&quot;&gt;https://feeds.feedburner.com/radiolab&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The REPL &lt;a href=&quot;https://feeds.therepl.net/therepl&quot; class=&quot;bare&quot;&gt;https://feeds.therepl.net/therepl&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Security Now (Audio) &lt;a href=&quot;https://feeds.twit.tv/sn.xml&quot; class=&quot;bare&quot;&gt;https://feeds.twit.tv/sn.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Smart Talk &lt;a href=&quot;https://www.omnycontent.com/d/playlist/8ab739a0-6a10-4a67-91ee-ae28012e7b58/bd71d66d-21d6-4722-a411-ae28012ec33b/5e808417-5028-4a70-862f-ae28012ec34e/podcast.rss&quot; class=&quot;bare&quot;&gt;https://www.omnycontent.com/d/playlist/8ab739a0-6a10-4a67-91ee-ae28012e7b58/bd71d66d-21d6-4722-a411-ae28012ec33b/5e808417-5028-4a70-862f-ae28012ec34e/podcast.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Smashing Podcast &lt;a href=&quot;https://feeds.transistor.fm/smashing&quot; class=&quot;bare&quot;&gt;https://feeds.transistor.fm/smashing&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Software Defined Talk &lt;a href=&quot;https://www.softwaredefinedtalk.com/rss&quot; class=&quot;bare&quot;&gt;https://www.softwaredefinedtalk.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Software Engineering Radio - the podcast for professional software developers &lt;a href=&quot;https://seradio.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;https://seradio.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Song Exploder &lt;a href=&quot;https://feed.songexploder.net/SongExploder&quot; class=&quot;bare&quot;&gt;https://feed.songexploder.net/SongExploder&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Stack Overflow Podcast &lt;a href=&quot;https://feeds.simplecast.com/XA_851k3&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/XA_851k3&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TED Radio Hour &lt;a href=&quot;https://feeds.npr.org/510298/podcast.xml&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/510298/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This American Life &lt;a href=&quot;https://www.thisamericanlife.org/podcast/rss.xml&quot; class=&quot;bare&quot;&gt;https://www.thisamericanlife.org/podcast/rss.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This Week in Tech (Audio) &lt;a href=&quot;https://feeds.twit.tv/twit.xml&quot; class=&quot;bare&quot;&gt;https://feeds.twit.tv/twit.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Thoughtworks Technology Podcast &lt;a href=&quot;https://thoughtworks.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;https://thoughtworks.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Up First &lt;a href=&quot;https://feeds.npr.org/510318/podcast.xml&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/510318/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait Wait&amp;#8230;&amp;#8203; Don&amp;#8217;t Tell Me! &lt;a href=&quot;https://feeds.npr.org/344098539/podcast.xml&quot; class=&quot;bare&quot;&gt;https://feeds.npr.org/344098539/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Welcome to Night Vale &lt;a href=&quot;http://feeds.nightvalepresents.com/welcometonightvalepodcast&quot; class=&quot;bare&quot;&gt;http://feeds.nightvalepresents.com/welcometonightvalepodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What&amp;#8217;s Your Problem? &lt;a href=&quot;https://www.omnycontent.com/d/playlist/e73c998e-6e60-432f-8610-ae210140c5b1/32c25e85-1667-4acb-99fd-ae3c0021f33e/beacef48-19d2-4f52-b9e8-ae3c0021f347/podcast.rss&quot; class=&quot;bare&quot;&gt;https://www.omnycontent.com/d/playlist/e73c998e-6e60-432f-8610-ae210140c5b1/32c25e85-1667-4acb-99fd-ae3c0021f33e/beacef48-19d2-4f52-b9e8-ae3c0021f347/podcast.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wicked Good Development &lt;a href=&quot;https://anchor.fm/s/81a22db8/podcast/rss&quot; class=&quot;bare&quot;&gt;https://anchor.fm/s/81a22db8/podcast/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wrong About Everything &lt;a href=&quot;https://wrongabouteverything.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;https://wrongabouteverything.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WTF with Marc Maron Podcast &lt;a href=&quot;https://feeds.acast.com/public/shows/62a222737c02140013aa4c03&quot; class=&quot;bare&quot;&gt;https://feeds.acast.com/public/shows/62a222737c02140013aa4c03&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You Are Not So Smart &lt;a href=&quot;https://feeds.simplecast.com/N5eKDxJI&quot; class=&quot;bare&quot;&gt;https://feeds.simplecast.com/N5eKDxJI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                My COVID Timeline
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/My_COVID_Timeline.html
            </link>
            <pubDate>Sat, 24 Sep 2022 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/My_COVID_Timeline.html
            </guid>
            <description>
                &lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;2022-08-03 Wednesday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Saw Ani Difranco at XL Live in Harrisburg&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Didn&amp;#8217;t think I stood so close to people, but no mask.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show was great.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Helped a stumbly drunk guy find a seat, so he could stop bumping into people&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-04 Thursday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Had a work day&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ran ben around to sports practice&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Helped with fixing the well pump at parents&apos;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Got home at 12:30am or so&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-05 Friday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Woke with a sore throat and stuffy, not a big deal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Took a Covid test in the afternoon - negative&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Went to Penn Cinema drive-in to see Goonies&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Marie and Emily in the car&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Doug, Sarah, Fizz, and Sarah in other cars&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rained and cut short&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Took Marie home&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-06 Saturday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Woke with sore throat and whole-body soreness&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Covid test again at emily&amp;#8217;s suggestion: positive&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Notified kids, movie friends, and parents&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tried online appointment, but no one available but receptionist&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ran to Penn State Health walk-in clinic, got Paxlovid RX&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sat around all night watching Love, Death + Robots&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-07 Sunday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Noon: Emily picks up Paxlovid and groceries and drops them off&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paxlovid day 1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Watched lots of Love, Death + Robots&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-08 Monday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sore throat&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stuffiness&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Aches&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paxlovid day 2&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-09 Tuesday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Terrible sore throat&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start trying throat spray&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stuffiness&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2 Ibuprofen every 4-6 hrs seems to manage throat pain&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paxlovid day 3&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-10 Wednesday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Terrible sore throat. Is this Strep?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Call nurse line at doc: this is fine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paxlovid day 4&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-11 Thursday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Slept fine!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Throat not bad!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bad taste in mouth sometimes for past couple days: like bitter, old tea&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Gargled full-strength white vinegar. emily then informed me it should
be dilluted.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paxlovid day 5, last day&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Last dose, then went to bed pretty early: tired and cranky&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-12 Friday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Slept well&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Feeling fine&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tested (slightly) positive today&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Test expires today, so i&amp;#8217;ll use them all over the next couple days&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-13 Saturday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Listening to &quot;attack surface&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finished 30 Days Lost in Space Arduino kit&amp;#8201;&amp;#8212;&amp;#8201;pretty cool&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tested negative at 7pm or so.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-14 Sunday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Finished &quot;Attack Surface&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finished Love Death + Robots&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tested negative again at 11am&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2022-08-15 Monday&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Worked normally&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;First bike ride in over 2 weeks: 28 miles on Northwest River Trail&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Podcast Addict
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/Podcast_Addict.html
            </link>
            <pubDate>Wed, 24 Aug 2022 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/Podcast_Addict.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve used
&lt;a href=&quot;https://play.google.com/store/apps/details?id=mobi.beyondpod&amp;amp;hl=en_US&amp;amp;gl=US&quot;&gt;BeyondPod&lt;/a&gt;
for over 10 years,
since my first Android phone,
to download, organize, and play podcasts.
For at least the past 4 years,
maintenance and updates
to the application
have slowed to a crawl.
I had paid a one-time fee
for the application,
so I guess I couldn&amp;#8217;t
think they owed me updates forever.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I would try to find a replacement
every once in a while,
but the other podcatchers
always lacked some feature
upon which I relied.
Even
&lt;a href=&quot;https://podcastaddict.com/&quot;&gt;Podcast Addict&lt;/a&gt;
fell short
the last time I tried it
about 4 years ago,
but it&amp;#8217;s been getting lots of updates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_beyondpod_the_good_parts_that_kept_me_coming_back&quot;&gt;BeyondPod: The Good Parts That Kept Me Coming Back&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SmartPlay allowed me to organize my 74 podcast feeds
into 3 or 4 tiers.
This allowed me
to ensure the quick, timely podcasts
were played first
before the longer podcasts that could wait
for days or weeks.
I even managed to create one tier
that played chronologically,
which is opposite of all my other podcasts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For each podcast,
I could boost the volume,
adjust speed,
and have it only keep
the latest so many episodes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It had a button to skip the rest
of a podcast to quickly get to the next one.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_downsides_of_beyondpod&quot;&gt;Downsides of BeyondPod&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It liked to just stop playing
and crash occasionally.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It was increasingly abandoned and unmaintained,
so I didn&amp;#8217;t trust it would continue
to work when Android 13 hit my phone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I could export my OPML file,
but it went to a private filesystem
that can no longer be accessed by file managers
in newer versions of Android.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;BeyondPod never updated to use the standard media controls
and kept its old notification-based player.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There was a race-condition bug when skipping forward
through the end of an episode:
it would skip way into the next episode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The catalog of podcasts
has stopped working,
so I could only add podcasts
by URL,
which is fine, but less convenient.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_enter_podcast_addict&quot;&gt;Enter Podcast Addict&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Podcast Addict can play at even faster speeds,
though I&amp;#8217;ve not taken advantage
of these speeds:
I&amp;#8217;m still listening at 2-3x speeds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For each podcast feed,
I can set custom volume boost, speed,
and auto cleanup by age or count of episodes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When an episode is finished,
it automatically
moves it to a Recycle Bin
or 24 hours,
so I can go find it again
if I want to refer to it again,
or completed it by accident.
In BeyondPod,
I had to &quot;delete played&quot;
occasionally for myself
to give myself time
to review and recover what&amp;#8217;s been played.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I can assign a numeric priority
to the podcasts and sort by it,
so I can easily ensure my favorite podcasts
play before others when they&amp;#8217;re available
just like BeyondPod&amp;#8217;s SmartPlay,
but even more conveniently.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&quot;Smart Priorities&quot; automatically increments
a podcasts priority
when I manually click an episode to play before others.
In practice, this moved things around more than I wanted,
so I disabled it and fine-tuned the priorities by hand
as I saw them slightly out of order.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I can see artwork for each episode.
I didn&amp;#8217;t even know there was per-episode artwork.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I also never knew chapters were a thing in podcasts.
Now I can see chapters for the couple podcasts that provide them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Skip silence works well,
but it&amp;#8217;s super-weird
for story podcasts,
since it eliminates
all hints of &lt;em&gt;punctation&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;These latest features are working really well,
so I&amp;#8217;m excited everytime I get to see the software in action.
I expect to see even more features
showing up in the frequent releases of Podcast Addict.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There&amp;#8217;s a
&lt;a href=&quot;https://podcastaddict.com/getting_started&quot;&gt;Getting Started&lt;/a&gt;
guide which intuitively
walked me
through the things
I&amp;#8217;d likely want to configure,
and I immediately recognized
all the features I wanted.
I was confident Podcast Addict
would work for me,
so I set it up completely,
and signed up to pay the annual subscription fee
to help make sure they keep updating it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I made the transition,
and I love Podcast Addict.
Listening to podcasts
is easily my #1 pastime,
so it&amp;#8217;s important
that I found the perfect software.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_updates&quot;&gt;Updates&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;2022-09-23: &lt;strong&gt;Player&amp;#8594;Settings&amp;#8594;Controls&amp;#8594;Skip Outro=95%&lt;/strong&gt;
let&amp;#8217;s me hit the forward skip button
in the last 5% of a podcast
and finishes the whole episode
instead of skipping only 20 seconds
as it usually would.
This saves a couple taps
to get past the last bit of credits or closing music.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                WiFi Drops Again
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/WiFi_Drops_Again.html
            </link>
            <pubDate>Tue, 26 Apr 2022 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/WiFi_Drops_Again.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had previously
&lt;a href=&quot;/blog//2021/Wireless_Drops_on_Pop_OS_20.10_and_Later.html&quot;&gt;flailed around&lt;/a&gt;
trying to fix occasional WiFi drops
on my Pop_OS(Ubuntu) laptop.
The intermittency made it hard
to know if I really fixed it or not,
and it turns out I hadn&amp;#8217;t.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I installed Arch Linux
on another computer
here on my desk.
While it sat around idle,
I found it one day
having lost its internet connection
just like the Pop_OS machine does!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now I knew this problem
with the network connection
wasn&amp;#8217;t isolated to one machine.
To recap:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the wired connection is fine&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the Mac on the wireless network is fine&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the mobile devices are fine&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the 2 linux machines drop their connections every couple days&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I started the search again
for a solution with more information.
I found some hints
about
&lt;a href=&quot;https://askubuntu.com/questions/695867/disable-wifi-power-management&quot;&gt;
power-saving options in NetworkManager&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On the Pop_OS machine,
there&amp;#8217;s a configuration file,
&lt;code&gt;/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf&lt;/code&gt;,
that I changed to &lt;em&gt;disable&lt;/em&gt; powersaving:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;[connection]
# 0: default, 1: leave untouched, 2: disable, 3: enable
wifi.powersave = 2&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had to add a file
to the Arch machine
in the same location
to hold this configuration.
Now these machines have been maintaining
their connections for days.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Design First, Measure Second
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/Design_First_Measure_Second.html
            </link>
            <pubDate>Fri, 11 Mar 2022 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/Design_First_Measure_Second.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/objects/&quot;&gt;My objects repository&lt;/a&gt;
is full of
&lt;a href=&quot;https://openscad.org/&quot;&gt;OpenSCAD&lt;/a&gt;
code.
At the top
of each file
you&amp;#8217;ll find a collection
of variables
in the code:
the measurements
of the model.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We don&amp;#8217;t need
to get bogged down
with those exact values
to start modeling,
but we know
that we&amp;#8217;ll want
to identify
certain parameters
to size our models.
We can start banging
together some shapes
(with &lt;code&gt;union&lt;/code&gt; and &lt;code&gt;difference&lt;/code&gt;),
and any time
we&amp;#8217;re tempted to guess
at a measurement
and plug it into the code,
we want to first see
if we can give it a name
(a variable name, that is)
and use that instead
and define a rough value
for that variable at the top of the file.
Next we can think
about that value
and decide if it&amp;#8217;s related
to any other values
we already have.
Often,
one value should
be calculated
relative to other values:
&lt;code&gt;overall_width = inside_width + 2 * side_thickness&lt;/code&gt;.
Once a measurement
is defined
in terms of other values
it&amp;#8217;ll automatically update
as we start providing
more precise measurements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;By starting
with some guessed values
and later
plugging in real measurements,
we prove
that our
&lt;em&gt;parametric model&lt;/em&gt;
is being correctly calculated
from the measurements.
We should be able
to use this code
time and time again
to generate variations
on the model
based on new measurements.
Our SCAD model
with all the parameters
at the top
is ready
to upload
to &lt;a href=&quot;https://www.thingiverse.com/&quot;&gt;Thingiverse&lt;/a&gt;
and the &lt;a href=&quot;https://www.thingiverse.com/app:22&quot;&gt;Customizer&lt;/a&gt;
can let users easily
provide their own measurements
to generate new models
from our code.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                CX to Gravel
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/CX_to_Gravel.html
            </link>
            <pubDate>Fri, 25 Feb 2022 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/CX_to_Gravel.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;span class=&quot;image right&quot;&gt;&lt;img src=&quot;/blog/images/2022/redline_bike.jpg&quot; alt=&quot;2015 Redline Conquest Elite&quot; width=&quot;400&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I bought my first &lt;em&gt;new&lt;/em&gt; bicycle
in December of 2020.
I had been using
my previous bike
much more through 2020,
so I figured I had proven
I&amp;#8217;d use an upgraded bike.
Ben and I
had been aggressively researching
gravel bikes for a while,
but any bike had
been hard to find
in stock.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We found a used cyclocross bike,
the &lt;a href=&quot;https://99spokes.com/bikes/redline/2015/conquest-elite&quot;&gt;Redline Conquest Elite&lt;/a&gt;,
that looked enough like a gravel bike.
It luckily was a good size
for me, a small.
The drop handlebars
were exciting and different for me.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Over the year I&amp;#8217;ve had the bike,
I&amp;#8217;ve added lots of parts
and swapped others.
I made the carbon fiber bike heavier
but it met my needs
and made it look more
like a gravel bike:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I replaced the stem
to shorten it a bit.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I switched to a suspension seat post.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I added a top-tube bag,
a tool bag behind the saddle,
a phone mount,
a bright headlight,
and a clamp-on rack in the back.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It came with 35mm CX tires,
so I purchased other gravel tires
from Vittoria in the same size.
The new tires were smoother,
but clearance seemed a bit tighter.
I&amp;#8217;ve very recently swapped
to a narrower 31mm rear tire
to have better
clearance for mud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The original groupset
on my bike was built
for a stronger road rider:
36T/46T chain rings
paired with an 11-28 cassette.
I needed a little more help climbing,
but I liked the speed
of the faster gears.
I first replaced the 36T ring
with a 34T,
and then I found
an 11-34 cassette.
This goes about as slow
as I need to go up a hill,
but retains those high,
fast gears
for me.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I know the bike&amp;#8217;s not really
a gravel bike,
but I think I have myself convinced
enough that it&amp;#8217;ll work for me,
and I don&amp;#8217;t need to shop
for the next bike.
I&amp;#8217;ve already ridden
over 200 miles
in the first 2 months of this year
and 1100+ miles in 2021.
I&amp;#8217;m feeling pretty strong
with this current configuration.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Google Can&apos;t Reach SmartThings
            </title>
            <link>
                https://www.hjsoft.com/blog/2022/Google_Cant_Reach_SmartThings.html
            </link>
            <pubDate>Fri, 28 Jan 2022 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2022/Google_Cant_Reach_SmartThings.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My Google Assistant on my phone
has been refusing to turn on and off
the 2 devices I have on smart plugs:
&quot;Can&amp;#8217;t reach SmartThings.&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I found an article
about the
&lt;a href=&quot;https://community.smartthings.com/t/google-home-error-sorry-i-couldnt-reach-smartthings/192814/10&quot;&gt;Google Home doing the same thing&lt;/a&gt;.
Fortunately,
the advice there worked:
go into Assistant&amp;#8217;s settings
&amp;#8594; Devices
&amp;#8594; Add Devices.
Upon clicking on the SmartThings entry
that was already there,
it gave me the option to re-link.
Once I authorized access,
I could again ask Google
to control those devices.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Wireless Drops on Pop OS 20.10 and Later
            </title>
            <link>
                https://www.hjsoft.com/blog/2021/Wireless_Drops_on_Pop_OS_20.10_and_Later.html
            </link>
            <pubDate>Mon, 12 Jul 2021 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2021/Wireless_Drops_on_Pop_OS_20.10_and_Later.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Upon the release
of Pop OS 20.10,
my &lt;a href=&quot;https://system76.com/&quot;&gt;System76&lt;/a&gt; laptop
and my Arris router
started having some disagreements.
The laptop would drop connection
every couple hours
and not reconnect itself.
I&amp;#8217;d see the little question mark
in the WIFI indicator,
and I needed to manually turn WIFI
off and back on
to restore the connection.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I found mentions of this behavior
in Ubuntu and in Pop OS forums,
and supposedly newer NetworkManager
from Gnome would fix it,
so I suffered and waited
for the beta of Pop OS 21.04
to be available.
That didn&amp;#8217;t fix it,
so I started digging around some more
in System76&amp;#8217;s page for
&lt;a href=&quot;https://support.system76.com/articles/wireless&quot;&gt;Troubleshooting Wireless&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I picked my way through the tips
and applied some of them.
Disabling &lt;strong&gt;band steering&lt;/strong&gt;
in the router
finally seems to have fixed the problem.
I&amp;#8217;ve kept my WIFI connection up and running
for days now.
I didn&amp;#8217;t need to name
the 5GHz and 2.4GHz networks differently.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                No Suspend on Desktop Server
            </title>
            <link>
                https://www.hjsoft.com/blog/2021/No_Suspend_on_Desktop_Server.html
            </link>
            <pubDate>Mon, 19 Apr 2021 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2021/No_Suspend_on_Desktop_Server.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have a desktop server
running Debian Unstable
in the house,
and I occasionally reboot it
without logging
back into the local desktop session.
If I don&amp;#8217;t login,
I&amp;#8217;d later find the machine mysteriously inaccessible&amp;#8201;&amp;#8212;&amp;#8201;asleep.
It&amp;#8217;s set to never sleep,
but that&amp;#8217;s when I&amp;#8217;m logged in.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To disable sleep in the GDM3 Greeter,
I edited the &lt;code&gt;/etc/gdm3/greeter.dconf-defaults&lt;/code&gt;,
found the &quot;Automatic suspend&quot;/&lt;code&gt;[org/gnome/settings-daemon/plugins/power]&lt;/code&gt;
section and followed the comments to add:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;sleep-inactive-ac-timeout=0&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now the machine
will act a little more
like it&amp;#8217;s a server.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                It&apos;s the 12-Volt
            </title>
            <link>
                https://www.hjsoft.com/blog/2021/Its_the_12Volt.html
            </link>
            <pubDate>Mon, 22 Feb 2021 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2021/Its_the_12Volt.html
            </guid>
            <description>
                &lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_the_symptoms&quot;&gt;The Symptoms&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;span class=&quot;image right&quot;&gt;&lt;img src=&quot;/blog/images/2021/its_the_12v.jpg&quot; alt=&quot;It&amp;#8217;s the 12 volt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the &lt;a href=&quot;https://www.facebook.com/groups/BMWi3&quot;&gt;BMW i3 Worldwide Group&lt;/a&gt;
on Facebook,
there are a few recurring jokes,
and one of the most popular
is the 12-volt battery causing
every little weird issue.
One could wonder
why it has a 12-volt battery at all,
since the 400-some-volt battery
should be able to power the accessories.
Additionally,
BMW cars have a complicated charging system
that requires registration
when the battery is replaced,
so it&amp;#8217;s easy to understand why one might put off dealing with it.
The dealers can charge crazy amounts of money
for replacement.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;My 2014 i3 has an occasional
annoyance I attribute possibly
to that little 12-volt battery:
sometimes forgetting its presets
and bluetooth pairing.
The more obvious warning
is that the battery has discharged while sitting,
and while it&amp;#8217;s not clear on the screen,
it means the 12-volt battery.
Mine did it for a couple cold days,
so I figured I was due to replace the battery,
but the warning stopped,
so I thought I might have had some more time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Over the weekend,
I got to see the spectacular (and expected) failure
of the car due to the 12-volt battery going very low.
I opened the back hatch,
stowed all my worldly possessions
in the back,
closed it,
and then the alarm started whistling,
and I could not get anything unlocked
or stopped
by the key fob.
The alarm stopped
on its own,
but I still couldn&amp;#8217;t get into the car,
and I could see the taillights
lowly blinking,
so it seemed to be the dreaded 12-volt battery.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The alarm went again
and later the horn while I worked.
Nothing inside the car would respond either.
This was the failure
about which the group warned:
it can&amp;#8217;t do anything, and you&amp;#8217;ll need it dragged
onto a rollback!
The car charges the 12-volt battery when running,
but without the 12-volt battery,
the car can&amp;#8217;t get any
of its smarts going to even power up the car.
They&amp;#8217;ve managed to engineer a problem
of old cars into the new.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_the_familiar_fix&quot;&gt;The Familiar Fix&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned to pry off the cover
to use the mechanical key
and to manually pop the hood.
I figured I may as well try
to get it power
with one of those Lithium Ion
jump-starter packs I had on hand.
(I carry it in the car,
so I can still be helpful when others need a start.)
I pulled the velcro covers
and removed the allen and star screws
from the bin and removed the bin,
so I could &lt;em&gt;mostly&lt;/em&gt; get to the battery.
I could just barely fit the little
battery clamps in place
on the battery terminals.
I turned on the battery pack,
the car clicked,
and everything came back to life.
I knew I couldn&amp;#8217;t drive with that battery pack there,
so I let it charge for 10-15 minutes,
turned it off,
and found the car still functioned,
so I removed the battery pack,
and hit the road
to drop the car
at my local independent shop
to have the battery replaced.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A jump-starter &lt;em&gt;did&lt;/em&gt; turn out to be useful
with the i3,
and it saved me a tow for a problem
that shouldn&amp;#8217;t be so catastrophic.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Java Joyless
            </title>
            <link>
                https://www.hjsoft.com/blog/2021/Java_Joyless.html
            </link>
            <pubDate>Wed, 27 Jan 2021 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2021/Java_Joyless.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Mr Haki has a
&lt;a href=&quot;https://blog.mrhaki.com/2021/01/java-joy-transform-stream-of-strings-to.html&quot;&gt;Java Joy article&lt;/a&gt;
about transforming a stream of strings
into a map using functional Java.
I&amp;#8217;m having a bit of trouble
embracing it enthusiastically,
since each example is 81 lines
of Java code
and a pointy pile
of type declarations!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I dashed out the same functionality
in 4 lines of Clojure,
and I can understand it
a whole lot easier.
I&amp;#8217;m not even sure this is the fewest forms,
but it&amp;#8217;s still nicer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;  (-&amp;gt;&amp;gt;
    [&quot;language&quot; &quot;clojure&quot; &quot;username&quot; &quot;john&quot;]
    (partition 2)
    (reduce (fn [m [k v]] (assoc m k v)) {}))
  ;; =&amp;gt; {&quot;language&quot; &quot;clojure&quot;, &quot;username&quot; &quot;john&quot;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Update 2021-04-14: It &lt;em&gt;can&lt;/em&gt; be done in one line of Clojure.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;  (apply hash-map [&quot;language&quot; &quot;clojure&quot; &quot;username&quot; &quot;john&quot;])
  ;; =&amp;gt; {&quot;language&quot; &quot;clojure&quot;, &quot;username&quot; &quot;john&quot;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Written with Clojure 1.10.2.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Fixes for Overtone and SuperCollider on PopOS 20.10
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Fixes_for_Overtone_and_SuperCollider_on_PopOS_20_10.html
            </link>
            <pubDate>Mon, 2 Nov 2020 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Fixes_for_Overtone_and_SuperCollider_on_PopOS_20_10.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I took the update to &lt;a href=&quot;https://pop.system76.com/&quot;&gt;PopOS 20.10&lt;/a&gt;,
and my &lt;a href=&quot;https://overtone.github.io/&quot;&gt;Overtone&lt;/a&gt; setup stopped working.
When I&amp;#8217;d try to boot up
the internal &lt;a href=&quot;https://supercollider.github.io/&quot;&gt;SuperCollider&lt;/a&gt; server
from Emacs or from the &lt;a href=&quot;https://leiningen.org/&quot;&gt;leiningen&lt;/a&gt; repl
on my &lt;a href=&quot;https://github.com/jflinchbaugh/music&quot;&gt;music projects&lt;/a&gt;
which all &lt;code&gt;(:require [overtone.live :refer :all])&lt;/code&gt;,
get an error in native libraries.
I could also try to start the server
with &lt;code&gt;(boot-internal-server)&lt;/code&gt; or &lt;code&gt;(boot-external-server)&lt;/code&gt;,
but it gives the same error.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;--&amp;gt; Booting internal SuperCollider server...
Cannot read socket fd = 107 err = Success
CheckRes error
Could not read result type = 22
Client name = Overtone conflits with another running client
Cannot connect to the server
JackShmReadWritePtr1::~JackShmReadWritePtr1 - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
could not initialize audio.
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f5eec0e9ba7, pid=30517, tid=30605
#
# JRE version: OpenJDK Runtime Environment AdoptOpenJDK (15.0.1+9) (build 15.0.1+9)
# Java VM: OpenJDK 64-Bit Server VM AdoptOpenJDK (15.0.1+9, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [libscsynth.so.1+0x63ba7]  World_WaitForQuit+0x7
#
# No core dump will be written. Core dumps have been disabled. To enable core dumping, try &quot;ulimit -c unlimited&quot; before starting Java again
#
# An error report file with more information is saved as:
# /home/john/workspace/music/hs_err_pid30517.log
--&amp;gt; Connecting to internal SuperCollider server...
[thread 30576 also had an error]
#
# If you would like to submit a bug report, please visit:
#   https://github.com/AdoptOpenJDK/openjdk-support/issues
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since it can no longer start the server internally
from within Overtone,
I start the server manually.
I wrapped a script around the start up,
so I can set the environment variables
for configuring &lt;code&gt;jack&lt;/code&gt;
and starting up the synth:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;#!/bin/sh

# automatically connect up jack ports
export SC_JACK_DEFAULT_INPUTS=&quot;system:capture_1,system:capture_2&quot;
export SC_JACK_DEFAULT_OUTPUTS=&quot;system:playback_1,system:playback_2&quot;

scsynth -u 57110&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To get Overtone going again,
I disabled the automatic boot
of the server within Overtone
by switching all the requires
in each file
from &lt;code&gt;overtone.live&lt;/code&gt; to &lt;code&gt;overtone.core&lt;/code&gt;,
and I connect
to that external server
from my REPL manually
with &lt;code&gt;(connect-external-server)&lt;/code&gt;
before doing anything else.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Finally,
Overtone was consistently
failing to find my MIDI keyboard.
When things were working
well enough a couple months ago,
it still had required
a little dance of killing off &lt;code&gt;jackd&lt;/code&gt;
and restarting Overtone,
since something had been
tying up the MIDI interface.
This workaround was no longer adequate,
since &lt;code&gt;scsynth&lt;/code&gt; and &lt;code&gt;jackd&lt;/code&gt;
needed to already be started.
I disabled MIDI connection in &lt;code&gt;jackd&lt;/code&gt;
by removing the &lt;code&gt;-Xseq&lt;/code&gt; option
from my &lt;code&gt;~/.jackdrc&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m back in business,
and it&amp;#8217;s probably more robust
with these manual steps now.
I think I&amp;#8217;m also seeing
some other odd little things working
with the external server
that didn&amp;#8217;t previously,
like using &lt;code&gt;(mouse-x)&lt;/code&gt;
for reading mouse positions into the synth values.
The built-in piano synth is also
working where it hadn&amp;#8217;t previously.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Update 2021-02-13:
I had lost the ability
to send desktop audio (pulseaudio)
through to the Jack Sink
with this setup,
so I figured out
to start &lt;code&gt;qjackctl&lt;/code&gt;
before my &lt;code&gt;supercollider.sh&lt;/code&gt;.
That gets the Jack Sink
available again to pulseaudio
and the desktop sound menu.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Escape with Spacemacs in Tmux
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Escape_with_Spacemacs_in_Tmux.html
            </link>
            <pubDate>Wed, 21 Oct 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Escape_with_Spacemacs_in_Tmux.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve occasionally
been using a SSH session
from my Pixel phones
for years to login
to my servers
and write Clojure code
in Emacs.
I&amp;#8217;d often run into an issue
where I find myself
having a weird time
switching between NORMAL and INSERT modes
when I&amp;#8217;d hit ESCAPE quickly
and try to move the cursor.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Googling my random problems
is a favorite pastime,
and I&amp;#8217;ve finally stumbled
upon an article about
&lt;a href=&quot;https://stackoverflow.com/questions/12312178/tmux-and-vim-escape-key-being-seen-as-and-having-long-delay/13843382#13843382&quot;&gt;tmux and vim escape key&lt;/a&gt;.
I learned
that it&amp;#8217;s probably been &lt;code&gt;tmux&lt;/code&gt;
sporadically eating my ESCAPE key,
so I&amp;#8217;ve tried disabling the built-in delay
by adding to my
&lt;a href=&quot;https://github.com/jflinchbaugh/rc/blob/master/tmux.conf&quot;&gt;&lt;code&gt;.tmux.conf&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;set -g -s escape-time 0&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Taxes
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Taxes.html
            </link>
            <pubDate>Mon, 28 Sep 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Taxes.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A recent New York Times article
exposes that
&lt;a href=&quot;https://www.nytimes.com/interactive/2020/09/27/us/donald-trump-taxes.html&quot;&gt;
Donald Trump paid no income taxes for 10 of 15 years
&lt;/a&gt;.
To some, that sounds like neglecting
a duty to the public
and the nation that makes so much possible for us.
To just as many,
that sounds like an ad
for the next big tax preparation service
they need to hire.
Read the article,
and you&amp;#8217;ll see it&amp;#8217;s
a complicated shell game
of write-offs, profits, losses, and fees
shuffled around from year to year,
even to past years
as tax laws changed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Will this change anyone&amp;#8217;s view of anything?&lt;/strong&gt;
No.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Do I benefit from public spending?&lt;/strong&gt;
Absolutely.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Do I pay for it in taxes?&lt;/strong&gt;
Of course.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Do I like the way some tax dollars are spent?&lt;/strong&gt;
No, so maybe I &lt;em&gt;should&lt;/em&gt; want to reduce it,
but really we need to fix the way it&amp;#8217;s spent.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;strong&gt;Do I take deductions I can find?&lt;/strong&gt;
Yes, I pay a tax professional
to tell me what to deduct
and how I can save money.
Why is this not simpler?
Why is it so hard to know what we really owe?
Why is there an entire industry
built around avoiding our responsibility to pay taxes?
Tax laws are changed and complicated
to sweeten the deal
for some lawmaker who&amp;#8217;s signing,
or in some cases,
the complication or loopholes
are often unintended consequences
that were supposed to help someone else in need.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ll not sing anthems or salute a flag,
but I&amp;#8217;ll pay taxes
and vote for people who spend the money
to provide more stability for people.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As the shells continue to shuffle
the margins will tighten,
so I really hope we get him
out of office
before his debts come due
and he&amp;#8217;s selling off our futures.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Templates and  Snippets in Emacs
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Templates_and_Snippets_in_Emacs.html
            </link>
            <pubDate>Sun, 30 Aug 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Templates_and_Snippets_in_Emacs.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was only trying to write that last article,
but it took me &lt;em&gt;days&lt;/em&gt; to finally do it.
I had so much work to do before I got there.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had come to appreciate &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt;
automatically inserting the boilerplate
namespace declarations in new Clojure files,
and I really thought I needed such convenience
for my blog posts written in &lt;a href=&quot;https://asciidoc.org/&quot;&gt;AsciiDoc&lt;/a&gt;
in &lt;a href=&quot;https://jbake.org/&quot;&gt;JBake&lt;/a&gt;.
I dove down a 20-tab-deep,
&lt;a href=&quot;https://www.hanselman.com/blog/YakShavingDefinedIllGetThatDoneAsSoonAsIShaveThisYak.aspx&quot;&gt;yak-shaving&lt;/a&gt; hole to get it done.
&lt;sup class=&quot;footnote&quot;&gt;[&lt;a id=&quot;_footnoteref_1&quot; class=&quot;footnote&quot; href=&quot;#_footnotedef_1&quot; title=&quot;View footnote.&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had to figure out the right search terms
and names for what Emacs was doing for me.
I finally found &lt;a href=&quot;https://melpa.org/#/yatemplate&quot;&gt;yatemplate&lt;/a&gt;
which seems similar to  &lt;a href=&quot;https://melpa.org/\#/yasnippet&quot;&gt;yasnippets&lt;/a&gt;.
&lt;a href=&quot;https://www.spacemacs.org/&quot;&gt;Spacemacs&lt;/a&gt;
has the &lt;a href=&quot;https://develop.spacemacs.org/layers/+completion/templates/README.html&quot;&gt;templates layer&lt;/a&gt;
for integrating yatemplate support,
so I added that layer and created a template
for my &lt;code&gt;adoc&lt;/code&gt; files in my &lt;code&gt;.emacs.d&lt;/code&gt; directory.
My simple case worked,
but I recognized
that I&amp;#8217;ll want that template
on all my machines,
so having a local copy of it
wouldn&amp;#8217;t cut it.
I needed a way to check-in and version more Emacs/Spacemacs files
than just my &lt;code&gt;~/.spacemacs&lt;/code&gt; files I was previously distributing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned yasnippets would default
to looking in &lt;code&gt;~/.spacemacs.d/&lt;/code&gt;
if the configuration was in there,
so I had to move my &lt;code&gt;~/.spacemacs&lt;/code&gt; file
over to &lt;code&gt;~/.spacemacs.d/init.el&lt;/code&gt;.
To have the templates layer source templates
from the &lt;code&gt;.spacemacs.d&lt;/code&gt; directory,
it required an extra bit of configuration
when introducing it to the &lt;code&gt;dotspacemacs-configuration-layers&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;  (templates :variables templates-private-directory &quot;~/.spacemacs.d/templates&quot;)&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At this point,
I could now commit
my &lt;a href=&quot;https://github.com/jflinchbaugh/rc/tree/master/spacemacs.d&quot;&gt;&lt;code&gt;.spacemacs.d&lt;/code&gt; directory&lt;/a&gt;
with the regular configuration file
&lt;em&gt;and&lt;/em&gt; the supporting templates and snippets.
All those files will be cloned
to all my workstations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was almost ready to write
that article,
but yasnippet and yatemplate
have this fancy templating language.
I&amp;#8217;m sure that can make
my article-creation even smarter!
I read a bit more
and found a couple cool &lt;code&gt;elisp&lt;/code&gt; functions
for automatically filling in the date
and building a title
from the file name.
With the final enhancements
to my &lt;a href=&quot;https://raw.githubusercontent.com/jflinchbaugh/rc/master/spacemacs.d/templates/00%3A.*.adoc&quot;&gt;&lt;code&gt;adoc&lt;/code&gt; template&lt;/a&gt;,
I could write the article,
if I could only remember
what I was trying to do
in the first place.
I hope to at least remember
how to use these snippets and templates
for future work.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;div class=&quot;footnote&quot; id=&quot;_footnotedef_1&quot;&gt;
&lt;a href=&quot;#_footnoteref_1&quot;&gt;1&lt;/a&gt;. I often measure task complexity in the number of tabs I end up having opened.
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Listening to Music
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Listening_to_Music.html
            </link>
            <pubDate>Sun, 30 Aug 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Listening_to_Music.html
            </guid>
            <description>
                &lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_my_music_library&quot;&gt;My Music Library&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have a good bit
of music I had acquired and ripped
in the late 90s
and had purchased from Amazon later.
That all lives in a directory
on my big computer.
I never play anything from there,
and it just sits there for
safe keeping.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I continued to purchase
DRM-free MP3 files
from &lt;a href=&quot;https://music.amazon.com/&quot;&gt;Amazon Music&lt;/a&gt;,
and I eventually embraced their &quot;free&quot; streaming
with Amazon Prime.
I could add available
music to my collection for free,
and then stream it
along with the stuff I bought,
so it&amp;#8217;s nice and blended.
This allowed me to easily
toss a new album or artist
into rotation,
and if I really want,
I might purchase it to keep.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Prime streaming service
had some limitations
with some music I wanted
to sample being unavailable,
and sometimes, I&amp;#8217;d notice
some of the free music
disappeared from my collection.
I decided to pay the little bit
for the Unlimited Music plan,
and that made almost everything available.
I notice very few cases
of music becoming unavailable,
so now I don&amp;#8217;t bother buying
downloadable MP3s except in rare cases
where I want to be able to use a song
on another device outside the Amazon Music client.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_music_discovery&quot;&gt;Music Discovery&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I don&amp;#8217;t really use the stations at all
on Amazon Music.
I don&amp;#8217;t feel the need to hear large numbers
of new songs all the time,
so I have a smaller curated list
of podcasts and DJs
where I discover new music
to add to my collection at Amazon:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.npr.org/sections/allsongs/&quot;&gt;All Songs Considered&lt;/a&gt; at NPR Podcasts&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://echoes.org/&quot;&gt;Echoes&lt;/a&gt; Interview Podcast for chill ambient electronic music&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://songexploder.net/&quot;&gt;Song Exploder&lt;/a&gt; Podcast for extended discussion on the anatomy of a song&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.twitch.tv/daveghoul&quot;&gt;Shadowland&lt;/a&gt; the monthly Goth/Industrial party&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.twitch.tv/djneidermeyer&quot;&gt;DJ Neidermeyer&lt;/a&gt; for 80s and 90s Music I may have never known or had forgotten&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_alternatives&quot;&gt;Alternatives&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had uploaded all my music
to Google Play Music
years ago,
but there had always been
news of the service&amp;#8217;s
eventual demise.
It&amp;#8217;s finally migrated recently
over to &lt;a href=&quot;https://music.youtube.com/&quot;&gt;YouTube Music&lt;/a&gt;,
and they seem to have reintroduced
the ability to upload my own music.
I&amp;#8217;ve paid for &lt;a href=&quot;https://www.youtube.com/premium&quot;&gt;YouTube Premium&lt;/a&gt;,
so I have YouTube Music as well,
and this could be a nice alternative.
I have a few albums uploaded
there which I can&amp;#8217;t find on Amazon.
I don&amp;#8217;t think I can buy music there, though,
and I&amp;#8217;ve already purchased a good bit
of (DRM-free) music on Amazon.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                ADVi3++ 4
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/ADVi3pp_4.html
            </link>
            <pubDate>Wed, 26 Aug 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/ADVi3pp_4.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had a bit of downtime
with my
&lt;a href=&quot;https://www.monoprice.com/product?p_id=15711&quot;&gt;Monoprice Maker Select Plus&lt;/a&gt;
3D printer,
so I decided it was time
to upgrade the custom firmware,
&lt;a href=&quot;https://www.patreon.com/andrivet/posts&quot;&gt;ADVi3++&lt;/a&gt; 3.0.x,
to the newer 4.0.6.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve done the upgrade previously
to get the 3.x firmware in the first place,
so I knew I needed to upgrade in 2 steps:
the LCD via a microSD card
and the main board
via &lt;a href=&quot;https://ultimaker.com/software/ultimaker-cura&quot;&gt;Cura&lt;/a&gt;
over USB.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I dug through the manuals and directions a bit,
and decided I could copy the contents
of the raw zip
onto a formatted SD card
instead of writing the &lt;code&gt;img&lt;/code&gt; file
to the raw SD device with &lt;code&gt;dd&lt;/code&gt;.
That fit on a handy 2GiB card.
I took the couple screws out of the front panel,
inserted the micro SD card,
powered it up,
and watched the LCD display all the new images it was loading.
When it&amp;#8217;s done, I turned it off,
and replaced the screws.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Then I could easily connect the printer
to the Linux laptop via USB,
and upload the custom firmware &lt;code&gt;hex&lt;/code&gt; file
from Cura&amp;#8217;s Manage Printers screen.
I did need to take a moment
to add my user to the &lt;code&gt;dialout&lt;/code&gt; group
to get access to the USB ports
for serial communication
to the printer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Upon reboot,
the printer wiped out the old incompatible settings,
and I rebooted it again to see the new startup screen
and version numbers.
I ran through some tunings: PID and extruder,
and kicked off a test print that went fine.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I currently have the thermal protection enabled,
and I&amp;#8217;m hoping it&amp;#8217;s not too sensitive,
and I can keep it turned on.
I expect this upgrade will hold for a long time
until I see 5.0 available,
and it&amp;#8217;s had some time to settle.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                RSS for News
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/RSS_for_News.html
            </link>
            <pubDate>Fri, 26 Jun 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/RSS_for_News.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We can find ourselves thinking,
&quot;Where did we used to get our news
before Twitter and Facebook?&quot;
I know where I got news:
&lt;a href=&quot;https://en.wikipedia.org/wiki/Google_Reader&quot;&gt;Google Reader&lt;/a&gt;,
but Google shut it down,
and eventually gave us a taste
of aggregated news
in &lt;a href=&quot;https://assistant.google.com/&quot;&gt;Google Assistant&lt;/a&gt;
on our phones,
but it never really allows us to consciously control it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Social media&amp;#8217;s a bit of a mess
and mostly getting worse,
so you might want an alternative.
Google Reader was based on RSS and Atom news feeds
from all your favorite websites,
and those still exist.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I still read my carefully curated news feeds
using &lt;a href=&quot;https://feedly.com&quot;&gt;Feedly&lt;/a&gt;
as a successor to Google Reader.
I have hundreds of different news feeds
aggregated into this one place
(kind of like Facebook and Twitter),
but it&amp;#8217;s a much more controlled
stream of news about which I care.
Anyone can create an account
at Feedly and get started
by searching for a handful
of sites you&amp;#8217;d like to read regularly.
Over time, you can extend
and finely tune your feed of news.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If Feedly isn&amp;#8217;t quite your style,
you can find other news readers,
and allow yourself to stay informed
without necessarily needing
to scroll through all the noise
of Facebook and Twitter.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Clojure Core Logic for a Puzzle
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Clojure_Core_Logic_for_a_Puzzle.html
            </link>
            <pubDate>Mon, 11 May 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Clojure_Core_Logic_for_a_Puzzle.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;span class=&quot;image right&quot;&gt;&lt;img src=&quot;/blog/images/2020/lock-puzzle.png&quot; alt=&quot;Lock Puzzle&quot; width=&quot;300&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I saw a
&lt;a href=&quot;https://www.popularmechanics.com/home/a32071853/open-the-lock-puzzle-riddle-answer/&quot;&gt;puzzle&lt;/a&gt;
pop up on Facebook a couple weeks ago,
and it looked like a fun exercise
for &lt;a href=&quot;https://github.com/clojure/core.logic&quot;&gt;core.logic&lt;/a&gt;,
since the puzzle simply requires keeping track
of some constraints and reconciling them
to one answer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had previously tinkered with the
&lt;a href=&quot;https://github.com/clojure/core.logic/wiki/A-Core.logic-Primer&quot;&gt;core.logic primer&lt;/a&gt;
and I referred back to it
to complete this little puzzle.
I had originally coded
some more complete rules about exclusion
of some values
which could have been implied by the puzzle,
but I found they could be dropped
and still get down to one answer.
I started from the entire
problem space of all digits
and added the constraints
to watch and verify
each constraint&amp;#8217;s effects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;(ns scratch.2020-05
  (:require [clojure.core.logic :as l]))

(l/run* [a b c]
  ;; all digits 0-9
  (l/membero a (range 10))
  (l/membero b (range 10))
  (l/membero c (range 10))
  ;; 6 8 2 one digit is right and in its right place
  (l/conde
    [(l/== a 6)]
    [(l/== b 8)]
    [(l/== c 2)])
  ;; 6 1 4 one digit is right but in the wrong place
  (l/conde
    [(l/membero a [1 4])]
    [(l/membero b [6 4])]
    [(l/membero c [6 1])])
  ;; 206 2 digits are right, but both are in the wrong place
  (l/conde
    [(l/membero a [0 6])
      (l/membero b [2 6])
      (l/membero c (remove #{2 0 6} (range 10)))]
    [(l/membero a [0 6])
      (l/membero c [2 0])
      (l/membero b (remove #{2 0 6} (range 10)))]
    [(l/membero b [2 6])
      (l/membero c [2 0])
      (l/membero a (remove #{2 0 6} (range 10)))]
      )
  ;; 3 8 0 one digit is right but in the wrong place
  (l/conde
    [(l/membero a [8 0])]
    [(l/membero b [3 0])]
    [(l/membero c [3 8])])
  ;; 7 3 8 all the digits are wrong
  (l/membero a (remove #{7 3 8} (range 10)))
  (l/membero b (remove #{7 3 8} (range 10)))
  (l/membero c (remove #{7 3 8} (range 10))))
;; =&amp;gt; ([0 4 2])&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Past Phones
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Past_Phones.html
            </link>
            <pubDate>Wed, 8 Apr 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Past_Phones.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Over the years,
I&amp;#8217;ve chosen my mobile devices
pretty carefully.
I&amp;#8217;ve usually chosen them
for connectivity options,
Java capabilities,
and eventually the quickest Android updates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/ericsson_gh_688-106.php&quot;&gt;Ericsson GH 688&lt;/a&gt;
This was my first device in about 1999:
futuristic GSM on a small start-up network in Lancaster.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.phonescoop.com/phones/phone.php?p=25&quot;&gt;Ericsson 289LX&lt;/a&gt;
After my old phone carrier let all their cool features
(email to SMS) fall into disrepair,
I jumped to an older TDMA network
on AT&amp;amp;T, but it worked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.phonescoop.com/phones/phone.php?p=84&quot;&gt;Siemens S46&lt;/a&gt;
This was my second phone on AT&amp;amp;T.
This one had a couple colors and a better WAP browser,
so I started coding WAP mobile sites for it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/sony_ericsson_t68i-325.php&quot;&gt;SonyEricsson T68i&lt;/a&gt;
A friend gave me this tiny phone with an attachable camera accessory.
This was my first phone with Bluetooth data tethering.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.phonescoop.com/phones/phone.php?p=275&quot;&gt;SonyEricsson T616&lt;/a&gt;
Now I had an integrated camera and Java,
and I think I likely started coding for J2ME apps and games
with the T616.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.phonescoop.com/phones/phone.php?p=496&quot;&gt;SonyEricsson T637&lt;/a&gt;
This was just an update to the T616.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/sony_ericsson_s710-848.php&quot;&gt;SonyEricsson S710&lt;/a&gt;
This device had an odd form factor
of a large screen and hidden keypad
that made it more of a camera that had a phone feature.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/sony_ericsson_w810-1402.php&quot;&gt;SonyEricsson W810&lt;/a&gt;
I returned to the tiny, featureful candy-bar phone with this one.
Java capabilities and connectivity remained my most important concerns.
I was really stretching these little feature phones
to do as much as possible, and I believed they continued
to have a future.
This device was a &quot;Walkman&quot;-branded device,
so it had a bit of storage and decent audio capabilities.
I think I also flashed a new firmware onto this device
to get full email support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/nokia_e71-2425.php&quot;&gt;Nokia E71&lt;/a&gt;
I jumped to a smartphone with Symbian OS with the full keyboard
and internet capabiliites.
I never coded any S60 apps for this,
but it continued to run Java apps well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/samsung_google_nexus_s-3620.php&quot;&gt;Samsung Nexus S&lt;/a&gt;
I finally jumped to Android and a touchscreen,
and I had every intention of jumping right
to coding Android apps.
(Spoiler: With all these Android devices, I &lt;em&gt;never&lt;/em&gt; started.)
I really stretched this device to a point
where I barely had enough memory to run
GPS navigation (Waze) and podcasts (BeyondPod) or music
at the same time.
I loaded lots of 3rd party Android ROMs on here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/lg_nexus_4_e960-5048.php&quot;&gt;LG Nexus 4&lt;/a&gt;
I continued to chase clean Google Android devices.
This devices brought NFC and wireless charging
that didn&amp;#8217;t work as well as it should.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/huawei_nexus_6p-7588.php&quot;&gt;Huawei Nexus 6P&lt;/a&gt;
This phone was huge, and I never went back to smaller phones,
but it lost wireless charging.
It lasted long enough for me
to need to replace the built-in battery.
I started coding some mobile JavaScript for this device.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/google_pixel_xl-8345.php&quot;&gt;Google Pixel XL&lt;/a&gt;
The 6P&amp;#8217;s battery died again,
and the latest phones (Pixel 3) were being released in 6 months,
so I bought a refurbished Pixel XL
to tide me over,
but it proved to be an excellent phone,
so I hung onto it until it no longer got updates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/google_pixel_3_xl-9257.php&quot;&gt;Google Pixel 3 XL&lt;/a&gt;
I wanted something newer that would get Android 11,
so I bought this device refurbished.
I had to buy some headphone adapters,
but I&amp;#8217;ve been enjoying having good wireless charging.
I finally got started with some ClojureScript
for mobile web apps on this device.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Update 2022-11-03:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gsmarena.com/google_pixel_6_pro-10918.php&quot;&gt;Google Pixel 6 Pro&lt;/a&gt;
The Pixel 3 XL was pretty great for photos,
but stopped getting updates at the end of 2021.
I picked up a refurbished Pixel 6 Pro
in the Summer.
It has 3 cameras,
including a telephoto lens up to 4x.
It&amp;#8217;s almost replaced my real camera
for a couple &lt;a href=&quot;https://www.instagram.com/p/CfkdmiRtSt6/&quot;&gt;concerts&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Reagent Front End
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Reagent_Front_End.html
            </link>
            <pubDate>Mon, 16 Mar 2020 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Reagent_Front_End.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the past couple days,
I&amp;#8217;ve started playing with &lt;a href=&quot;https://reagent-project.github.io/&quot;&gt;Reagent&lt;/a&gt;
to do a bit of React programming.
I used the
&lt;a href=&quot;https://github.com/reagent-project/reagent-frontend-template&quot;&gt;Reagent-frontend&lt;/a&gt;
template for leiningen to get my start.
Within a day or two,
I had managed to string together
a useful little toy application.
It only took me a couple hours
to get my next toy application
put together.
Each application is a mere
single-page application
for doing a single, simple task
on a mobile device.
It&amp;#8217;s a lot of fun,
and this opens the door
for quickly implementing any toy
I want.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/sum-three&quot;&gt;Sum 3&lt;/a&gt;
&lt;a href=&quot;https://www.hjsoft.com/~john/sum3/&quot;&gt;(Running)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/planning-poker&quot;&gt;Planning Poker&lt;/a&gt;
&lt;a href=&quot;https://www.hjsoft.com/~john/poker/&quot;&gt;(Running)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Added 2020-04-10: &lt;a href=&quot;https://github.com/jflinchbaugh/bpm&quot;&gt;BPM&lt;/a&gt;
&lt;a href=&quot;https://www.hjsoft.com/~john/bpm/&quot;&gt;(Running)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Pixel 3 XL
            </title>
            <link>
                https://www.hjsoft.com/blog/2020/Pixel_3_XL.html
            </link>
            <pubDate>Tue, 3 Mar 2020 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2020/Pixel_3_XL.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In Summer of 2018,
I had a &lt;a href=&quot;https://www.gsmarena.com/huawei_nexus_6p-7588.php&quot;&gt;Nexus 6P&lt;/a&gt;
that was on its last legs,
and I couldn&amp;#8217;t quite wait
for the Pixel 3 phones to be released in the Fall,
so I picked up
a refurbished &lt;a href=&quot;https://www.gsmarena.com/google_pixel_xl-8345.php&quot;&gt;Pixel XL&lt;/a&gt;
to tide me over
until I could see the new devices.
That Pixel XL was fantastic,
so I just kept it for nearly 2 years.
Back in October,
the Pixel XL got its last OS update,
and I&amp;#8217;ve now started seeing news
of Android 11 previews,
so I got the itch to replace the old Pixel XL
even though it still runs pretty well.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I finally got that
&lt;a href=&quot;https://www.gsmarena.com/google_pixel_3_xl-9257.php&quot;&gt;Pixel 3 XL&lt;/a&gt;
just a year and a half later.
Compared to the Pixel 3a XL,
I figured I&amp;#8217;d appreciate the higher screen resolution
and the bit of water resistance.
This device doesn&amp;#8217;t seem too much different
from my old Pixel XL,
though now I&amp;#8217;m buying a couple headphone adapters,
and I might just end up using
my cheap bluetooth headphones more.
I&amp;#8217;m excited to have wireless charging again,
which I had given up with my
&lt;a href=&quot;https://www.gsmarena.com/lg_nexus_4_e960-5048.php&quot;&gt;Nexus 4&lt;/a&gt;.
The front-firing stereo speakers
are back and sounding good,
but it&amp;#8217;s an adjustment
from the way I used to carry the Pixel XL
with the single speaker blasting podcasts
from a pocket as I wander the house.
It seems that maybe driving
the extra speaker may drain battery
a little quicker.
After a couple days,
I had to pop into the Developer Options
to hide the notch.
It&amp;#8217;s just a bad idea:
I have too many notifications
to allow room for a notch cut out
between them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Pixel 3 XL seems pretty well-balanced
with features I want at a reasonable price
(about $300 USD for the refurbished one).
I already have the March 2020 update
before I&amp;#8217;ve even owned the device for a week,
and I should have updates through 2021.
When updates run out, I&amp;#8217;ll look at upgrading again.
I&amp;#8217;ll need to find a use for the original Pixel
as a webcam or something,
since it&amp;#8217;s still in such good shape
and had plenty of computing power.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Advent of Code
            </title>
            <link>
                https://www.hjsoft.com/blog/2019/Advent_of_Code.html
            </link>
            <pubDate>Sat, 14 Dec 2019 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2019/Advent_of_Code.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the second year
I&amp;#8217;m taking part
in the &lt;a href=&quot;https://adventofcode.com/2019&quot;&gt;Advent of Code&lt;/a&gt;
with friends and &lt;a href=&quot;http://www.sonatype.com/&quot;&gt;coworkers&lt;/a&gt;.
I&amp;#8217;m using &lt;a href=&quot;https://clojure.org/&quot;&gt;Clojure&lt;/a&gt; again this year.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Advent of Code
is a story and series
of puzzles
released as 2 parts daily.
There&amp;#8217;s a &lt;a href=&quot;https://www.reddit.com/r/adventofcode/&quot;&gt;community&lt;/a&gt;
of people &lt;a href=&quot;https://adventofcode.com/2019/leaderboard&quot;&gt;competing&lt;/a&gt;
at various levels
to complete the puzzles
faster than others.
I was keeping up fine
for the first 7 days or so,
but I eventually fell behind
like many people.
Fortunately,
everyone can continue to work
at our own pace.
The puzzles
from previous years
continue to be available.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m happy
to find
that I&amp;#8217;m having an easier time
with Clojure this year,
and I&amp;#8217;m more easily
able to use it to &lt;em&gt;describe&lt;/em&gt;
the algorithms
instead of struggling
with the language.
I publish &lt;a href=&quot;https://github.com/jflinchbaugh/aoc2019&quot;&gt;my code&lt;/a&gt;
to Github.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Missing Classes in IDEA
            </title>
            <link>
                https://www.hjsoft.com/blog/2019/Missing_Classes_in_IDEA.html
            </link>
            <pubDate>Mon, 25 Nov 2019 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2019/Missing_Classes_in_IDEA.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I use InteliJ IDEA for work when working on Java code.
When the IDE doesn&amp;#8217;t work, though,
it&amp;#8217;s incredibly distracting.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had a problem
where IDEA would not find a few auxiliary classes
in my application.
It would highlight them as errors in imports,
and the search would find the source file,
but technically not the class definition.
I&amp;#8217;d poke at the problem over a couple weeks,
but I&amp;#8217;d otherwise ignore it most the time
until it seemed to be losing more and more of my classes,
some of which I was actively modifying.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Re-importing the project&amp;#8217;s Maven build didn&amp;#8217;t fix it;
re-cloning a brand new project didn&amp;#8217;t fix it;
and re-installing IDEA didn&amp;#8217;t even work.
Finally, I found
&lt;a href=&quot;https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-store-settings-caches-plugins-and-logs&quot;&gt;IDEA&amp;#8217;s config directories&lt;/a&gt;, and wiped those out to start over,
and that cleared up the problem: I was able to find all my classes again.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Using Google Calendar Effectively
            </title>
            <link>
                https://www.hjsoft.com/blog/2019/Using_Google_Calendar_Effectively.html
            </link>
            <pubDate>Sat, 21 Sep 2019 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2019/Using_Google_Calendar_Effectively.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Google Calendar makes the world go &apos;round,
especially for kids who travel between households
and have lots of school events.
There are a couple things you can do
to get the most out of your calendar.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_set_locations&quot;&gt;Set Locations&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Calendar events obviously come with times
and fixed reminders so many minutes
before the event.
It doesn&amp;#8217;t matter where you are
or where the event takes place:
that notification is coming at the same time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;With a location set on each calendar event,
other software,
like  &lt;a href=&quot;https://www.waze.com/&quot;&gt;Waze&lt;/a&gt; GPS,
can continuously watch your current location
and offer you a more useful notification
giving you time to travel based on distance
and current driving conditions along the way.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_set_the_earliest_time&quot;&gt;Set the Earliest Time&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Most my calendar events have just &lt;em&gt;one&lt;/em&gt; start time,
but my kids&apos; events aren&amp;#8217;t that simple.
A marching band performance may be at 7pm,
but the bus to the stadium leaves at 4pm.
Since we live by notifications,
it&amp;#8217;s important to get those notifications
at the earliest time at which we need to act.
The other times
are likely just extra details that can go
into the event title
or event details.
I can get a notification for 4pm
and realize I don&amp;#8217;t need to be there until 7pm,
but I can&amp;#8217;t tolerate a 7pm notification
if I was supposed to be dropping a kid
at the practice at 4pm.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If I find it&amp;#8217;s important to see notifications
for all the potential times of an event,
then it&amp;#8217;s probably best to break
that event into more than one event:
drop-off, performance, and pick-up.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_share_the_calendar&quot;&gt;Share the Calendar&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is the first and most useful
collaboration feature of Google Calendar.
A personal calendar benefits one person,
but invite the other participants (the kids),
and then they can start adding
and maintaining events and following these rules as well.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Chili Recipe
            </title>
            <link>
                https://www.hjsoft.com/blog/2019/Chili_Recipe_2019.html
            </link>
            <pubDate>Tue, 3 Sep 2019 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2019/Chili_Recipe_2019.html
            </guid>
            <description>
                &lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_johns_chili_8_qt&quot;&gt;John&amp;#8217;s Chili (8 qt)&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since I&amp;#8217;ve not eaten meat for over 4 years,
and I&amp;#8217;ve been evolving my chili recipe,
it&amp;#8217;s probably time to update it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Ingredients:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;58 oz canned plain tomato sauce&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;93 oz canned dark red kidney beans&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;46 oz canned black beans&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;15 oz canned garbanzo beans&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 large onion&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2 large tomatoes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 small green bell pepper&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 small yellow bell pepper&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3-4 hot peppers (jalape&amp;ntilde;o, habanero, red chili, etc)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;0.25 cup minced garlic&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3 tbsp chili powder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2 tbsp crushed red pepper&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 tsp salt&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 tbsp black pepper&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Directions:&lt;/div&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Dice all the fresh ingredients.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Combine fresh ingredients with spices in large pot over medium heat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add canned sauce and beans to the pot.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adjust heat for slow bubbling, stirring occasionally.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let it cook for 45 minutes or longer.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Browser Automation with Geb, Spock, and Groovy
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/Browser_Automation_Geb_Spock_Groovy.html
            </link>
            <pubDate>Mon, 22 Oct 2018 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/Browser_Automation_Geb_Spock_Groovy.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I recently gave a talk
and demonstration,
&lt;a href=&quot;https://jflinchbaugh.github.io/geb-preso/&quot;&gt;
    Browser Automation with Geb, Spock, and Groovy&lt;/a&gt;,
at the
&lt;a href=&quot;https://www.meetup.com/CapitalAreaSoftwareEngineers/events/txfzgqyxnblb/&quot;&gt;
    Capital Area Software Engineers&lt;/a&gt;
group in Harrisburg, PA.
While explaining the whole stack of software,
I showed how to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Start a project in Gradle&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get the Geb and Webdriver dependencies in place&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get started in Spock testing framework&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start up a browser for testing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Interact with the page content&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait for asynchronous content&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Abstract away page components into Geb Page classes&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The slides and all the code are available in my
&lt;a href=&quot;https://github.com/jflinchbaugh/geb-preso&quot;&gt;geb-preso&lt;/a&gt; repo.
It includes copies of the code I had prepared,
the code we wrote live as a group,
and my little toy
&lt;a href=&quot;https://hjsoft.com/~john/poker/&quot;&gt;Planning Poker&lt;/a&gt;
JS app I was testing.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                LetsEncrypt
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/LetsEncrypt.html
            </link>
            <pubDate>Tue, 18 Sep 2018 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/LetsEncrypt.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Months ago,
I started setting up &lt;a href=&quot;https://letsencrypt.org/&quot;&gt;LetsEncrypt&lt;/a&gt;
using &lt;a href=&quot;https://certbot.eff.org/&quot;&gt;certbot&lt;/a&gt;
on my Debian &lt;a href=&quot;https://www.hjsoft.com/&quot;&gt;web server&lt;/a&gt;.
It hosts multiple virtual hosts,
so I setup 2 different sets of certificates:
one for &lt;a href=&quot;https://www.hjsoft.com/&quot;&gt;hjsoft.com/www.hjsoft.com&lt;/a&gt;
and the other for
&lt;a href=&quot;https://blog.johnflinchbaugh.com/&quot;&gt;johnflinchbaugh.com/www.johnflinchbaugh.com/blog.johnflinchbaugh.com&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;On Debian,
at least when I got started,
it was recommernded to have &lt;code&gt;certbot&lt;/code&gt;
shutdown your &lt;code&gt;apache2&lt;/code&gt;
and let it start its own temporary web server
to verify the LetsEncrypt setup (&lt;code&gt;--authenticator standalone&lt;/code&gt;).
The other trick is
to register multiple domain names
for one certificate by repeating the &lt;code&gt;-d&lt;/code&gt; option.
I did this with this invocation:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;certbot \
    --pre-hook &quot;systemctl stop apache2&quot; \
    --post-hook &quot;systemctl start apache2&quot; \
    --authenticator standalone \
    --installer apache \
    -d johnflinchbaugh.com \
    -d www.johnflinchbaugh.com \
    -d blog.johnflinchbaugh.com&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I got it started a couple months ago,
but I didn&amp;#8217;t know how to setup multiple domain names,
so I was always getting errors
that this certificate was for a different name:
&lt;code&gt;johnflinchbaugh.com&lt;/code&gt; instead of &lt;code&gt;www.johnflinchbaugh.com&lt;/code&gt;, etc.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That&amp;#8217;s all sorted out now,
and all my sites should be SSL all the time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For more information on setup,
&lt;a href=&quot;https://certbot.eff.org/&quot;&gt;certbot&lt;/a&gt;
has a great set of guides
based on your OS and web server.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-07-24 Podcast List
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-07-24_Podcast_List.html
            </link>
            <pubDate>Tue, 24 Jul 2018 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-07-24_Podcast_List.html
            </guid>
            <description>
                &lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Listen 0&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hourly News Summary - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=500005&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=500005&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Up First - &lt;a href=&quot;https://www.npr.org/rss/podcast.php?id=510318&quot; class=&quot;bare&quot;&gt;https://www.npr.org/rss/podcast.php?id=510318&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Listen 1&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Radiolab from WNYC - &lt;a href=&quot;http://feeds.wnyc.org/radiolab&quot; class=&quot;bare&quot;&gt;http://feeds.wnyc.org/radiolab&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NPR Programs: Wait Wait&amp;#8230;&amp;#8203; Don&amp;#8217;t Tell Me! Podcast - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=35&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=35&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PRI Echoes Interviews - &lt;a href=&quot;http://echoes.org/podcasts/feed&quot; class=&quot;bare&quot;&gt;http://echoes.org/podcasts/feed&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grammar Girl Quick and Dirty Tips for Better Writing - &lt;a href=&quot;http://www.qdnow.com/grammar.xml&quot; class=&quot;bare&quot;&gt;http://www.qdnow.com/grammar.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NPR How To Do Everything Podcast - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=510303&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=510303&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Candid Frame A Photography Podcast - &lt;a href=&quot;http://thecandidframe.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://thecandidframe.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Photography Tips from the Top Floor - &lt;a href=&quot;http://feeds.tipsfromthetopfloor.com/tftf&quot; class=&quot;bare&quot;&gt;http://feeds.tipsfromthetopfloor.com/tftf&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All About Android - &lt;a href=&quot;http://leoville.tv/podcasts/aaa&quot; class=&quot;bare&quot;&gt;http://leoville.tv/podcasts/aaa&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android App Addicts - &lt;a href=&quot;http://feeds.feedburner.com/androidappaddicts&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/androidappaddicts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;APM: Garrison Keillor&amp;#8217;s The Writer&amp;#8217;s Almanac Podcast feed - &lt;a href=&quot;http://writersalmanac.publicradio.org/podcast/feed.php&quot; class=&quot;bare&quot;&gt;http://writersalmanac.publicradio.org/podcast/feed.php&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Back to Work - &lt;a href=&quot;http://feeds.5by5.tv/b2w&quot; class=&quot;bare&quot;&gt;http://feeds.5by5.tv/b2w&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android App Arena (MP3) - &lt;a href=&quot;http://feeds.twit.tv/arena.xml&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/arena.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LensWork - Photography and the Creative Process - &lt;a href=&quot;http://lenswork.com/podcast.xml&quot; class=&quot;bare&quot;&gt;http://lenswork.com/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TWiP Talks - &lt;a href=&quot;http://thisweekinphoto.com/category/interviews/feed/&quot; class=&quot;bare&quot;&gt;http://thisweekinphoto.com/category/interviews/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TWiP Street Focus - &lt;a href=&quot;http://thisweekinphoto.com/category/street-focus/feed/&quot; class=&quot;bare&quot;&gt;http://thisweekinphoto.com/category/street-focus/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Digital Photo Experience - &lt;a href=&quot;http://feeds.feedburner.com/DPExperienceEnhancedPodcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/DPExperienceEnhancedPodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Photo Brigade Podcast - &lt;a href=&quot;http://photobrigade.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://photobrigade.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Thoughts on Photography - &lt;a href=&quot;http://thoughtsonphotography.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://thoughtsonphotography.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;99% Invisible - &lt;a href=&quot;http://feeds.99percentinvisible.org/99percentinvisible&quot; class=&quot;bare&quot;&gt;http://feeds.99percentinvisible.org/99percentinvisible&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android Police Podcast - &lt;a href=&quot;http://feeds.feedburner.com/AndroidPolicePodcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/AndroidPolicePodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TWiP Your Itinerary - &lt;a href=&quot;http://thisweekinphoto.com/category/your-itinerary/feed/&quot; class=&quot;bare&quot;&gt;http://thisweekinphoto.com/category/your-itinerary/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Groovy Podcast - &lt;a href=&quot;http://groovypodcast.podbean.com/feed/&quot; class=&quot;bare&quot;&gt;http://groovypodcast.podbean.com/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PetaPixel Photography Podcast - &lt;a href=&quot;http://petapixel.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://petapixel.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Functional Geekery - &lt;a href=&quot;http://www.functionalgeekery.com/feed/mp3/&quot; class=&quot;bare&quot;&gt;http://www.functionalgeekery.com/feed/mp3/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jeff Curto&amp;#8217;s Camera Position - &lt;a href=&quot;http://feeds.feedburner.com/cameraposition&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/cameraposition&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Acquired - &lt;a href=&quot;http://www.acquired.fm/episodes?format=rss&quot; class=&quot;bare&quot;&gt;http://www.acquired.fm/episodes?format=rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hit The Streets with Valerie Jardin - &lt;a href=&quot;http://valeriejardinphotography.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://valeriejardinphotography.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do By Friday - &lt;a href=&quot;https://rss.simplecast.com/podcasts/2389/rss&quot; class=&quot;bare&quot;&gt;https://rss.simplecast.com/podcasts/2389/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Smart Talk - &lt;a href=&quot;https://features.witf.org/stpodcast/feed/podcast/&quot; class=&quot;bare&quot;&gt;https://features.witf.org/stpodcast/feed/podcast/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Listen 2&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This Week in Tech (MP3) - &lt;a href=&quot;http://feeds.twit.tv/twit&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/twit&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android Central Podcast - &lt;a href=&quot;http://feeds.feedburner.com/AndroidCentralPodcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/AndroidCentralPodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NPR: TED Radio Hour Podcast - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=510298&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=510298&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NPR: Car Talk Podcast - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=510208&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=510208&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Moth Podcast - &lt;a href=&quot;http://feeds.feedburner.com/themothpodcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/themothpodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Triangulation (MP3) - &lt;a href=&quot;http://feeds.twit.tv/tri&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/tri&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;APM Marketplace All In One - &lt;a href=&quot;http://feeds.americanpublicmedia.org/marketplaceallinone&quot; class=&quot;bare&quot;&gt;http://feeds.americanpublicmedia.org/marketplaceallinone&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FLOSS Weekly (MP3) - &lt;a href=&quot;http://feeds.twit.tv/floss&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/floss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Giz Wiz (MP3) - &lt;a href=&quot;http://feeds.twit.tv/dgw&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/dgw&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This Week in Law (MP3) - &lt;a href=&quot;http://feeds.twit.tv/twil&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/twil&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rationally Speaking - &lt;a href=&quot;http://nycskeptics.org/storage/feeds/rs.xml&quot; class=&quot;bare&quot;&gt;http://nycskeptics.org/storage/feeds/rs.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tank Riot - &lt;a href=&quot;http://www.tankriot.com/rss.xml&quot; class=&quot;bare&quot;&gt;http://www.tankriot.com/rss.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Digital Story - &lt;a href=&quot;http://www.thedigitalstory.com/feed/podcast.xml&quot; class=&quot;bare&quot;&gt;http://www.thedigitalstory.com/feed/podcast.xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Martin Bailey Photography Podcast MP3 - &lt;a href=&quot;http://www.martinbaileyphotography.com/podcastmp3.php&quot; class=&quot;bare&quot;&gt;http://www.martinbaileyphotography.com/podcastmp3.php&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Linux Action Show! MP3 - &lt;a href=&quot;http://feeds.feedburner.com/TheLinuxActionShow&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/TheLinuxActionShow&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linux For The Rest Of Us - &lt;a href=&quot;http://feeds.feedburner.com/linuxfortherestofus&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/linuxfortherestofus&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All Chariot Podcasts - &lt;a href=&quot;http://chariotsolutions.com/podcasts/show/all-shows/feed/&quot; class=&quot;bare&quot;&gt;http://chariotsolutions.com/podcasts/show/all-shows/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Cognicast - Cognitect Blog - &lt;a href=&quot;http://feeds.cognitect.com/cognicast/feed.rss&quot; class=&quot;bare&quot;&gt;http://feeds.cognitect.com/cognicast/feed.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Photofocus - &lt;a href=&quot;http://feeds.feedburner.com/photofocuspodcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/photofocuspodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cory Doctorow&amp;#8217;s craphound.com » Podcast - &lt;a href=&quot;http://feeds.feedburner.com/doctorow_podcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/doctorow_podcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hanselminutes - &lt;a href=&quot;http://feeds.podtrac.com/9dPm65vdpLL1&quot; class=&quot;bare&quot;&gt;http://feeds.podtrac.com/9dPm65vdpLL1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android Developers Backstage - &lt;a href=&quot;http://feeds.feedburner.com/blogspot/AndroidDevelopersBackstage&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/blogspot/AndroidDevelopersBackstage&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Song Exploder - &lt;a href=&quot;http://songexploder.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://songexploder.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Note to Self - &lt;a href=&quot;http://feeds.wnyc.org/notetoself-podcast&quot; class=&quot;bare&quot;&gt;http://feeds.wnyc.org/notetoself-podcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ask Me Another - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=510299&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=510299&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Changelog - &lt;a href=&quot;http://feeds.5by5.tv/changelog&quot; class=&quot;bare&quot;&gt;http://feeds.5by5.tv/changelog&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Welcome to Night Vale - &lt;a href=&quot;http://nightvale.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://nightvale.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Freakonomics Radio - &lt;a href=&quot;http://feeds.feedburner.com/freakonomicsradio&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/freakonomicsradio&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alice Isn&amp;#8217;t Dead - &lt;a href=&quot;http://aliceisntdead.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://aliceisntdead.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Oh No Ross and Carrie - &lt;a href=&quot;http://feeds.feedburner.com/OhNoPodcast&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/OhNoPodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WITF Smart Talk - &lt;a href=&quot;http://feeds.witf.org/witf-smarttalk-podcast&quot; class=&quot;bare&quot;&gt;http://feeds.witf.org/witf-smarttalk-podcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;StreetPX - A Photography Podcast - &lt;a href=&quot;http://streetpx.com/feed/podcast/&quot; class=&quot;bare&quot;&gt;http://streetpx.com/feed/podcast/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Engineering Culture by InfoQ - &lt;a href=&quot;http://feeds.soundcloud.com/users/soundcloud:users:258266127/sounds.rss&quot; class=&quot;bare&quot;&gt;http://feeds.soundcloud.com/users/soundcloud:users:258266127/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How I Built This - &lt;a href=&quot;https://www.npr.org/rss/podcast.php?id=510313&quot; class=&quot;bare&quot;&gt;https://www.npr.org/rss/podcast.php?id=510313&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Stack Overflow Podcast - &lt;a href=&quot;http://blog.stackoverflow.com/feed/podcast/&quot; class=&quot;bare&quot;&gt;http://blog.stackoverflow.com/feed/podcast/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Benjamen Walker&amp;#8217;s Theory of Everything - &lt;a href=&quot;http://feeds.prx.org/toe&quot; class=&quot;bare&quot;&gt;http://feeds.prx.org/toe&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;defn - &lt;a href=&quot;http://feeds.soundcloud.com/users/soundcloud:users:220484243/sounds.rss&quot; class=&quot;bare&quot;&gt;http://feeds.soundcloud.com/users/soundcloud:users:220484243/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;B&amp;amp;H Photography Podcast - &lt;a href=&quot;http://bhphotopodcast.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://bhphotopodcast.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No Name Photo Show - &lt;a href=&quot;http://nonamephotoshow.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://nonamephotoshow.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the Media - &lt;a href=&quot;http://feeds.wnyc.org/onthemedia&quot; class=&quot;bare&quot;&gt;http://feeds.wnyc.org/onthemedia&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10% Happier with Dan Harris - &lt;a href=&quot;http://feeds.feedburner.com/abcradio/10percenthappier&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/abcradio/10percenthappier&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Voices in AI - &lt;a href=&quot;https://voicesinai.com/wp-admin/admin-ajax.php?action=go_briefing_feed&amp;amp;feed_type=xml&quot; class=&quot;bare&quot;&gt;https://voicesinai.com/wp-admin/admin-ajax.php?action=go_briefing_feed&amp;amp;feed_type=xml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wrong About Everything - &lt;a href=&quot;http://wrongabouteverything.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://wrongabouteverything.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CaSE - &lt;a href=&quot;http://www.case-podcast.org/feed/aac&quot; class=&quot;bare&quot;&gt;http://www.case-podcast.org/feed/aac&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Picturing Success Podcast - &lt;a href=&quot;http://picturingsuccess.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://picturingsuccess.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ZigZag - &lt;a href=&quot;http://feeds.stableg.com/zigzagpodcast&quot; class=&quot;bare&quot;&gt;http://feeds.stableg.com/zigzagpodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At Liberty - &lt;a href=&quot;http://feeds.soundcloud.com/users/soundcloud:users:40330678/sounds.rss&quot; class=&quot;bare&quot;&gt;http://feeds.soundcloud.com/users/soundcloud:users:40330678/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Everything is Alive - &lt;a href=&quot;http://feeds.everythingisalive.com/everythingisalive&quot; class=&quot;bare&quot;&gt;http://feeds.everythingisalive.com/everythingisalive&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Listen 3&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This American Life - &lt;a href=&quot;http://feeds.thisamericanlife.org/talpodcast&quot; class=&quot;bare&quot;&gt;http://feeds.thisamericanlife.org/talpodcast&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Security Now (MP3) - &lt;a href=&quot;http://feeds.twit.tv/sn&quot; class=&quot;bare&quot;&gt;http://feeds.twit.tv/sn&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hacker Public Radio - &lt;a href=&quot;http://hackerpublicradio.org/hpr_rss.php&quot; class=&quot;bare&quot;&gt;http://hackerpublicradio.org/hpr_rss.php&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the memory palace - &lt;a href=&quot;http://memorypalace.wm.wizzard.tv/rss&quot; class=&quot;bare&quot;&gt;http://memorypalace.wm.wizzard.tv/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Quit - &lt;a href=&quot;http://feeds.5by5.tv/quit&quot; class=&quot;bare&quot;&gt;http://feeds.5by5.tv/quit&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Software Engineering Radio - The Podcast for Professional Software Developers - &lt;a href=&quot;http://feeds.feedburner.com/se-radio&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/se-radio&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All Songs Considered - &lt;a href=&quot;http://www.npr.org/rss/podcast.php?id=510019&amp;amp;uid=n1qe4e85742c986fdb81d2d38ffa0d5d53&quot; class=&quot;bare&quot;&gt;http://www.npr.org/rss/podcast.php?id=510019&amp;amp;uid=n1qe4e85742c986fdb81d2d38ffa0d5d53&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Allusionist - &lt;a href=&quot;http://feeds.theallusionist.org/Allusionist&quot; class=&quot;bare&quot;&gt;http://feeds.theallusionist.org/Allusionist&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Mortified Podcast - &lt;a href=&quot;http://feeds.getmortified.com/MortifiedPod&quot; class=&quot;bare&quot;&gt;http://feeds.getmortified.com/MortifiedPod&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You Are Not So Smart - &lt;a href=&quot;http://feeds.soundcloud.com/users/soundcloud:users:16745745/sounds.rss&quot; class=&quot;bare&quot;&gt;http://feeds.soundcloud.com/users/soundcloud:users:16745745/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Process Driven - &lt;a href=&quot;https://jefferysaddoris.com/processdriven/feed/&quot; class=&quot;bare&quot;&gt;https://jefferysaddoris.com/processdriven/feed/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Music&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Goldie presents the Metalheadz podcast - &lt;a href=&quot;http://feeds.feedburner.com/Metalheadz&quot; class=&quot;bare&quot;&gt;http://feeds.feedburner.com/Metalheadz&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chrono&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;On Taking Pictures - &lt;a href=&quot;http://feeds.5by5.tv/otp&quot; class=&quot;bare&quot;&gt;http://feeds.5by5.tv/otp&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LambdaCast - &lt;a href=&quot;http://feeds.soundcloud.com/users/soundcloud:users:239787249/sounds.rss&quot; class=&quot;bare&quot;&gt;http://feeds.soundcloud.com/users/soundcloud:users:239787249/sounds.rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Conversations with People Who Hate Me - &lt;a href=&quot;http://conversationswithpeoplewhohateme.libsyn.com/rss&quot; class=&quot;bare&quot;&gt;http://conversationswithpeoplewhohateme.libsyn.com/rss&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Meditations, The by AURELIUS, Marcus - &lt;a href=&quot;https://librivox.org/rss/1095&quot; class=&quot;bare&quot;&gt;https://librivox.org/rss/1095&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Watching for GIMP 2.10.1
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/Watching_for_GIMP_2.10.1.html
            </link>
            <pubDate>Sun, 13 May 2018 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/Watching_for_GIMP_2.10.1.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was seeing the new GIMP 2.10.0
doing bad things
with multiple gradients
on a transparent layer,
so I logged
&lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=795866&quot;&gt;Bug 795866&lt;/a&gt;.
They quickly fixed the bug
within 48 hours,
but now I&amp;#8217;m sitting here
reloading the &lt;a href=&quot;https://www.gimp.org/news/&quot;&gt;GIMP news&lt;/a&gt; page
to see if they&amp;#8217;ve cut the newest release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Update: GIMP 2.10.2 just hit Debian Unstable!&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                End of the Make 365
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/End_of_the_Make_365.html
            </link>
            <pubDate>Sun, 29 Apr 2018 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/End_of_the_Make_365.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;While I fell behind
and caught up a couple times,
I caught up one less time,
so this project is done.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-12 Sanding Stick Fix
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-12_Sanding_Stick_Fix.html
            </link>
            <pubDate>Mon, 12 Mar 2018 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-12_Sanding_Stick_Fix.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The
&lt;a href=&quot;https://github.com/jflinchbaugh/objects/commit/f117543e3ac66207135b2a1c45a1e4ec57b480f2&quot;&gt;sanding stick&lt;/a&gt;
needed a little adjustment
to be assembled successfully.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-11 Sanding Stick
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-11_Sanding_Stick.html
            </link>
            <pubDate>Sun, 11 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-11_Sanding_Stick.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I finally modeled a
&lt;a href=&quot;https://github.com/jflinchbaugh/objects/commit/dd82f79fdadc85d5665ea4651277364d1e179b60&quot;&gt;sanding stick&lt;/a&gt;
for small sandpaper belts
I bought a year ago
to kickstart the project.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-10 Ben on Skates
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-10_Ben_on_Skates.html
            </link>
            <pubDate>Sat, 10 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-10_Ben_on_Skates.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BgXkTX4FlKC/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:49.72222222222222% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BgXkTX4FlKC/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Ben on Skates&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-03-16T03:00:36+00:00&quot;&gt;Mar 15, 2018 at 8:00pm PDT&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-09 Enfocus for Cheshire Cat
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-09_Enfocus_for_Cheshire_Cat.html
            </link>
            <pubDate>Fri, 9 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-09_Enfocus_for_Cheshire_Cat.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I added the
&lt;a href=&quot;https://github.com/jflinchbaugh/cheshire-cat/commit/5388dac8e50813e94c3617db6386482c13f67231&quot;&gt;Enfocus library&lt;/a&gt;
to my example Cheshire Cat project
to handle dynamic markup
on the client.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-08 CLJS HTTP Client in Cheshire
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-08_CLJS_HTTP_Client_in_Cheshire.html
            </link>
            <pubDate>Thu, 8 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-08_CLJS_HTTP_Client_in_Cheshire.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I added the
&lt;a href=&quot;https://github.com/jflinchbaugh/cheshire-cat/commit/8258fc442f540a6f31b8cce680b88266f7950208&quot;&gt;CLJS HTTP client&lt;/a&gt;
to my example Cheshire Cat project.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-07 JS Alert in Cheshire Cat
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-07_JS_Alert_in_Cheshire_Cat.html
            </link>
            <pubDate>Wed, 7 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-07_JS_Alert_in_Cheshire_Cat.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I added a
&lt;a href=&quot;https://github.com/jflinchbaugh/cheshire-cat/commit/7e8a330ce6191d945931521f961b717df935adde&quot;&gt;JS/Clojurescript alert&lt;/a&gt;
to my example Cheshire Cat project.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-06 Ring-JSON in Cheshire Cat
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-06_Ring-JSON_in_Cheshire_Cat.html
            </link>
            <pubDate>Tue, 6 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-06_Ring-JSON_in_Cheshire_Cat.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I switched the cheshire cat project over to use
&lt;a href=&quot;https://github.com/jflinchbaugh/cheshire-cat/commit/37d35623d312315f5d74430388da934913751c66&quot;&gt;ring-json&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-05 JSON in Cheshire Cat
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-05_JSON_in_Cheshire_Cat.html
            </link>
            <pubDate>Mon, 5 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-05_JSON_in_Cheshire_Cat.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had the cheshire cat project produce a little
&lt;a href=&quot;https://github.com/jflinchbaugh/cheshire-cat/commit/5e0716092d1cc4e0429402a03cfb63cd746e897b&quot;&gt;JSON&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-04 Droid Maker Meetup
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-04_Droid_Maker_Meetup.html
            </link>
            <pubDate>Sun, 4 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-04_Droid_Maker_Meetup.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bf8PaABjdTJ/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:36.342592592592595% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bf8PaABjdTJ/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Droid Maker Meetup&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-03-05T12:18:31+00:00&quot;&gt;Mar 5, 2018 at 4:18am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-03 New Feet for the Printer
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-03_New_Feet_for_the_Printer.html
            </link>
            <pubDate>Sat, 3 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-03_New_Feet_for_the_Printer.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bf7cI_xD1C7/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bf7cI_xD1C7/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-03-03 New Feet for the Printer (late)&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-03-05T04:50:33+00:00&quot;&gt;Mar 4, 2018 at 8:50pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-02 Started Cheshire Cat Project
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-02_Started_Cheshire_Cat_Project.html
            </link>
            <pubDate>Fri, 2 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-02_Started_Cheshire_Cat_Project.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I started the
&lt;a href=&quot;https://github.com/jflinchbaugh/cheshire-cat/commit/1ba4135d48e63da2316f3851652c01c6a4dcb445&quot;&gt;cheshire-cat&lt;/a&gt;
project from
&lt;a href=&quot;https://www.goodreads.com/book/show/24701168-living-clojure&quot;&gt;Living Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-03-01 Uberjar of Async Tea Party
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-03-01_Uberjar_of_Async_Tea_Party.html
            </link>
            <pubDate>Thu, 1 Mar 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-03-01_Uberjar_of_Async_Tea_Party.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I completed the async-tea-party with
&lt;a href=&quot;https://github.com/jflinchbaugh/async-tea-party/commit/fbc47483eb3f82733cd8fa4b7cb90e6bff1785bb&quot;&gt;uberjar support&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-28 Channels for Async Tea Party
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-28_Channels_for_Async_Tea_Party.html
            </link>
            <pubDate>Wed, 28 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-28_Channels_for_Async_Tea_Party.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I added the
&lt;a href=&quot;https://github.com/jflinchbaugh/async-tea-party/commit/bf7b020f062bf4ce92a01eb036344793729aaf80&quot;&gt;channels to the async-tea-party&lt;/a&gt;
project
from &lt;a href=&quot;https://www.goodreads.com/book/show/24701168-living-clojure&quot;&gt;Living Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-27 Async Tea Party
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-27_Async_Tea_Party.html
            </link>
            <pubDate>Tue, 27 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-27_Async_Tea_Party.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I made an initial commit of the
&lt;a href=&quot;https://github.com/jflinchbaugh/async-tea-party/commit/b543ea312bb229d6936d4c56d9183daf0d561f63&quot;&gt;async-tea-party&lt;/a&gt;
project
from &lt;a href=&quot;https://www.goodreads.com/book/show/24701168-living-clojure&quot;&gt;Living Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-26 Serpent Talk from Living Clojure
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-26_Serpent_Talk_from_Living_Clojure.html
            </link>
            <pubDate>Mon, 26 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-26_Serpent_Talk_from_Living_Clojure.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was creating basic Clojure apps with lein,
&lt;a href=&quot;https://github.com/jflinchbaugh/serpent-talk/blob/master/src/serpent_talk/talk.clj&quot;&gt;serpent-talk&lt;/a&gt;
from &lt;a href=&quot;https://www.goodreads.com/book/show/24701168-living-clojure&quot;&gt;Living Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-25 Tool Holder for 3D Printer
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-25_Tool_Holder_for_3D_Printer.html
            </link>
            <pubDate>Sun, 25 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-25_Tool_Holder_for_3D_Printer.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bf60MPKDlqa/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bf60MPKDlqa/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-02-25 Tool Holder for 3D Printer&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-03-04T23:01:28+00:00&quot;&gt;Mar 4, 2018 at 3:01pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-24 11 Years of Shadowland
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-24_11_Years_of_Shadowland.html
            </link>
            <pubDate>Sat, 24 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-24_11_Years_of_Shadowland.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bfmslk9j_CX/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:45.20686175580222% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bfmslk9j_CX/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;11 Years of Shadowland&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-25T03:30:13+00:00&quot;&gt;Feb 24, 2018 at 7:30pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-23 Practicing the Wrong Shot
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-23_Practicing_the_Wrong_Shot.html
            </link>
            <pubDate>Fri, 23 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-23_Practicing_the_Wrong_Shot.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bf4UhT1jawM/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:57.870370370370374% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bf4UhT1jawM/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-02-23 Practicing the Wrong Shot&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-03-03T23:46:15+00:00&quot;&gt;Mar 3, 2018 at 3:46pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-22 4Clojure 41
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-22_4Clojure_41.html
            </link>
            <pubDate>Thu, 22 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-22_4Clojure_41.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here&amp;#8217;s a
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/commit/06d9c36c830b309045913e17912a7cff85a4100e&quot;&gt;solution&lt;/a&gt;
to 4Clojure #41.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-21 4Clojure 38
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-21_4Clojure_38.html
            </link>
            <pubDate>Wed, 21 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-21_4Clojure_38.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here&amp;#8217;s a
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/commit/66e776042129c70388f7b1259dbd2cec1d83d1a2&quot;&gt;solution&lt;/a&gt;
to 4Clojure #38.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-20 Ben&apos;s Shot
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-20_Bens_Shot.html
            </link>
            <pubDate>Tue, 20 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-20_Bens_Shot.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bf4QSGGDRSQ/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:46.48148148148148% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bf4QSGGDRSQ/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-02-20 Ben&amp;#39;s Shot&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-03-03T23:09:13+00:00&quot;&gt;Mar 3, 2018 at 3:09pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-19 Clojure Key Destructuring
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-19_Clojure_Key_Destructuring.html
            </link>
            <pubDate>Mon, 19 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-19_Clojure_Key_Destructuring.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was practicing
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/commit/8eb346b6f660f15080c12fad1797e503c766cc64&quot;&gt;key
destructuring&lt;/a&gt;
from &lt;a href=&quot;https://www.goodreads.com/book/show/24701168-living-clojure&quot;&gt;Living Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-18 Clojure Scratch
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-18_Clojure_Scratch.html
            </link>
            <pubDate>Sun, 18 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-18_Clojure_Scratch.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I committed my
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/commit/1deda345df8140f7a6a87d4f0e46edb4e8be4c89&quot;&gt;scratch space for February&lt;/a&gt;.
I was trying to figure
out some &lt;a href=&quot;https://www.4clojure.com/&quot;&gt;4clojure&lt;/a&gt; stuff
and why I&amp;#8217;m bad at simple things
like the recursive Fibonacci algorithm.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-17 Cleanup in Clojure XML
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-17_Cleanup_in_Clojure_XML.html
            </link>
            <pubDate>Sat, 17 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-17_Cleanup_in_Clojure_XML.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I cleaned up a bit of Clojure code I have for
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/commit/61047278a0a119621cfa8a534756e07e71519f75&quot;&gt;parsing XML&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-16 Edge at Tellus360
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-16_Edge_at_Tellus360.html
            </link>
            <pubDate>Fri, 16 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-16_Edge_at_Tellus360.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BfSRyKzja2a/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BfSRyKzja2a/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;DJ Edge at Tellus360&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-17T05:11:11+00:00&quot;&gt;Feb 16, 2018 at 9:11pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-15 Mushroom Cheese Not-Steak
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-15_Mushroom_Cheese_Not-Steak.html
            </link>
            <pubDate>Thu, 15 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-15_Mushroom_Cheese_Not-Steak.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BfPlaoPDNEg/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BfPlaoPDNEg/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Mushroom Cheese Not-Steak&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-16T04:05:01+00:00&quot;&gt;Feb 15, 2018 at 8:05pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-14 Bottom Layer in TPU
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-14_Bottom_Layer_in_TPU.html
            </link>
            <pubDate>Wed, 14 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-14_Bottom_Layer_in_TPU.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BfOZ_xiBjQJ/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BfOZ_xiBjQJ/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Bottom Layer TPU&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-15T17:05:59+00:00&quot;&gt;Feb 15, 2018 at 9:05am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-13 Battery Guy
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-13_Battery_Guy.html
            </link>
            <pubDate>Tue, 13 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-13_Battery_Guy.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I made my little battery figure I had previously been designing.
The openscad
&lt;a href=&quot;https://github.com/jflinchbaugh/objects/blob/master/action_battery.scad&quot;&gt;code&lt;/a&gt;
is available.&lt;/p&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BfKiJqrjy3l/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BfKiJqrjy3l/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Battery Guy&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-14T05:00:17+00:00&quot;&gt;Feb 13, 2018 at 9:00pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-12 Clojure Koans Macros
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-12_Clojure_Koans_Macros.html
            </link>
            <pubDate>Mon, 12 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-12_Clojure_Koans_Macros.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned a bit about Clojure
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/commit/91621a8c027e3e1ff3bfc08b9323cbe892a65636&quot;&gt;macros&lt;/a&gt;,
and that was the end of the koans.
I&amp;#8217;ll have to find something else to practice,
or even better,
I can start a proper project.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-11 Metamorphosis: February 2018
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-11_Metamorphosis_Feb_2018.html
            </link>
            <pubDate>Sun, 11 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-11_Metamorphosis_Feb_2018.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I posted a whopping 55 photos from the night.
It was such a great time.
Here&amp;#8217;s the gallery for
&lt;a href=&quot;https://www.facebook.com/media/set/?set=a.1081329645343504.1073742133.100003994350816&amp;amp;type=1&amp;amp;l=f87f3d7b23&quot;&gt;Metamorphosis February 2018 on Facebook&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-10 Clojure Koans Metadata
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-10_Clojure_Koans_Metadata.html
            </link>
            <pubDate>Sat, 10 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-10_Clojure_Koans_Metadata.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned a bit about Clojure
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/commit/6989a8a72532ae48b7129fa7ef719f5933839f4e&quot;&gt;metadata&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-09 Ben of All Sizes
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-09_Ben_of_All_Sizes.html
            </link>
            <pubDate>Fri, 9 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-09_Ben_of_All_Sizes.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BfEKSthj6YW/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BfEKSthj6YW/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-02-09&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-11T17:36:22+00:00&quot;&gt;Feb 11, 2018 at 9:36am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-08 Freezepop Loop on NDX-400
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-08_Freezepop_Loop_on_NDX-400.html
            </link>
            <pubDate>Thu, 8 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-08_Freezepop_Loop_on_NDX-400.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be9zpnkjPsg/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be9zpnkjPsg/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Figuring out the Loops&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-09T06:23:34+00:00&quot;&gt;Feb 8, 2018 at 10:23pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-07 Clojure Koans Group-By
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-07_Clojure_Koans_Group_By.html
            </link>
            <pubDate>Wed, 7 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-07_Clojure_Koans_Group_By.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned a bit about Clojure
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/commit/bdd99f254fecc549923f09945f77f47828059936&quot;&gt;group-by function&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-06 Clojure Koans Partition
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-06_Clojure_Koans_Partition.html
            </link>
            <pubDate>Tue, 6 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-06_Clojure_Koans_Partition.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned a bit about Clojure
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/commit/a3049a792b969836a4b683c1513872f34074fc12&quot;&gt;partition functions&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-05 Clojure Koans Interrop
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-05_Clojure_Koans_Interrop.html
            </link>
            <pubDate>Mon, 5 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-05_Clojure_Koans_Interrop.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned a bit about Clojure
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/commit/50e8bfb1d5b59bc28e6726afece1fc80634653d4&quot;&gt;interrop with Java&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-04 Chadwyck and Elle
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-04_Chadwyck_and_Elle.html
            </link>
            <pubDate>Sun, 4 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-04_Chadwyck_and_Elle.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be-d2wMjMCJ/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:33.7037037037037% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be-d2wMjMCJ/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Chadwyck &amp;amp; Elle&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-09T12:31:52+00:00&quot;&gt;Feb 9, 2018 at 4:31am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-03 BHop and Dvine
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-03_BHop_and_Dvine.html
            </link>
            <pubDate>Sat, 3 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-03_BHop_and_Dvine.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be7HsOKDeD0/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:37.4537037037037% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be7HsOKDeD0/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;BHop and Dvine&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-08T05:20:28+00:00&quot;&gt;Feb 7, 2018 at 9:20pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-02 Clojure Koans Datatypes
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-02_Clojure_Koans_Datatypes.html
            </link>
            <pubDate>Fri, 2 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-02_Clojure_Koans_Datatypes.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I learned a bit about Clojure
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/commit/373a6c6d9e8269d149982d1403d2a66428cebbeb&quot;&gt;datatypes&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-02-01 Feet for Battery Guy
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-02-01_Feet_for_Battery_Guy.html
            </link>
            <pubDate>Thu, 1 Feb 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-02-01_Feet_for_Battery_Guy.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I added a bit of code to battery guy
&lt;a href=&quot;https://github.com/jflinchbaugh/objects/commit/55a9739a32c7467401d8b276aa7642cbf441d441&quot;&gt;for some feet&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-31 0.2mm Layer Height
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-31_0.2mm_Layer_Height.html
            </link>
            <pubDate>Wed, 31 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-31_0.2mm_Layer_Height.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be7EseIj1n1/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be7EseIj1n1/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;0.2mm Layer Height&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-08T04:54:17+00:00&quot;&gt;Feb 7, 2018 at 8:54pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-30 Void at Tuesday Tuneday
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-30_Void_Tuesday_Tuneday.html
            </link>
            <pubDate>Tue, 30 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-30_Void_Tuesday_Tuneday.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bet9kGxjQMs/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bet9kGxjQMs/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Void at Tuesday Tuneday&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-03T02:41:51+00:00&quot;&gt;Feb 2, 2018 at 6:41pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-29 Sneak Away
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-29_Sneak_Away.html
            </link>
            <pubDate>Mon, 29 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-29_Sneak_Away.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be7Cq1ZDEUX/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:35.69444444444444% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be7Cq1ZDEUX/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Sneak Away&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-08T04:36:35+00:00&quot;&gt;Feb 7, 2018 at 8:36pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-28 Baked Potatoes
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-28_Baked_Potatoes.html
            </link>
            <pubDate>Sun, 28 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-28_Baked_Potatoes.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be6p0NIj7_X/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:33.37962962962963% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be6p0NIj7_X/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Baked Potatoes&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-08T00:59:25+00:00&quot;&gt;Feb 7, 2018 at 4:59pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-27 Lexx Black at Assorted Studios
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-27_Lexx_Black_at_Assorted_Studios.html
            </link>
            <pubDate>Sat, 27 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-27_Lexx_Black_at_Assorted_Studios.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Be4aYvnjxHF/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Be4aYvnjxHF/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Lexx Black at Assorted Studios&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-02-07T04:06:07+00:00&quot;&gt;Feb 6, 2018 at 8:06pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-26 Battery Action Arms
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-26_Battery_Action_Arms.html
            </link>
            <pubDate>Fri, 26 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-26_Battery_Action_Arms.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I wanted a little action figure type thing
based on a battery,
so I started modeling it.
So far, here&amp;#8217;s the
&lt;a href=&quot;https://github.com/jflinchbaugh/objects/blob/master/action_battery.scad&quot;&gt;code for the arms&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-25 Test-driving the BMW i3
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-25_Test-driving_the_BMW_i3.html
            </link>
            <pubDate>Thu, 25 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-25_Test-driving_the_BMW_i3.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve let a few friends
drive my electric i3
from BMW,
and I would generally let anyone
give it a try,
because it&amp;#8217;s just so much fun.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Here are the most amusing features to test:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Electric torque:
Kick it into &lt;em&gt;Comfort&lt;/em&gt; Mode and floor it!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;One-foot driving:
The car will immediately start regenerating
power to nearly bring the car to a stop
when you lift your foot off the accelerator.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adaptive Cruise Control:
Engage the cruise control in traffic
and watch it maintain a distance
from the car in front of you.
It&amp;#8217;ll even bring the car to a stop automatically
as traffic stops.
(It takes a little practice to trust it.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Self-parking:
I admit this is a trick
that I don&amp;#8217;t often use
in practice,
but it&amp;#8217;s exciting and scary
to show off.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check out the cool eDrive displays:
It shows energy flow, consumption graphs, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It&amp;#8217;s oh so quiet:
Drive down a quiet street
with the windows down.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check out the plug:
it can do J1772 and CCS/DC.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There&amp;#8217;s no engine in the front!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;BMW Connected app:
It offers remote controls,
including heating or cooling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Storage and accessories:
there are nice modular ports
for cup holders and 3D-printed accessories
and nice elastic straps in the back
which make it easy to stow gear.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-24 Shadowland
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-24_Shadowland.html
            </link>
            <pubDate>Wed, 24 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-24_Shadowland.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Tonight, I made a pile of pixels and caught up
on party photos. I present
&lt;a href=&quot;https://www.facebook.com/media/set/?set=a.1071261253017010.1073742126.100003994350816&amp;amp;type=1&amp;amp;l=6c4ee51d34&quot;&gt;Shadowland:
December 2017&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-23 Camouflage
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-23_Camouflage.html
            </link>
            <pubDate>Tue, 23 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-23_Camouflage.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BeUaYJ7Deo-/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BeUaYJ7Deo-/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-23 Camouflage&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-24T04:33:22+00:00&quot;&gt;Jan 23, 2018 at 8:33pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-22 Key Fob Sleeve
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-22_Key_Fob_Sleeve.html
            </link>
            <pubDate>Mon, 22 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-22_Key_Fob_Sleeve.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Twice I&amp;#8217;ve gotten back to my car
to find the windows open.
Other BMW i3 owners have reported
seeing this happen as well.
It happens when I accidentally
press and hold the unlock button
on the remote while the fob
is in my pocket with other things.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some people recommend
buying a $20 cover
for the fob,
but it&amp;#8217;s more fun
to design my own
and print it in TPU.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The car generally unlocks when I touch it
with the key fob nearby in my pocket,
so I don&amp;#8217;t often need to press the buttons.
If I do need to press the buttons,
I can pop it right out of the cover,
since the TPU is flexible.&lt;/p&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BeUXTgEjGZW/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:54.81481481481482% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BeUXTgEjGZW/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-22 Key Fob Sleeve&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-24T04:06:31+00:00&quot;&gt;Jan 23, 2018 at 8:06pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/objects/blob/master/bmw_i3_key_cover.scad&quot;&gt;SCAD code&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-21 Clojure Koans (Part 3)
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-21_Clojure_Koans_Part_3.html
            </link>
            <pubDate>Sun, 21 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-21_Clojure_Koans_Part_3.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/compare/6f8bc2a&amp;#8230;&amp;#8203;b60f260&quot;&gt;Another
day of Clojure Koans&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-20 View from Below
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-20_View_from_Below.html
            </link>
            <pubDate>Sat, 20 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-20_View_from_Below.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BeUUWEGjLjV/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:60.0% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BeUUWEGjLjV/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-20 View from Below&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-24T03:40:39+00:00&quot;&gt;Jan 23, 2018 at 7:40pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-19 Mad Science
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-19_Mad_Science.html
            </link>
            <pubDate>Fri, 19 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-19_Mad_Science.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BeJ6rJjjXTf/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BeJ6rJjjXTf/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-19 Mad Science&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-20T02:43:56+00:00&quot;&gt;Jan 19, 2018 at 6:43pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-18 Growler Cap in TPU
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-18_Growler_Cap_in_TPU.html
            </link>
            <pubDate>Thu, 18 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-18_Growler_Cap_in_TPU.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;One of the first things we designed
when we got a 3D printer
was a replacement cap for my growler.
It broke when I was moving.
Marie made the initial models in TinkerCad,
and I refined it a bit in the wee hours
of the morning.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve printed multiple iterations of it,
so I thought I&amp;#8217;d see how it does in TPU.
I&amp;#8217;ve been having such fun with TPU recently.
This iteration proved to be a little flimsy
on the one tap,
but it &lt;strong&gt;looks&lt;/strong&gt; pretty.
I suspect I&amp;#8217;ll eventually land
on some hybrid solution:
a strong crossbar to apply preasure,
and maybe some TPU for the seal.&lt;/p&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BeJQLb3Dk7N/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.22222222222222% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BeJQLb3Dk7N/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-18 Growler Cap in TPU&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-19T20:32:36+00:00&quot;&gt;Jan 19, 2018 at 12:32pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-17 Clojure Koans (Part 2)
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-17_Clojure_Koans_Part_2.html
            </link>
            <pubDate>Wed, 17 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-17_Clojure_Koans_Part_2.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was back on the koans tonight,
so I got 7 more done.
I barely held on through the recursion work.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Find my latest work in the
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/tree/2018-01-16/src/koans&quot;&gt;github branch&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-16 Clojure Koans (Part 1)
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-16_Clojure_Koans_Part_1.html
            </link>
            <pubDate>Tue, 16 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-16_Clojure_Koans_Part_1.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Clojure Koans is a project of failing assertions
with blanks that are to be filled
by the student.
I&amp;#8217;ve completed them previously,
but I&amp;#8217;m sure I didn&amp;#8217;t understand everything,
so I&amp;#8217;m going through them again.
Here are my
&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-koans/pull/1/files&quot;&gt;solutions&lt;/a&gt;
for the first 7 sections.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-15 OPML Report
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-15_OPML_Report.html
            </link>
            <pubDate>Mon, 15 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-15_OPML_Report.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I got some much-needed help from the
&lt;a href=&quot;https://www.meetup.com/Vancouver-Clojure/&quot;&gt;Vancouver Clojure Meetup&lt;/a&gt;
on a remote Clojure(Script) hack night.
They helped me clean up my code a bit,
and they pointed out some next steps,
like a generic method for accessing
nodes in the XML.
I really appreciate the help,
since I don&amp;#8217;t even know
how good Clojure code looks.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-exercises/blob/be67aef3b5134bf71c0b8d08e65584ee9d87207f/opml/opml.clj&quot;&gt;Here&amp;#8217;s the OPML code.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-14 Polarity Game Rules
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-14_Polarity_Game_Rules.html
            </link>
            <pubDate>Sun, 14 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-14_Polarity_Game_Rules.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Polarity\_(game)&quot;&gt;Polarity&lt;/a&gt;
is a game of placing magnetic discs
so that they lean
on the magnetic fields of others.
It went out of print
a while ago,
so I wanted to make
a scaled-down version
of my own
with some 3D-printed pieces.
I left out some aspects
of the original game.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The rules had always been a bit confusing,
so I&amp;#8217;ll try to distill a set of my own rules here.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Objective&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Be the first to play all discs in your supply.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Collect the most discs in towers, stacks of discs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Setup&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Roll out the playing mat flat
on a stable surface.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Give each player half the discs for their supply:
19 to each player.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Players take turns placing
foundation discs flat
on the mat,
touching no others,
until each player has placed 4 foundations.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Game Play&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Take turns leaning discs from your supply
on magnetic fields of your discs on the mat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Play only on the mat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Play only on your own discs
with your color facing up,
not on your opponent&amp;#8217;s discs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A turn ends
by successfully placing a disc
or by causing a fault.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Play ends immediately upon causing a fault,
so pieces still in the hand
are returned to the player&amp;#8217;s supply.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Faults occur 4 ways:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A leaning disc falls flat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2 or more discs touch each other.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Moving a tower or foundation disc
more than its diameter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Knocking a disc off the mat.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A player can intentionally cause a fault
to convert a leaning disc into a new foundation.&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A player can only convert their own discs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The fault still ends their turn.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Faults are resolved by:&lt;/p&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If discs snap to the disc being placed
while still in the hand,
the player removes the touching discs
and returns them to their supply.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If discs on the board are touching,
the opponent carefully retrieves the discs
allowing them to snap the rest
of the way to form a tower,
and places it anywhere on the mat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;While retrieving or placing a tower,
the tower is treated like a disc being placed,
so causing a fault should be resolved the same way
as when placing a piece.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If a disc just fell, but stayed the same color (a conversion),
it stays where it is, but the turn ends.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If a fault flips one disc from one color to the other,
without otherwise touching other discs,
the opponent can choose to retrieve the disc
and place it anywhere on the mat.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A player is responsible for any faults after a move
until the opponents hand approaches the mat.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;div class=&quot;title&quot;&gt;End of Game&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The game ends when one player depletes
their supply.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A player no longer has any discs
with their color showing
left on the board.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Scoring&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Each disc in a tower is worth +1 point.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each disc in the supply is worth -1 point.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-13 Full Dance Floor at 80s/90s Night
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-13_Full_Dance_Floor_at_80s_90s_Night.html
            </link>
            <pubDate>Sat, 13 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-13_Full_Dance_Floor_at_80s_90s_Night.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bd-ICSAjdeh/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:33.425925925925924% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bd-ICSAjdeh/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Full Dance Floor at 80s/90s Night&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-15T12:49:48+00:00&quot;&gt;Jan 15, 2018 at 4:49am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-12 Over-committed
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-12_Over-committed.html
            </link>
            <pubDate>Fri, 12 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-12_Over-committed.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bd4RGdwDZbJ/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:34.02777777777778% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bd4RGdwDZbJ/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-12 Over-committed&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-13T06:13:35+00:00&quot;&gt;Jan 12, 2018 at 10:13pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-11 Polarity Part 2
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-11_Polarity_Part_2.html
            </link>
            <pubDate>Thu, 11 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-11_Polarity_Part_2.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve put some finishing touches
on the Polarity game pieces,
and it&amp;#8217;s time to print some of them.
They seem to work as intended.&lt;/p&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bd1oSyhjRVA/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:38.7037037037037% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bd1oSyhjRVA/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Not Polarity&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-12T05:38:31+00:00&quot;&gt;Jan 11, 2018 at 9:38pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/objects/blob/b3bd7588352e197238b2f6007f6b6ed547d30535/polarity_piece.scad&quot;&gt;The OpenSCAD code&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-10 Polarity Game Piece
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-10_Polarity_Game_Piece.html
            </link>
            <pubDate>Wed, 10 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-10_Polarity_Game_Piece.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Polarity is a cool little game
where 2 players face off
taking turns
placing all their disc magnets
on a canvas field
until they&amp;#8217;ve placed them all.
Each magnet must &lt;em&gt;lean&lt;/em&gt;
on the magnetic field
of other pieces that
the player has placed
on the playing field.
If a player disturbs
magnets that are already placed,
and they snap together,
then the player needs
to remove the pieces from the field
and return them to their hand.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The game fell out of pubilcation
and got hard to acquire,
so I was out of luck
when I wanted to stop borrowing
a friend&amp;#8217;s copy and have my own.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I had just printed the sleeve
for the puck-shaped Ruuvi Tag,
and that design would be pretty close
to a game piece with a disc magnet inserted.
I had already purchased magnets,
so I&amp;#8217;ll print a bunch of these pieces,
paint the circle on a piece of canvas,
and I&amp;#8217;ll have my game.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ll likely make some variations
in the future,
such as rendering some pieces
as some polygons
instead of circles,
so you can have a limited number of them
that will be really good for tight situations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/objects/blob/5edf950bc91abf5907c265dc0ad62fcb04f62e75/polarity_piece.scad&quot;&gt;The OpenSCAD code&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-09 Ruuvi Tag Weather Station
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-09_Ruuvi_Tag_Weather_Station.html
            </link>
            <pubDate>Tue, 9 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-09_Ruuvi_Tag_Weather_Station.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I grabbed one
of these cool
&lt;a href=&quot;https://tag.ruuvi.com/&quot;&gt;Ruuvi Tag&lt;/a&gt;
embedded platforms
from Nate
at the
&lt;a href=&quot;https://www.meetup.com/CapitalAreaSoftwareEngineers/events/lxbfhnyxcblb/&quot;&gt;Capital Area Software Engineers Hack Night&lt;/a&gt;.
It starts out as a weather station,
which I sort of wanted anyway,
but we also wiped the firmware
on one of them
and loaded &lt;a href=&quot;https://lab.ruuvi.com/espruino/&quot;&gt;Espruino&lt;/a&gt;,
a Javascript runtime.
This thing is destined
to become lots of things,
I&amp;#8217;m sure,
but I designed and printed
a simple holder for it,
so it can hang from my coat for a while,&lt;/p&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BdxRsC9jcyg/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BdxRsC9jcyg/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2018-01-09 Ruuvi Tag Weather Station in the Holder I Made&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-10T13:04:01+00:00&quot;&gt;Jan 10, 2018 at 5:04am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/objects/blob/master/ruuvi_sleeve.scad&quot;&gt;The OpenSCAD code&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-08 More OPML Report
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-08_More_OPML_Report.html
            </link>
            <pubDate>Mon, 8 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-08_More_OPML_Report.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I got the XML parsing looking a little better,
but I&amp;#8217;m still not super-happy with it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/commit/b270ad613be4454e5387ac10e4aa6b48a6b3a390&quot;&gt;See the commit&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Reclaiming Drives to Build a New RAID
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/Reclaiming_Drives_to_Build_a_New_RAID.html
            </link>
            <pubDate>Sun, 7 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/Reclaiming_Drives_to_Build_a_New_RAID.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A couple years ago,
I replaced my old spinner drives
with matching SSDs.
I left the old drives mounted
but disconnected the cables.
I&amp;#8217;ve been watching my photo collection grow
and consume about half my live storage,
so I figured it was time to bring
those slower spinning drives
back online,
so I can move my archive
of old photos off my fast drives
and get a little extra room.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I plugged in the first drive,
and observed that it fortunately did not try
to join the existing RAID arrays.
&lt;code&gt;lsblk&lt;/code&gt; showed me a list of drives and partitions
and how they were currently used,
so I could confidently &lt;code&gt;cfdisk /dev/sda&lt;/code&gt;
to wipe and recreate 1 primary partition on the drive
as type &lt;code&gt;fd (Linux raid autodetect)&lt;/code&gt;.
I rebooted to see the new partition table,
and then installed and did the second drive
(&lt;code&gt;/dev/sdb&lt;/code&gt; in my case).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I setup the new drives in a mirror:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;# create a new RAID1 mirror out of those new partitions:
mdadm --create /dev/md2 --level 1 --raid-devices=2 /dev/sda1 /dev/sdb1

# to ensure it&apos;s still called md2, and not md127 on reboot
update-initramfs -u

# create a filesystem
mkfs -t ext4 /dev/md2

# mount it to copy
mkdir /mnt/new
mount /dev/md2 /mnt/new

# migrate all my photos
rsync -av /home/john/Photos/ /mnt/new&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After the initial migration, I tested it:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Rebooted&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Checked that the array is there with the same name: &lt;code&gt;cat /proc/mdstat&lt;/code&gt;
(It initially had not kept the name,
and that&amp;#8217;s when I learned
to &lt;code&gt;update-initramfs&lt;/code&gt; above.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mounted the new array as &lt;code&gt;/home/john/Photos&lt;/code&gt;,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Checked that Digikam still works.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That looked good, so it&amp;#8217;s time to make it permanent:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Unmounted the new filesystem&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deleted all the old contents of &lt;code&gt;/home/john/Photos&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Added the new array to the &lt;code&gt;/etc/fstab&lt;/code&gt; to mount it automatically&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rebooted!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-07 Chili
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-07_Chili.html
            </link>
            <pubDate>Sun, 7 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-07_Chili.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bdq5HI6DKUj/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:38.24074074074074% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bdq5HI6DKUj/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2017-01-07 Chili&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-08T01:33:50+00:00&quot;&gt;Jan 7, 2018 at 5:33pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-06 Beetle on the Monster Console
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-06_Beetle_on_the_Monster_Console.html
            </link>
            <pubDate>Sat, 6 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-06_Beetle_on_the_Monster_Console.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bdn-G3qDlCM/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:48.00925925925926% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bdn-G3qDlCM/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Beetle on the Monster Console&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-06T22:19:45+00:00&quot;&gt;Jan 6, 2018 at 2:19pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-05 Getting Away with It All
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-05_Getting_Away_with_It_All.html
            </link>
            <pubDate>Fri, 5 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-05_Getting_Away_with_It_All.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/BdmHICpDtOy/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:51.85185185185185% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/BdmHICpDtOy/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;2017-01-05 Getting Away with It All&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-06T05:00:05+00:00&quot;&gt;Jan 5, 2018 at 9:00pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-04 Source Local Bash RC
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-04_Source_Local_Bash_RC.html
            </link>
            <pubDate>Thu, 4 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-04_Source_Local_Bash_RC.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Today, I&amp;#8217;m knocking something off the TODO list:
Ensuring a way to have local, non-shared shell
initialization across workstations,
while still sharing most the code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/rc/pull/1/files&quot;&gt;See the code.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-03 Replacement Brush
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-03_Replacement_Brush.html
            </link>
            <pubDate>Wed, 3 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-03_Replacement_Brush.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned data-instgrm-permalink=&quot;https://www.instagram.com/p/Bdhz_iwjvoi/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:37.5% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot; margin:8px 0 0 0; padding:0 4px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/Bdhz_iwjvoi/&quot; style=&quot; color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;&quot; target=&quot;_blank&quot;&gt;Replacement Brush&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;A post shared by &lt;a href=&quot;https://www.instagram.com/johnflinchbaugh/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;&quot; target=&quot;_blank&quot;&gt; John Flinchbaugh&lt;/a&gt; (@johnflinchbaugh) on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-04T12:55:56+00:00&quot;&gt;Jan 4, 2018 at 4:55am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I just downloaded and printed it.
Find it
&lt;a href=&quot;https://www.thingiverse.com/thing:1174650&quot;&gt;on Thingiverse&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-02 Cars
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-02_Cars.html
            </link>
            <pubDate>Tue, 2 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-02_Cars.html
            </guid>
            <description>
                &lt;blockquote class=&quot;instagram-media&quot; data-instgrm-permalink=&quot;https://www.instagram.com/p/Bdde_XUD2Us/&quot; data-instgrm-version=&quot;8&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:8px;&quot;&gt; &lt;div style=&quot; background:#F8F8F8; line-height:0; margin-top:40px; padding:42.77777777777778% 0; text-align:center; width:100%;&quot;&gt; &lt;div style=&quot; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;&lt;a href=&quot;https://www.instagram.com/p/Bdde_XUD2Us/&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;&quot; target=&quot;_blank&quot;&gt;A post shared by John Flinchbaugh (@johnflinchbaugh)&lt;/a&gt; on &lt;time style=&quot; font-family:Arial,sans-serif; font-size:14px; line-height:17px;&quot; datetime=&quot;2018-01-02T20:35:27+00:00&quot;&gt;Jan 2, 2018 at 12:35pm PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;script async defer src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;
            </description>
            
        </item>
        <item>
            <title>
                2018-01-01 Parse OPML
            </title>
            <link>
                https://www.hjsoft.com/blog/2018/2018-01-01_Parse_OPML.html
            </link>
            <pubDate>Mon, 1 Jan 2018 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2018/2018-01-01_Parse_OPML.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To kick off the Make365,
I took a little time
to start writing some Clojure code
for a task
that I could easily do in Groovy:
parse and display a summary
of my long list of podcasts.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jflinchbaugh/clojure-scratch/pull/1/files?diff=unified&quot;&gt;See the code.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Lifecycles of Test Data
            </title>
            <link>
                https://www.hjsoft.com/blog/2017/Lifecycles_of_Test_Data.html
            </link>
            <pubDate>Fri, 10 Nov 2017 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2017/Lifecycles_of_Test_Data.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Managing data created
by tests
can be a bit
of work.
The environments and frameworks
we allow ourselves
can help us
or sometimes hinder
our efforts.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_complete_isolation&quot;&gt;Complete Isolation&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Building test data
from scratch every time
in isolated storage is best.
That&amp;#8217;s why unit testing
with mocks and data in memory
is so great,
and why it&amp;#8217;s worth the trouble
to use a fresh new database
for every test run.
Grails helps us by using
an in-memory H2 database.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_shared_but_immutable&quot;&gt;Shared, But Immutable&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you must share test data,
confirm its expected state
before testing with it
and NEVER modify it.
Race conditions between threads
changing data are bad,
and races between developers
or build servers changing data
are especially bad as well,
even with only 2 builds.
It&amp;#8217;s embarrassing and limiting
to have a project that can be built
by only one person (or build server) at a time,
and having any more would cause failures.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;_shared_randomized_data&quot;&gt;Shared Randomized Data&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For the tests that must modify data that is shared,
create that data in a random fashion,
and only make changes to the data created by the test.
Try to clean it up at the end,
but if you don&amp;#8217;t that&amp;#8217;s mostly OK,
because you&amp;#8217;ll never try to reuse it again.
Regardless if you try to clean up or not,
you&amp;#8217;ll still need to write the tests
to assume there&amp;#8217;s unexpected data
in case a cleanup failed,
or another test suite is being run concurrently.
This provides opportunity
for the tests to be clearer
about what they really want to say.
Instead of saying,
&quot;There are 2 records, the first is  &apos;Joe&apos; and the second is &apos;Bob&apos;&quot;,
maybe the test should say,
&quot;There&amp;#8217;s at least 1 record,
I see the &apos;Bob64524&apos; record I just added
somewhere in the list,
and all the other records meet my search criteria.&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Extra time spent being careful about your
test data pays back in the end
when you&amp;#8217;re trying to work fast,
rely on your tests,
and won&amp;#8217;t have time to deal
with undue sporadic failures.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Alternate Constructors in Groovy
            </title>
            <link>
                https://www.hjsoft.com/blog/2017/Alternate_Constructors_in_Groovy.html
            </link>
            <pubDate>Thu, 14 Sep 2017 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2017/Alternate_Constructors_in_Groovy.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are a variety of ways to construct objects in Groovy.
We were looking for something more dynamic
where we could parameterize the object
to be constructed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;We found a couple different things that worked
to instantiate an object:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;import groovy.transform.*

@ToString
class MyClass {
    String first
    String last
}

def map = [first: &apos;f&apos;, last: &apos;l&apos;]

// instantiate from literal class reference
println new MyClass(map)
println MyClass.newInstance(map)
println (map as MyClass)
println map.asType(MyClass)

// instantiate from a variable reference the class
def clazz = MyClass

println map.asType(clazz)
// println (map as clazz) // &apos;as&apos; operator doesn&apos;t like &apos;clazz&apos; variable
println clazz.newInstance(map)&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Refiltering Mail
            </title>
            <link>
                https://www.hjsoft.com/blog/2017/Refiltering_Mail.html
            </link>
            <pubDate>Wed, 7 Jun 2017 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2017/Refiltering_Mail.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Spamassassin daemon
on my server
had apparently shutdown,
and I hadn&amp;#8217;t noticed
until I logged in
to check email and found thousands
of emails in my inbox,
instead of having been properly filtered
for spam.
I cleaned up about 100 messages by hand,
but I quickly realized I didn&amp;#8217;t want to do this anymore.
I found a
&lt;a href=&quot;https://unix.stackexchange.com/questions/41971/how-can-i-apply-my-procmail-filters-to-my-maildir-inbox&quot;&gt;tip at the Unix StackExchange&lt;/a&gt;
suggesting that &lt;code&gt;procmail&lt;/code&gt;
could be run again
on each message file
as it sits in the &lt;code&gt;Maildir&lt;/code&gt;,
and each would be processed
through spamassassin normally
and redelivered
to the correct mailbox.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To be safe,
I moved all the new mail files
(&lt;code&gt;~/Maildir/new/\*&lt;/code&gt;)
to &lt;code&gt;/tmp/mail&lt;/code&gt;,
fired up &lt;code&gt;mutt&lt;/code&gt; to see them all gone,
and then piped each file into
&lt;code&gt;procmail&lt;/code&gt; again:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;for x in /tmp/mail/\*; do echo $x; procmail &amp;lt; $x; done&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Back in &lt;code&gt;mutt&lt;/code&gt;,
I could see mail starting
to appear again in my inbox
and in my spam folders.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the loop was done,
and I was sure my inbox looked good,
I removed &lt;code&gt;/tmp/mail&lt;/code&gt;,
and I was back in business.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Groovy Map Minus
            </title>
            <link>
                https://www.hjsoft.com/blog/2017/Groovy_Map_Minus.html
            </link>
            <pubDate>Tue, 6 Jun 2017 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2017/Groovy_Map_Minus.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Groovy is relatively intuitive for me:
I can usually guess
a method or operator
and find it works
as I had guessed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Removing a key/value by the key
from a Map conveniently
eludes me though.
I always guess that I should be able
to &lt;em&gt;minus&lt;/em&gt; a key from a Map
to produce a new Map
with that entry /value removed.
That doesn&amp;#8217;t work,
so I needed to invent my own.
I still not sure how to &lt;em&gt;practically&lt;/em&gt;
apply it everywhere though,
or if it&amp;#8217;s even worthwhile.
In practice,
I always end up writing the &lt;code&gt;findAll&lt;/code&gt; inline.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;@Category(Map)
class MapMinus {
    Map minus(Collection keys) {
        this.findAll { k, v -&amp;gt; ! (k in keys) }
    }
    Map minus(Object key) {
        this - [key]
    }
}

use (MapMinus) {
    assert [b: 2, c: 3,] == [a: 1, b: 2, c: 3,] - &apos;a&apos;
    assert [b: 2, c: 3,] == [a: 1, b: 2, c: 3,] - [&apos;a&apos;]

}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Too Many MacVims Installed
            </title>
            <link>
                https://www.hjsoft.com/blog/2017/Too_Many_MacVim_Installs.html
            </link>
            <pubDate>Mon, 24 Apr 2017 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2017/Too_Many_MacVim_Installs.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I have &lt;a href=&quot;https://github.com/macvim-dev/macvim&quot;&gt;MacVim&lt;/a&gt; installed
by &lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt;,
but MacVim still pops up sometimes to suggest an update,
and &lt;code&gt;brew&lt;/code&gt; updates it as well.
After a year or 2 of this,
my &quot;Open with&amp;#8230;&amp;#8203;&quot; menu
was littered with about 7 different versions
of MacVim dating back to version 7.4.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I figured I&amp;#8217;d try to uninstall it,
&lt;code&gt;brew uninstall macvim&lt;/code&gt;,
and see how many version I&amp;#8217;m left.
The simple uninstall
confirmed that quite a few versions
of MacVim were installed,
and suggested the &lt;code&gt;--force&lt;/code&gt; option
to remove them all, so I did.
That left &lt;code&gt;mvim&lt;/code&gt; no longer working in the shell,
and fortunately,
&lt;strong&gt;all&lt;/strong&gt; the MacVims had disappeared
from the &quot;Open with&amp;#8230;&amp;#8203;&quot; menu as well.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Reinstalling it with &lt;code&gt;brew install macvim&lt;/code&gt;
leaves me nicely with only one MacVim now.
I&amp;#8217;ll have to see if they multiply again,
but now I&amp;#8217;ll have this note to myself
on how to fix it.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Split the Blogs
            </title>
            <link>
                https://www.hjsoft.com/blog/2017/Split_the_Blogs.html
            </link>
            <pubDate>Thu, 6 Apr 2017 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2017/Split_the_Blogs.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Since the beginning when I rebuilt
my blog with JBake,
I intended to split and restyle
the photography work from the tech work.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The photo work just disappeared from here,
so now it can be found at
&lt;a href=&quot;http://blog.johnflinchbaugh.com/&quot;&gt;John Flinchbaugh Photography&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Both sites are rebuilt
whenever new content is pushed
to their respective git repositories.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Ultrawide Display on Debian Linux
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/Ultrawide_Display_on_Debian_Linux.html
            </link>
            <pubDate>Sun, 27 Nov 2016 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/Ultrawide_Display_on_Debian_Linux.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I picked up a very-slightly-used
34-inch
&lt;a href=&quot;http://www.anandtech.com/show/9118/lg-34um67-ultrawide-freesync-review&quot;&gt;LG 34UM67&lt;/a&gt;
display
to use on my Debian Linux workstation
that I use for processing photos.
It&amp;#8217;s an IPS display with 2560x1080 pixels,
so that should fit nicely with photo work.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The built-in graphics on my Dell T20 only supports VGA,
so I also needed to buy a new video card to support HDMI.
My needs are modest, so I picked out an
&lt;a href=&quot;http://amzn.to/2fmQt6I&quot;&gt;Asus ATI Radeon HD6450&lt;/a&gt;.
I&amp;#8217;ve always gone for ATI/AMD and Intel when I could,
since their fully open-source versions
of drivers have worked well in the past.
I&amp;#8217;m also not a gamer, so I can skip over Nvidia.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Upon plugging it all together,
I needed to ensure I had all the &quot;amdgpu&quot; packages
installed from Debian Unstable,
so I could get higher resolutions beyond VGA.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It still didn&amp;#8217;t recognize the crazy-wide 21:9 aspect ratio
out of the box,
so I still had some work to do.
By default, the display awkwardly stretched
the card&amp;#8217;s 1920x1080 across the whole screen.
That can be fixed in the display:
Menu &amp;#8594; Quick Settings &amp;#8594; Ratio &amp;#8594; 1:1,
and then you&amp;#8217;ll have letter boxes on the sides,
but no stretching.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That left me still needing to convince
my Xorg xserver to use the rest of the screen,
all 2560x1080 pixels.
I found a
&lt;a href=&quot;http://unix.stackexchange.com/questions/165030/unlisted-screen-resolution&quot;&gt;stackexchange article&lt;/a&gt;
which provided me just about everything I needed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;olist arabic&quot;&gt;
&lt;ol class=&quot;arabic&quot;&gt;
&lt;li&gt;
&lt;p&gt;Generate a modeline for the new resolution:
&lt;sup class=&quot;footnote&quot;&gt;[&lt;a id=&quot;_footnoteref_1&quot; class=&quot;footnote&quot; href=&quot;#_footnotedef_1&quot; title=&quot;View footnote.&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;cvt 2560 1080 30&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create that new modeline dynamically.
In my case mine, looked like this:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;xrandr --newmode &quot;2560x1080_30.00&quot;  106.75  2560 2640 2896 3232  1080 1083 1093 1102 -hsync +vsync&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the mode to the HDMI interface.
In my case it was named &lt;code&gt;HDMI-0&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;xrandr --addmode HDMI-0 2560x1080_30.00&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then switch to it:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;xrandr --output HDMI-0 --mode 2560x1080_30.00&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once I had proven these settings to work nicely,
I obviously wanted to keep them,
so I persisted them by creating a file for them
in the xorg config directory along-side the existing configs
that Debian provides.
I called my file
&lt;code&gt;/usr/share/X11/xorg.conf.d/40-monitor.conf&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;Section &quot;Monitor&quot;
    Identifier &quot;HDMI-0&quot;
    Modeline &quot;2560x1080_30.00&quot;  106.75  2560 2640 2896 3232  1080 1083 1093 1102 -hsync +vsync
    Option &quot;PreferredMode&quot; &quot;2560x1080_30.00&quot;
EndSection&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Upon reboot,
everything was working,
and I was happy for a week or 2,
but I noticed performance wasn&amp;#8217;t great during fast 2D updates.
I was seeing some tearing
when I&amp;#8217;d play a video in full-screen
or even a large window.
I dug around a little in the &lt;code&gt;amdgpu(4)&lt;/code&gt; man page
and found a couple more options to add to my &lt;code&gt;40-monitor.conf&lt;/code&gt; file:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;Section &quot;Device&quot;
    Identifier &quot;AMDgpu&quot;
    Option &quot;TearFree&quot; &quot;on&quot;
    Option &quot;ShadowPrimary&quot; &quot;on&quot;
EndSection&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Those final adjustments solved the performance problem for me.
I expect those adjustments may only be specific to the cheap card
I bought, though.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Next I&amp;#8217;ll need to figure out how to speed up my mouse,
since it&amp;#8217;s such a long way
from one side of the screen to the other.
I&amp;#8217;ll also further rethink the windows I keep beside one another.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I bought the display figuring Linux can be made to do anything,
and I was right. I just needed to figure out how.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;div class=&quot;footnote&quot; id=&quot;_footnotedef_1&quot;&gt;
&lt;a href=&quot;#_footnoteref_1&quot;&gt;1&lt;/a&gt;. 60Hz worked for all the lesser resolutions, but when I tried 60Hz at the highest resolution, the display blacked out, so I had to drop back to 30Hz. It looks fine.
&lt;/div&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                JBake with MarkupTemplateEngine
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/JBake_with_MarkupTemplateEngine.html
            </link>
            <pubDate>Thu, 3 Nov 2016 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/JBake_with_MarkupTemplateEngine.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;JBake 2.5.0 got support for the MarkupTemplateEngine,
so I wanted to give it a try, since structured code will be nicer
than extreme scriptlet stuff that was happening in the original Groovy
template example.
The &lt;a href=&quot;https://github.com/jbake-org/jbake-example-project-groovy-mte&quot;&gt;stock MTE example&lt;/a&gt;
shows off MTE templates, but it also switched to
&lt;a href=&quot;http://foundation.zurb.com/&quot;&gt;Foundation&lt;/a&gt;
in place of
&lt;a href=&quot;http://getbootstrap.com/&quot;&gt;Bootstrap&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve been looking forward to really learning Bootstrap
for work and my personal projects,
so I&amp;#8217;m not looking to switch frameworks right now,
so I rebuilt my own
&lt;a href=&quot;https://github.com/jflinchbaugh/jbake-example-project-groovy-mte-bootstrap&quot;&gt;example project with MTE and Bootstrap&lt;/a&gt;
based on the original Groovy/Bootstrap sample I had previously used.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Hopefully, I&amp;#8217;ll get a little feedback and the JBake people will
incorporate my contribution.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                First Transistor Radio
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/First_Transistor_Radio.html
            </link>
            <pubDate>Tue, 18 Oct 2016 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/First_Transistor_Radio.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The
&lt;a href=&quot;http://www.pbs.org/transistor/background1/events/tradio.html&quot;&gt;First Transistor Radio&lt;/a&gt;
hit the market on this day (18 October) in 1954.
(Read that in the voice of Garrison Keillor.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Learning this today reminded me
of one of my first pieces
of electronics as a kid.
It was a little blue, portable &lt;em&gt;transistor&lt;/em&gt; AM radio
that took 2 AA batteries.
I got it as a prize
from the school fundraiser,
and I specifically remember it being listed
as a &lt;em&gt;transistor&lt;/em&gt; radio,
like that was something special.
I&amp;#8217;m not sure how special that really was in around 1985,
since we&amp;#8217;d evidently had the technology readily available
since 1954.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That radio was &lt;strong&gt;packed&lt;/strong&gt; full of components on a board
in its blue plastic shell.
From the first time I had to open it to put batteries in it,
I was intrigued by it&amp;#8201;&amp;#8212;&amp;#8201;solder joints, variable capacitor, capacitors, resistors,
transistors, antenna coil with ferrous core,
bits of glue holding it together, etc.
That thing came apart many times as I compared
its contents to other devices and to those
on my electronics kit later.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Google Apps on Kindle Fire Tablet
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/Google_Apps_on_Kindle_Fire_Tablet.html
            </link>
            <pubDate>Tue, 28 Jun 2016 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/Google_Apps_on_Kindle_Fire_Tablet.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Ben&amp;#8217;s birthday is approaching,
so I picked up the inexpensive
&lt;a href=&quot;http://amzn.to/28Z9Jiq&quot;&gt;Amazon Fire Tablet from 2015&lt;/a&gt;.
It&amp;#8217;s running FireOS 5.1.x.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;He played with it running stock for a week or so,
using it to mostly read library books,
and of course, to play some games
from the Amazon Appstore.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Reading was the main purpose
to have the tablet,
but I also wanted it for communication
and organization.
That means getting the Google Apps installed on it.
The only things available
in the Amazon Appstore
were these shell apps
that were nothing more
than a wrapper
aronud a web pane,
so I needed to proceed
to install the Google Play framework
and app store.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Before even buying the tablet,
I had found some links,
so I was pretty sure it could be done.
I started with a
&lt;a href=&quot;http://forum.xda-developers.com/amazon-fire/general/installing-google-framework-playstore-t3216122&quot;&gt;post on XDA&lt;/a&gt;
which got me the link
to an &lt;a href=&quot;http://rootjunkysdl.com/files/Amazon%20Fire%205th%20gen/Amazon-Fire-5th-Gen-Install-Play-Store.zip&quot;&gt;all-in-one ZIP&lt;/a&gt; of everything I&amp;#8217;d need.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It came with the APK files
and directions to run a Windows BAT file,
which obviously isn&amp;#8217;t going to happen
on any machine I have,
so I cracked open the BAT,
and followed the script running the important bits
by hand:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Login to the tablet as the original login&amp;#8201;&amp;#8212;&amp;#8201;Ben&amp;#8217;s secondary login didn&amp;#8217;t work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable Developer Options&lt;/strong&gt;&amp;#8201;&amp;#8212;&amp;#8201;Settings &amp;#8594; Device Options &amp;#8594; tap serial number serveral times,
and the Developer Options will appear.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable USB Debugging&lt;/strong&gt;&amp;#8201;&amp;#8212;&amp;#8201;Settings &amp;#8594; Device Options &amp;#8594; Developer Options &amp;#8594; Enable ADB to &lt;em&gt;Enabled&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable Side Loading&lt;/strong&gt;&amp;#8201;&amp;#8212;&amp;#8201;Settings &amp;#8594; Device Options &amp;#8594; Developer Options &amp;#8594; Enable Untrusted Sources&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I was on a Mac, so the USB drivers were already good,
and I had Android Developer Tools already installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the all-in-one ZIP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the commands at the shell:&lt;/p&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;# see that tablet device is listed
adb devices
adb install com.google.android.gms-6.6.03_\(1681564-036\)-6603036-minAPI9.apk
adb install GoogleLoginService.apk
adb install GoogleServicesFramework.apk
adb shell pm grant com.google.android.gms android.permission.INTERACT_ACROSS_USERS
adb install com.android.vending-5.9.12-80391200-minAPI9.apk

# disable ads on cheap tablet, though I already paid to have it disabled.
adb shell pm hide com.amazon.kindle.kso&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After those couple commands,
I found I had the Play Store icon,
and fired it up,
did the Play Services upgrade,
and started installing the Gmail, Calendar, Hangouts, and Keep.
I did find Inbox would crash after setup, but Gmail was fine.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                LIFO Life
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/LIFO_Life.html
            </link>
            <pubDate>Wed, 24 Feb 2016 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/LIFO_Life.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Information Overload&lt;/div&gt;
&lt;p&gt;I&amp;#8217;ve heard lots of talk recently about
&lt;a href=&quot;http://www.wnyc.org/story/case-infomagical/&quot;&gt;information overload&lt;/a&gt;.
I even tried to do that whole Infomagical Challenge,
and I couldn&amp;#8217;t really convince myself it was necessary.
I just don&amp;#8217;t seem to have that addiction trait.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Social&lt;/div&gt;
&lt;p&gt;Our social feeds are in reverse chronological order&amp;#8201;&amp;#8212;&amp;#8201;dip in, see the latest, scroll a little to see something older,
and then move on.
Sure I&amp;#8217;ll hit reload a couple times
when I&amp;#8217;m bored to see something new,
(but I could totally stop whenever I want).
I don&amp;#8217;t feel like I need to necessarily click the bait
or read everything.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;News and Current Events&lt;/div&gt;
&lt;p&gt;When I want to keep up with a little news
outside of the social networks,
&lt;a href=&quot;http://feedly.com/&quot;&gt;Feedly&lt;/a&gt; is showing me headlines
from newest to oldest.
I&amp;#8217;m sure I miss some news,
since I only scroll through maybe 100 stories
at a time,
but anything worth knowing
will be mentioned a couple times
over the days and weeks.
I just never see some blips in news,
and that&amp;#8217;s OK&amp;#8201;&amp;#8212;&amp;#8201;it probably wasn&amp;#8217;t worth the time anyway.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Podcasts&lt;/div&gt;
&lt;p&gt;I have &lt;a href=&quot;http://www.beyondpod.mobi/android/index.htm&quot;&gt;BeyondPod&lt;/a&gt;
configured to do the same thing for my audio listening.
Sometimes I have 50 podcasts queued up,
and sometimes I run it down to 0.
I have 3 priorities into which I categorize each feed,
so I can always hear my favorites first,
but within each of those priorities,
the episodes are still presented in LIFO order,
so I don&amp;#8217;t fall behind.
When I listen my way down
to something that&amp;#8217;s just out-of-date
and low in priority,
I can just delete it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Photo Workflow&lt;/div&gt;
&lt;p&gt;The reverse-chronological (or LIFO, last-in-first-out) order
works great for my photo workflow too.
When I was working chronologically,
&lt;strong&gt;every&lt;/strong&gt; photo ended up late&amp;#8201;&amp;#8212;&amp;#8201;up to a month or 2 at times.
Working from the newest stuff back fixed that.
The latest party or event could often
get posted, while some lower-priority sets of photos
could wait a little.  When I got super-busy,
&lt;strong&gt;some&lt;/strong&gt; photos could end up a month or 2 delayed,
but not &lt;strong&gt;all&lt;/strong&gt; of them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Culling in Reverse&lt;/div&gt;
&lt;p&gt;LIFO even saves me time when I&amp;#8217;m culling photos,
which is the &lt;strong&gt;first&lt;/strong&gt; thing I do after importing photos.
We often work a scene and shoot until we&amp;#8217;re convinced
that we have the shot we want,
so I start looking for the keepers from the &lt;strong&gt;end&lt;/strong&gt;
of the set and browse my way back
to the &lt;strong&gt;beginning&lt;/strong&gt; of the set.
When I know I have the keeper,
I can more confidently skip all the previous images
that led me to the keeper.
There was no point in studying
those earlier half-baked images
when I&amp;#8217;ll keep finding better versions
as I work forward.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Delete Most the Photos&lt;/div&gt;
&lt;p&gt;Once I&amp;#8217;ve picked that 10% I&amp;#8217;m keeping,
I delete everything else,
because I still have the end in mind&amp;#8201;&amp;#8212;&amp;#8201;reasonably backing up all my images.
Some probably find that idea backward too.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                Adventures with the M3D Micro
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/Adventures_with_the_M3D_Micro.html
            </link>
            <pubDate>Fri, 12 Feb 2016 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/Adventures_with_the_M3D_Micro.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The kids got a little
&lt;a href=&quot;https://printm3d.com/themicro/&quot;&gt;M3D Micro&lt;/a&gt;
for Christmas,
and so started our adventures into 3D printing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I intended to let the kids
learn the whole thing from scratch,
but I knew I was throwing them
a little bit of a curve ball
by only having Linux netbooks
to drive it,
so I ended up getting a headstart
setting up
&lt;a href=&quot;http://octoprint.org/&quot;&gt;OctoPrint&lt;/a&gt;
and the
&lt;a href=&quot;https://github.com/donovan6000/M3D-Fio&quot;&gt;M3D-Fio&lt;/a&gt; driver.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At the end of December 2015
when I was starting,
the M3D-Fio driver
had some configurations
in the repository
that might not have been optimal,
so I was fighting a bit
with a few problems:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;adhesion to the bed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gaps and lines in the bottom layers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;stringing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;speed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;other quality issues&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I thrashed around for quite some time
changing settings I didn&amp;#8217;t really understand,
and Matthew spent a night helping me
and showing me what his much larger printer
could do&amp;#8201;&amp;#8212;&amp;#8201;that helped immensely,
since it gave me some hints
as to what I should be expecting from my printer.
I also learned what the different settings
should be doing for me.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For an entire Sunday,
about 18 hours,
I printed 1cm test cubes
and experimented with settings.
I quickly decided
I should have my settings and profiles
tracked in my own local git repository,
so I can always rollback
to previous settings.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After a week or so,
some updates
from the M3D-Fio repository
brought us more success
with more default settings
that matched the defaults
found in the original software
from Micro.
The conservative settings also added rafts
and slowed down the print a bit.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I was able to take those conservative settings
and speed them up a bit and remove the rafts&amp;#8201;&amp;#8212;&amp;#8201;the BuildTak holds a print pretty well
even without the raft.
I based my customizations on the stock profile
that prints at 0.25mm layer thickness
to get even more speed
out of the printer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I also found keeping a -0.4mm
bed offset on my printer helped get
just enough squish in the first layer
to help get a more solid bottom layre
and good adhesion to the bed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Another notable configuration tip I had picked up was
to set the wall thickness to a multiple
of the nozzle size.
In the case of the M3D,
the nozzle thickness is 0.35mm,
so I&amp;#8217;m using a thickness of 0.70mm.
Before I had learned that,
a couple
of my initial &lt;a href=&quot;http://www.thingiverse.com/thing:1172630&quot;&gt;chachkies&lt;/a&gt;
came out with thin gaps where the slicer should
have decided to fill.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;m at the point now
that I have pretty reasonable expectations
for what the printer can do,
and I can start up the machine
after a week or 2 of sitting,
and run a print through reliably
without needing to make adjustments.
That&amp;#8217;s great for letting the kids
just make whatever they want.
Both kids have been able to get
into Tinkercad and produce some printable designs.
Ben&amp;#8217;s doing Nerf rail accessories,
and Marie is designing a new cap
for my growler.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Finally, I&amp;#8217;ve pushed my configurations
to a
&lt;a href=&quot;https://github.com/jflinchbaugh/m3d_config.git&quot;&gt;public git repository&lt;/a&gt;
to serve as reference
for anyone else who cares.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;div class=&quot;title&quot;&gt;Update 2016-02-23&lt;/div&gt;
&lt;p&gt;An &lt;a href=&quot;https://github.com/donovan6000/M3D-Fio/commit/eb179b81abb4498d32bca3573396f25caac1e330&quot;&gt;update&lt;/a&gt;
added a slicker settings dialog
to allow more intuitive adjustments
to a profile,
so I&amp;#8217;ve been testing relatively successfully
with using the stock PLA profile
and just flipping options.
I did find that using a raft
in &quot;medium quality&quot; mode fused
my little 10mm test cube to the raft
in a way that I can&amp;#8217;t remove it.
I usually avoid the raft anyway, though,
since it sticks so well to the buildtak already.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                JBake
            </title>
            <link>
                https://www.hjsoft.com/blog/2016/JBake.html
            </link>
            <pubDate>Tue, 5 Jan 2016 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2016/JBake.html
            </guid>
            <description>
                &lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve moved the blog to a static site generated by
&lt;a href=&quot;http://jbake.org/&quot;&gt;JBake&lt;/a&gt;.
The source for the content lives in my
&lt;a href=&quot;https://github.com/jflinchbaugh/techblog_content&quot;&gt;techblog project in Github&lt;/a&gt;,
so I have a full versioning of my content
for the small price of a git workflow.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I installed JBake using the familiar &lt;a href=&quot;http://sdkman.io/&quot;&gt;SDKMan&lt;/a&gt;
that I already use to manage my Grails and Groovy installations.
I initialized it with the Groovy templating engine and have started
customizing the templates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To make sure this thing is easy to update,
I keep a local clone of the repo, so I can update it any time
and push whenever I&amp;#8217;m ready.  I have a shell script
scheduled to run on the server which basically does:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;cd techblog
git fetch
git merge | grep &quot;Already&quot; &amp;gt; /dev/null || jbake&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;That little bit of code
only runs &lt;code&gt;jbake&lt;/code&gt;
if the &lt;code&gt;git pull&lt;/code&gt; doesn&amp;#8217;t say &quot;Already up-to-date&quot;.
That provided me a simple little &quot;continuous integration&quot; hook
that polls git for changes to trigger the build.
I&amp;#8217;ll probably use this trick in other places.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I brought all my old content from my old database
into the new platform using a quick little Groovy script
to dump out an HTML file for each article
including the header of metadata for JBake&amp;#8217;s use.
While most of these old articles will remain HTML,
I intend to use
&lt;a href=&quot;http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/&quot;&gt;AsciiDoctor&lt;/a&gt;
format for all the new stuff.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;I&amp;#8217;ve been collecting a long list
of (mostly technical) articles
to write,
but replacing the old platform
kept trumping my attempts to write.
Hopefully,
this move can open the flood gates,
and eventually,
I&amp;#8217;ll break out another instance
of it for the photography blog.
JBake should make it easy
and interesting to continue the blogs.&lt;/p&gt;
&lt;/div&gt;
            </description>
            
        </item>
        <item>
            <title>
                XFCE Desktop
            </title>
            <link>
                https://www.hjsoft.com/blog/XFCE_Desktop.html
            </link>
            <pubDate>Mon, 26 Jan 2015 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/XFCE_Desktop.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve written about &lt;a href = &quot;/blog/link/Desktop_Luddite&quot;&gt;trying new desktops&lt;/a&gt; previously, and how much trouble I&apos;ve had.  I did settle into Gnome 3 nicely for a while, but my computers continued to get older and slower.&lt;/p&gt;
&lt;p&gt;Even when I upgraded my main desktop machine, I had initially only put 4G of RAM in it, and that was barely enough to be a full-time photo workstation, so I still needed to slim down my environment, so I installed XFCE on my netbooks, VMs, and desktop/server machine.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://www.xfce.org/&quot;&gt;XFCE environment&lt;/a&gt; is &lt;em&gt;much&lt;/em&gt; more familiar with plain window decorations, panels and widgets I can add and remove as I care, and a fixed number of multiple desktops which I can create and just keep available.  The ability to piece together the little components is what was really missing from Gnome 3. I also like to be able to customize where my panels and widgets live.  I find it more efficient to use a little space on the left and right of a wide screen for my panels instead of having them stuck to the top or bottom of the screen.&lt;/p&gt;
&lt;p&gt;A convenient searching menu and launcher bound to a key combination is the last component I&apos;ve really come to need these days.  I&apos;ve had it on OS X, Gnome 3, Unity, and even in Windows 7.  &lt;a href = &quot;http://gottcode.org/xfce4-whiskermenu-plugin/&quot;&gt;Whisker Menu&lt;/a&gt; is an alternate menu widget for the XFCE panel that fills that need.  Add a key binding (Alt-Space for me) to fire the show-menu command, and I&apos;m in business!&lt;/p&gt;
&lt;p&gt;I added lots more RAM to my main desktop machine, but I&apos;m still going to stick with XFCE, since it feels more native to the UNIX way &amp;mdash; stringing together a couple small programs to get a bigger job done well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bachelor Week 2013
            </title>
            <link>
                https://www.hjsoft.com/blog/Bachelor_Week_2013.html
            </link>
            <pubDate>Mon, 12 Aug 2013 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bachelor_Week_2013.html
            </guid>
            <description>
                &lt;p&gt;Bachelor Week 2013 (where Claire and kids ran off to the beach and left me behind) started out with &lt;a href = &quot;https://plus.google.com/u/0/photos/116753238490512931408/albums/5902642308660323361&quot;&gt;photographing&lt;/a&gt; at the &lt;a href = &quot;http://www.mengesmillssteam.com/&quot;&gt;Menges Mills Tractor Show&lt;/a&gt; for the third year, and the week ended with a quick road trip after work to join the family for a day on the beach.&lt;/p&gt;
&lt;p&gt;In between, I got to a party with some photographer friends, sat in front of the computer for many, many hours catching up on photo processing for the Project 365 (whew!) and beyond.  I also managed to have some friends over for an Xbox night to play a little good old Halo 2 and &lt;a href = &quot;http://en.wikipedia.org/wiki/Sonic_%26_All-Stars_Racing_Transformed&quot;&gt;Sonic All-Stars Racing Transformed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While continuing to go to work, I listened to podcasts like crazy (at &lt;a href = &quot;http://www.beyondpod.com/Android/&quot;&gt;1.5x speed!&lt;/a&gt;) to get caught up on all the news in technology and photography.&lt;/p&gt;
&lt;p&gt;It was a much-needed reset, and I was glad to rejoin the family at the end of the week (and start adding to my photo backlog again)!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Replacing a Drive in the Software RAID
            </title>
            <link>
                https://www.hjsoft.com/blog/Replacing_a_Drive_in_the_Software_RAID.html
            </link>
            <pubDate>Thu, 13 Dec 2012 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Replacing_a_Drive_in_the_Software_RAID.html
            </guid>
            <description>
                &lt;p&gt;I realized upon trying to replace a drive in my Linux software RAID, that I had never previously documented this process.&lt;/p&gt;
&lt;p&gt;The power failed a couple days ago, and sitting around for 10 hours not spinning was bad for my one Western Digital 500GB drive, so it never came back online, but the computer booted up just fine with 2 of the 3 drives. I ordered a new 1GB drive to replace it within 2 hours of the problem.&lt;/p&gt;
&lt;p&gt;When the new drive arrived, I shutdown the computer, unplugged the failing SATA drive, and replaced it with the new one.  Linux again booted up with only 2 drives active.&lt;/p&gt;
&lt;p&gt;To ensure that the partitions matched, I did an &lt;code&gt;sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;/code&gt;. &lt;code&gt;cfdisk&lt;/code&gt; was unhappy with the drive initially, but &lt;code&gt;fdisk&lt;/code&gt; was happy to read the table and write it back cleanly. Then I could open it again in &lt;code&gt;cfdisk&lt;/code&gt; and add one more primary partition to use the extra non-redundant 500G on the new drive.&lt;/p&gt;
&lt;p&gt;With the partitions in place, it was time to insert the new
partitions back into the RAID devices:  
&lt;code&gt;mdadm /dev/md0 --add /dev/sdb1&lt;/code&gt;, 
&lt;code&gt;mdadm /dev/md2 --add /dev/sdb5&lt;/code&gt;, etc, until all the drives were re-established.  Watching &lt;code&gt;/proc/mdstat&lt;/code&gt;, I could see that the RAID started recovering the devices, and I could go to bed.&lt;/p&gt;
&lt;p&gt;I did manage to do something wrong at one point, so a quick
&lt;code&gt;mdadm /dev/md0 --fail /dev/sdb1&lt;/code&gt; 
and &lt;code&gt;mdadm /dev/md0 --remove /dev/sdb1&lt;/code&gt; allowed me to fail and remove a partition, fix it up, then add it back when I was done. All this could be done with the system up and running&amp;mdash;that&apos;s pretty convenient.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Impressions of SlimBean ROM for Nexus S
            </title>
            <link>
                https://www.hjsoft.com/blog/Impressions_of_SlimBean_ROM_for_Nexus_S.html
            </link>
            <pubDate>Fri, 16 Nov 2012 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Impressions_of_SlimBean_ROM_for_Nexus_S.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve had my Nexus S for about a year and a half now, and I was stuck on an old stock Android for a long time&amp;mdash;the AT&amp;amp;T version of this phone just never got the updates, so Matt helped me out and got me started with CM9 on the device back in the Spring.&lt;/p&gt;
&lt;p&gt;Since getting some experience rooting and romming, I&apos;ve tracked CM9, tried CM10, loaded stock Android 4.0 and 4.1. I found my device with stock 4.1 with my usual loaded apps (like BeyondPod, Tasker, etc) to be a little light on RAM.  BeyondPod kept getting pushed out of memory when, really, it&apos;s my #1 app for daily use.&lt;/p&gt;
&lt;p&gt;I needed to free up some memory, so I figured &lt;a href = &quot;http://slimroms.net/&quot;&gt;SlimBean&lt;/a&gt; would be worth a look.  It seems to be based on AOSP with some of the most useful features of other ROMs merged, like notification toggles, etc.  It&apos;s also relatively easy to install, though the upgrades keep recommending a full wipe and reinstall, which can be inconvenient, even with a ROM Toolbox doing my backup and restore of applications.&lt;/p&gt;
&lt;p&gt;One of the most notable &lt;em&gt;features&lt;/em&gt; is that the default DPI is set low (182ppi), so everything ends up tiny.  Couple that with a tighter grid-size in Hololauncher and you can cram &lt;em&gt;lots&lt;/em&gt; of app icons and widgets on the screen.  I at one point bumped it back up to 200 to get it just a little more readable, but in the latest install, I&apos;ve just been leaving it set to the default.&lt;/p&gt;
&lt;p&gt;Amazon Appstore offered me my first problem. ROM Toolbox half restored it, but not the whole way, so it had some data files laying around but not the rest of the app.  When I went to install it again from APK, it kept telling me &quot;App is not installed&quot;. I finally figured out in this last time I wiped and installed, that I needed to delete the Appstore&apos;s data directory in Root Browser, and then it happily installed.&lt;/p&gt;
&lt;p&gt;In the end, I&apos;m not sure I gained much free memory&amp;mdash;it still seems tight, and applications are still quick to get pushed out.
I think what&apos;s &lt;em&gt;slim&lt;/em&gt; about the ROM, is that it merged in some select features from CM and others without taking up as much space for &lt;em&gt;everything&lt;/em&gt; those other ROMs offer.  I like this ROM, and I hope to see it make Android 4.2.x and later available on my little Nexus S.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Desktop Luddite
            </title>
            <link>
                https://www.hjsoft.com/blog/Desktop_Luddite.html
            </link>
            <pubDate>Thu, 27 Oct 2011 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Desktop_Luddite.html
            </guid>
            <description>
                &lt;img src = &quot;http://www.hjsoft.com/~john/images/unity.png&quot; alt = &quot;get off my lawn!&quot; style = &quot;float: right; margin: 1ex;&quot;/&gt;
&lt;p&gt;I&apos;ve been happily kicking along in Gnome 2.x-whatever on my Debian and Ubuntu machines for quite sometime.  When Ubuntu tried to push me over into &lt;a href = &quot;http://unity.ubuntu.com/&quot;&gt;Unity&lt;/a&gt; back in April, I gave it half a day, then reverted back to Gnome 2 for familiarity and more workspaces.&lt;/p&gt;
&lt;p&gt;Well, it&apos;s October now, and Ubuntu made the push again, but this time, it also pushed Gnome up to 3.2, which is drastically different as well. With no solace in Gnome, I&apos;ve had to just sort of try to figure out the Unity-way with no controls and their &quot;it&apos;s for your own good&quot; mentality.  (It feels a lot like that other OS that I wiped off a Mac Book Pro.)&lt;/p&gt;
&lt;p&gt;A couple more days passed, and my Debian unstable machine upgraded to Gnome 3.0, and my good ol&apos; Gnome 2.x was gone. So I&apos;m trying Unity on my Ubuntu netbook, and I&apos;m trying Gnome 3.0 on my photo workstation/server.  They&apos;re similar enough, but it&apos;s still disorienting bouncing between the 2 environments -- while Unity hasn&apos;t offered any absolute show-stoppers, I may land on Gnome for consistency.  It might also be time to look into KDE or XFCE -- somehow, I think they probably still offer me all the knobs and buttons I&apos;ve used previously to customize my desktop.&lt;/p&gt;
&lt;p&gt;If I wanted to give up my choices, I could just run a Mac -- they have nice hardware and a Unixy OS.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Quick and Easy Groovy for the Web
            </title>
            <link>
                https://www.hjsoft.com/blog/Quick_and_Easy_Groovy_for_the_Web.html
            </link>
            <pubDate>Wed, 22 Jun 2011 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Quick_and_Easy_Groovy_for_the_Web.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://groovy-lang.org/&quot;&gt;Groovy&lt;/a&gt; can be used pretty easily to spin up some simple web pages in almost the same way one would hack out some PHP or JSP without going to the trouble to do an all-out &lt;a href = &quot;http://grails.org/&quot;&gt;Grails&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://groovy-lang.org/servlet.html&quot;&gt;Groovy Servlet&lt;/a&gt; allows you to pack up the &lt;code&gt;groovy-all-*.jar&lt;/code&gt;, a simple &lt;code&gt;web.xml&lt;/code&gt;, and whatever &lt;code&gt;*.groovy&lt;/code&gt; scripts you want and deploy it right into Tomcat as a plain WAR file.  The Groovy Servlet page &lt;/p&gt;
&lt;p&gt;Here&apos;s a bit of a script I put together to jump start a simple Groovlet project by packaging a WAR file from a directory of scripts.  This isn&apos;t Groovy Servlet code itself, but just a command-line tool.  (The Groovy Servlet page linked previously has examples for writing your own servlets.) This script will copy in the Groovy JAR and generate the basic &lt;code&gt;web.xml&lt;/code&gt; to wire up the &lt;code&gt;GroovyServlet&lt;/code&gt; to dynamically execute your scripts.  I also have a downloadable copy of &lt;a href = &quot;http://www.hjsoft.com/~john/package_groovlet.groovy&quot;&gt;package_groovlet.groovy&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;#!/usr/bin/env groovy

if (args.size() &amp;lt; 1) {
    print &quot;&quot;&quot;\
        |Usage: package_groovlet.groovy &amp;lt;war-name&amp;gt;
        |Package the current directory into a Groovy Servlet war.
        |&quot;&quot;&quot;.stripMargin()
    return
}

def war = args[0]
def embed = &quot;${System.getenv()[&apos;GROOVY_HOME&apos;]}/embeddable&quot;

def ant = new AntBuilder()

ant.sequential {
    delete(dir: &apos;build&apos;)
    mkdir(dir: &apos;build/WEB-INF/lib&apos;)
    copy(toDir: &apos;build/WEB-INF/lib&apos;) {
        fileset(dir: embed) {
            include(name: &apos;groovy-all-*.jar&apos;)
        }
    }
    copy(toDir: &apos;build&apos;) {
        fileset(dir: &apos;.&apos;) {
            exclude(name: &apos;build/**&apos;)
        }
    }
}

new FileOutputStream(&apos;build/WEB-INF/web.xml&apos;).withWriter { webxml -&amp;gt;
    webxml.print &quot;&quot;&quot;\
        &amp;lt;!DOCTYPE web-app PUBLIC
          &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;
          &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot; &amp;gt;
        &amp;lt;web-app&amp;gt;
            &amp;lt;servlet&amp;gt;
                &amp;lt;servlet-name&amp;gt;Groovy&amp;lt;/servlet-name&amp;gt;
                &amp;lt;servlet-class&amp;gt;groovy.servlet.GroovyServlet&amp;lt;/servlet-class&amp;gt;
            &amp;lt;/servlet&amp;gt;
            &amp;lt;servlet-mapping&amp;gt;
                &amp;lt;servlet-name&amp;gt;Groovy&amp;lt;/servlet-name&amp;gt;
                &amp;lt;url-pattern&amp;gt;*.groovy&amp;lt;/url-pattern&amp;gt;
            &amp;lt;/servlet-mapping&amp;gt;
         &amp;lt;/web-app&amp;gt;
     &quot;&quot;&quot;.stripIndent()
}

ant.jar(destfile: &quot;build/${war}&quot;, basedir: &apos;build&apos;)
println &quot;Created build/${war}&quot;&lt;/pre&gt;
&lt;/blockquote&gt;

            </description>
            
        </item>
        <item>
            <title>
                Tiniest USB Stick
            </title>
            <link>
                https://www.hjsoft.com/blog/Tiniest_USB_Stick.html
            </link>
            <pubDate>Mon, 13 Dec 2010 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Tiniest_USB_Stick.html
            </guid>
            <description>
                &lt;p&gt;I made the tiniest USB drive for my car using the &lt;a href=&quot;http://www.amazon.com/gp/product/B002HGFKR8?ie=UTF8&amp;tag=johnflinswebl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002HGFKR8&quot;&gt;elago microSD card reader&lt;/a&gt; and a &lt;a href=&quot;http://www.amazon.com/gp/product/B001L1H0SC?ie=UTF8&amp;tag=johnflinswebl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001L1H0SC&quot;&gt;16G microSD card&lt;/a&gt;&amp;mdash;it&apos;s more of USB nub than a stick, but it&apos;s big enough to hold my entire music collection I&apos;ve collected over the years.  The USB port on the new Fiesta is in the middle console out in the open, so I wanted the smallest device for it, so it wouldn&apos;t be damaged.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ubuntu on EeePC 1201N
            </title>
            <link>
                https://www.hjsoft.com/blog/Ubuntu_on_EeePC_1201N.html
            </link>
            <pubDate>Tue, 7 Dec 2010 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ubuntu_on_EeePC_1201N.html
            </guid>
            <description>
                &lt;h1&gt;New Machine&lt;/h1&gt;
&lt;p&gt;Back in the summer after being laid off at &lt;a href = &quot;http://www.mapquest.com/&quot;&gt;MapQuest&lt;/a&gt;, I needed a new primary notebook computer, so I bought a 12-inch netbook&amp;mdash;the Asus EeePC 1201N.  I chose this machine, because I wanted something light, portable, inexpensive, and the higher resolution of the 12-inch display was more practical that the 1024x600 displays of the 10-inch netbooks.  The machine also has a dual-core hyperthreaded Atom processor, so it shows up as 4 CPUs on this little machine.&lt;/p&gt;

&lt;h1&gt;Ubuntu 10.04&lt;/h1&gt;
&lt;p&gt;As soon as I got it, I booted an SD card with &lt;a href = &quot;http://ubuntu.com/&quot;&gt;Ubuntu 10.04&lt;/a&gt; desktop installation image, and I was off. The install ran smoothly as expected, and I rebooted to the new OS.  I went about installing all my normal user, photography, and developer tools.  I also included the wireless backport modules based on my previous experience with Claire&apos;s EeePC.  I&apos;m not sure the backports were necessary on this machine, though&amp;mdash;I don&apos;t think it made much of a difference.&lt;/p&gt;
&lt;p&gt;I was sort of annoyed to have to load the NVidia drivers and config panels, but it seems to be nearly unavoidable these days.  At least it seems to just work.  The HDMI output even works with my TV, so I guess I can&apos;t complain.&lt;/p&gt;
&lt;h1&gt;Performance&lt;/h1&gt;
&lt;p&gt;I can run Eclipse and Sun Wireless Toolkit fine on the machine, as does the Android SDK, though I try to not keep too many projects open at once.  Grails development at the command-line (in vim) goes quickly enough, though I can tell this machine&apos;s a little slower than my bigger desktop machines.  My normal build, test, report cycle completes in under 2 minutes.&lt;/p&gt;
&lt;p&gt;I&apos;ve used the machine as my primary photo processing machine (digikam, Gimp, Rawstudio) when I was on vacation for a week or when I&apos;m in my photography class.  It does fine, but working with lots of images can be slow compared to the Athlon X2 server where I usually do that work.&lt;/p&gt;
&lt;p&gt;For browsing, music, and podcatching the machine has plenty of power.&lt;/p&gt;
&lt;h1&gt;Problems&lt;/h1&gt;
&lt;p&gt;From the beginning, suspend (memory) and hibernate (disk) worked, but sometimes a memory issue (maybe loose) would cause it to shutdown while suspended and boot up with half the memory working.  This problem seems to have gone away on its own.  After the Ubuntu 10.10 upgrade, I&apos;m still working to get hibernate working again, but I still have suspend.&lt;/p&gt;
&lt;p&gt;I fought for a couple weeks trying to get good old CPU frequency scaling to work.  I could manage to force the module to load, but it would cause all sorts of latency and pauses, and it didn&apos;t save any power.  It turns out that this processor is already optimised enough for power saving, so I gave up in the end and just let it run full speed all the time.  Currently, I can count on about 3 hours of battery.&lt;/p&gt;
&lt;p&gt;The wireless network was fine until I took the machine to my new job.  On the work wireless network, the connection becomes flaky when it tries to hop channels and access points.  I haven&apos;t figured out how to fix this yet, but I worked around it by just using the wired connection while I&apos;m there.&lt;/p&gt;
&lt;h1&gt;Small and Generic Wins&lt;/h1&gt;
&lt;p&gt;Despite some problems, I&apos;m still impressed enough with it that I&apos;ve ordered a third netbook for the house.  I really wanted to buy another 1201N, but they&apos;re not available, so I bought an AMD-based EeePC 1215T. (The 1215T is even easier to setup.)  I really love the 12-inch netbook form-factor, and it&apos;s worth the performance trade offs in the type of computing I do, and the relatively generic hardware makes it easy to run Linux.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                A Groovy First Monday
            </title>
            <link>
                https://www.hjsoft.com/blog/A_Groovy_First_Monday.html
            </link>
            <pubDate>Wed, 22 Sep 2010 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/A_Groovy_First_Monday.html
            </guid>
            <description>
                &lt;p&gt;The new &lt;a href = &quot;http://www.k-prep.com/&quot;&gt;K-Prep website&lt;/a&gt; is implemented in &lt;a href = &quot;http://grails.org/&quot;&gt;Grails&lt;/a&gt; now, so I was looking for a &lt;a href = &quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt; way to let the computer do the heavy lifting of figuring out dates for each week (starting with the first Monday) of the school year and matching them to  a list of &lt;a href = &quot;http://www.k-prep.com/k-prep/program/calendar&quot;&gt;themes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I got the algorithm working in about 8 lines of Groovy code, and then generalized it a bit more for you here to allow you to ask for any day of any week of any month.  e.g. 3rd Wednesday in December.&lt;/p&gt;
&lt;p&gt;To get the date for the 3rd Wednesday in December, my call looks like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;code&gt;
dayByWeek(2010, DECEMBER, 2, WEDNESDAY, 0)
&lt;/code&gt;
&lt;/blockquote&gt;
&lt;p&gt;And the implementation looks like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
import static java.util.Calendar.*

def dayByWeek = { year, month, week, day, shift -&amp;gt;
    def c = Calendar.instance
    c.minimalDaysInFirstWeek = c.firstDayOfWeek + 7 - day
    c[YEAR] = year
    c[MONTH] = month
    c[WEEK_OF_MONTH] = week + 1 + (shift?:0)
    c[DAY_OF_WEEK] = day
    c.time
}
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;code&gt;shift&lt;/code&gt; parameter allows me to optionally start a theme on the previous week in cases where that day is the end of the previous month.  The static import allows me to conveniently refer to the Calendar constants without qualifying them, and finally, setting the &lt;code&gt;minimalDaysInFirstWeek&lt;/code&gt; allows days early or late in the week to still be found when the Calendar would have otherwise preferred a longer week to start searching.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Catching Your Twitter Replies in FriendFeed
            </title>
            <link>
                https://www.hjsoft.com/blog/Catching_Your_Twitter_Replies_in_FriendFeed.html
            </link>
            <pubDate>Tue, 22 Jun 2010 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Catching_Your_Twitter_Replies_in_FriendFeed.html
            </guid>
            <description>
                &lt;p&gt;I use FriendFeed to aggregate all my content, and that echoes it out to Twitter for people who prefer to use that service to follow me.&lt;/p&gt;
&lt;p&gt;I&apos;m following many of my friends in FriendFeed, but I still need to see &lt;em&gt;every&lt;/em&gt; Twitter reply without having to go check Twitter, so I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Created a private FriendFeed group called &lt;code&gt;jflinchbaugh-twitter-replies&lt;/code&gt;.
&lt;li&gt;Went to &lt;a href = &quot;http://search.twitter.com/&quot;&gt;Twitter Search&lt;/a&gt;, searched for &lt;code&gt;&lt;a href = &quot;http://search.twitter.com/search?q=%40jflinchbaugh&quot;&gt;@jflinchbaugh&lt;/a&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Imported that search result page as a feed into my private group.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now I can just watch that group as part of my normal feed, and it shows me &lt;em&gt;any&lt;/em&gt; replies within a couple hours of them being posted, and I often end up finding or creating a FriendFeed user for contacts I didn&apos;t know lived on Twitter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; While playing with my twitter search feed, I noticed that my FriendFeed comments on those entries weren&apos;t echoed out to Twitter, so I just switched it to a &lt;em&gt;Standard&lt;/em&gt; group, and that allows for the comments to be posted to Twitter.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Top Posting in Mutt
            </title>
            <link>
                https://www.hjsoft.com/blog/Top_Posting_in_Mutt.html
            </link>
            <pubDate>Thu, 27 May 2010 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Top_Posting_in_Mutt.html
            </guid>
            <description>
                &lt;p&gt;Outlook, Entourage, and Evolution have trained me in work environments to &lt;a href = &quot;http://en.wikipedia.org/wiki/Posting_style&quot;&gt;top-post&lt;/a&gt; my email replies against my curmudgeonly better judgment.&lt;/p&gt;
&lt;p&gt;Now that I&apos;m mostly job searching and sending &lt;em&gt;lots&lt;/em&gt; of email from my home account, I&apos;ve finally buckled to the peer pressure, and configured &lt;code&gt;mutt&lt;/code&gt; to top-post my signature in the &lt;code&gt;.muttrc&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;code&gt;set sig_on_top = yes&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;I don&apos;t even frequent those old mailing lists where someone would yell at me for top-posting, anyway. Next I&apos;ll likely just dump Mutt and go to a desktop mail client, like Thunderbird.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Events for the Photo Site
            </title>
            <link>
                https://www.hjsoft.com/blog/Events_for_the_Photo_Site.html
            </link>
            <pubDate>Fri, 26 Feb 2010 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Events_for_the_Photo_Site.html
            </guid>
            <description>
                &lt;p&gt;Way back in the day, when I used to shoot at clubs and &lt;a href = &quot;http://gallery.hjsoft.com/gallery2/v/Raves/&quot;&gt;raves&lt;/a&gt;, I&apos;d always want a way to share the images with the people I&apos;d meet, but exchanging email could be a bit cumbersome or just be a deterrent.&lt;/p&gt;
&lt;p&gt;While I&apos;m not out clubbing these days, I&apos;m still often out at various events, so I still need a quick and easy way to point people to the images, so I just added the Event Code box to &lt;a href = &quot;http://www.johnflinchbaugh.com/&quot;&gt;the photo site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While I&apos;m out shooting, I can create an event code (from imagination or using my phone), and then write &lt;em&gt;that&lt;/em&gt; short code on my business card to hand out.  Then it&apos;s really easy for someone to hit my site, punch in the code, and get right to the photos on Flickr or in the Gallery.&lt;/p&gt;
&lt;p&gt;It&apos;s just one of those little things I&apos;ve wanted for a while, and now I&apos;ve finally added it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Nokia Messaging on E71
            </title>
            <link>
                https://www.hjsoft.com/blog/Nokia_Messaging_on_E71.html
            </link>
            <pubDate>Tue, 23 Feb 2010 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Nokia_Messaging_on_E71.html
            </guid>
            <description>
                &lt;p&gt;I was confused months and months ago when I tried to load Nokia Messaging, and it looked just like the old S60 email client.  It turned out it wasn&apos;t installing back then.&lt;/p&gt;
&lt;p&gt;Just yesterday, I installed &lt;a href = &quot;http://email.nokia.com/&quot;&gt;Nokia Messaging&lt;/a&gt; again from the Ovi Store, and it definitely took this time.&lt;/p&gt;
&lt;p&gt;I connected it up to my mobile email account (which is sort of hard to tell the settings once it&apos;s done), and it seems to be working. It started on reboot, it shows the &apos;@&apos; indicator and new email on the home screen.  It seems to be using a hosted middleware layer (which seems unnecessary, but we&apos;ll see), and I had to login to the email website to tune a few things.  Most notably, I had to wipe the outgoing server settings to get email to send, since my mail server isn&apos;t configured to allow just anyone to send.&lt;/p&gt;
&lt;p&gt;I still can&apos;t see anywhere in the configurations that I&apos;m logging into mail with an account name different from what I publish -- it just feels like too much is hidden.  It sends and receives a little slower (the middleware), but I&apos;m hoping that the vast improvements in the UI make up for that.&lt;/p&gt;
&lt;p&gt;I&apos;ve found no show-stopper problems yet, so I&apos;ve turned off my normal email notifications on the home screen to give messaging room to show its status, and reassigned the email key to the new Nokia Messaging.  The old email client is still configured, but it&apos;s not set to retrieve email anymore.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (23 February 2010):&lt;/strong&gt; Nokia Messaging seems to talk plain old HTTP to its middleware, so I can now let it use the locked down wireless at work to send and receive email, instead of always being on 3G.  That should help with battery life.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ubuntu Linux on the MacBook Pro
            </title>
            <link>
                https://www.hjsoft.com/blog/Ubuntu_Linux_on_the_MacBook_Pro.html
            </link>
            <pubDate>Tue, 12 Jan 2010 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ubuntu_Linux_on_the_MacBook_Pro.html
            </guid>
            <description>
                &lt;p&gt;OS X on my MacBook Pro was getting sort of screwy, and I was preparing to reinstall, so I thought I&apos;d see how far I could get with Ubuntu 9.04 on the MacBook Pro.&lt;/p&gt;
&lt;h2&gt;Booting EFI&lt;/h2&gt;
&lt;p&gt;First things first, I read a bunch about lilo and grub and the Mac&apos;s EFI instead of a normal BIOS.  I was expecting some real trouble here, but the Ubuntu install CD booted up fine, and after the install finished, it was able to just boot from the hard drive with no extra work.&lt;/p&gt;
&lt;h2&gt;Wireless Networking&lt;/h2&gt;
&lt;p&gt;I was happy to see the wireless work and even our Juniper VPN software seemed to work pretty easily -- it uses Linux&apos; built-in tunnel interfaces.  I had initially found the wireless to be a bit flakey, and it would freeze up shortly after connecting.  It was sort of similar to the trouble I was having on the EeePC, so I installed the current &lt;code&gt;linux-modules-backports&lt;/code&gt; package, and it got much better.&lt;/p&gt;
&lt;h2&gt;Software for Work&lt;/h2&gt;
&lt;p&gt;One of my first concerns was going to be accessing the corporate Exchange servers for my email, address book, and calendar, but Evolution with the Exchange Connector (straight from the Ubuntu repository) can handle this.  It&apos;s not all that stable, but it works well enough with a couple restarts of the client through the day.&lt;/p&gt;
&lt;p&gt;Evolution sometimes gets a bit slow or otherwise wonky, and that in turn causes the clock/calendar applet on the Gnome Panel to freeze up. Sometimes the whole panel freezes.  A quick kill of &lt;code&gt;gnome-panel&lt;/code&gt; gets it all moving again, but having a stopped clock can get really inconvenient.  Evolution&apos;s notifier daemon is also unreliable, so I&apos;ve gotten accustomed to being aware of my schedule and the time, and not relying on a pop-up reminder.&lt;/p&gt;
&lt;p&gt;I installed Eclipse myself, so I can keep it more up-to-date, so I had a 1.6 version of Subclipse. This immediately caused me some trouble when Ubuntu 9.04 was only shipping Subversion 1.5.  I ended up installing Subversion 1.6 from source, and then later going back to packaged versions when I upgraded to Ubuntu 9.10.&lt;/p&gt;
&lt;h2&gt;Function Keys&lt;/h2&gt;
&lt;p&gt;Using Eclipse, I really need the top function keys to work as function keys, and not volume, brightness, etc as is default for the Mac keyboard.&lt;/p&gt;
&lt;p&gt;To get the keyboard to default to F-keys, and require the Fn key combo for the other controls, I needed to add a module parameter, so add create the &lt;code&gt;/etc/modprobe.d/hid_apple.conf&lt;/code&gt; file with the single line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;code&gt;options hid_apple fnmode=2&lt;/code&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Upgrade to Ubuntu 9.10&lt;/h2&gt;
&lt;p&gt;The upgrade became available, so I jumped on it right away -- that&apos;s what I do.  It went rather fabulously -- I had almost no trouble.  Only Eclipse gave me trouble with the GTK+ update.  I &lt;a href = &quot;http://www.norio.be/blog/2009/10/problems-eclipse-buttons-ubuntu-910&quot;&gt;twiddled the environment&lt;/a&gt; in my Eclipse start-up script, per some advice, and the components in Eclipse almost always work now.  I hear this&apos;ll be more completely fixed when newer versions of Eclipse are released.&lt;/p&gt;
&lt;p&gt;The upgrade to Ubuntu 9.10 also took away Java 5, since Sun officially dropped support for it about the time Ubuntu released.  Most of our projects just built fine with Java 6, but a few needed to be updated a bit to get them compliant with Java 6.  I chose the OpenJDK installs, bounced back to Sun a couple times, but have now pretty reliably settled into OpenJDK with no problems.&lt;/p&gt;
&lt;h2&gt;Power Management&lt;/h2&gt;
&lt;p&gt;One of my favorite perks of running Linux is getting back control of the machine.  I configured CPU frequency scaling to use the &quot;conservative&quot; CPU governor to save battery, I can sleep or suspend the machine (which works!) with a push of the power button, and it stays awake when I close the lid to walk to a meeting.&lt;/p&gt;
&lt;p&gt;Running Linux is like coming home again, and it&apos;s serving my daily needs well at work.  The MacBook hardware is holding up nicely too, which has not been my experience with older plastic-cased PCs.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Unit Testing Grails Custom Taglibs
            </title>
            <link>
                https://www.hjsoft.com/blog/Unit_Testing_Grails_Custom_Taglibs.html
            </link>
            <pubDate>Tue, 12 Jan 2010 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Unit_Testing_Grails_Custom_Taglibs.html
            </guid>
            <description>
                &lt;p&gt;I built out the initial iteration of my &lt;a href = &quot;http://www.johnflinchbaugh.com/photography/&quot;&gt;photography website&lt;/a&gt; a couple months ago, and I&apos;ve been coming back to it recently to put some enhancements into place.  I really must get the photography blog up and running, but until then, I poke around at doing the simpler things -- like a convenient &lt;em&gt;copyright&lt;/em&gt; taglib.&lt;/p&gt;
&lt;p&gt;I beat people at work over the head with TDD all the time, so I obviously want to follow my own example.  I started out searching around a bit on unit testing custom taglibs in a Grails project.  I didn&apos;t come up with much, and what I &lt;em&gt;did&lt;/em&gt; find wasn&apos;t really exercising the parameters that come into a taglib closure.&lt;/p&gt;
&lt;p&gt;Let&apos;s start out asking Grails to create a shell of a taglib for me in the conventional locations:&lt;/p&gt;
&lt;pre&gt;% grails create-tag-lib copyright&lt;/pre&gt;
&lt;p&gt;Now I have a shiny new &lt;code&gt;test/unit/CopyrightTagLibTests.groovy&lt;/code&gt; and a &lt;code&gt;grails-app/taglib/CopyrightTagLib.groovy&lt;/code&gt;, and they&apos;re empty.&lt;/p&gt;
&lt;p&gt;I want to be able to use it like this in my GSP:&lt;/p&gt;
&lt;pre&gt;&amp;lt;g:copyright startYear = &quot;2009&quot;&amp;gt;John Flinchbaugh&amp;lt;/g:copyright&amp;gt;&lt;/pre&gt;
&lt;p&gt;I&apos;ll be giving it a start year, it should use the current year as the end year, and the body is the name to whom it should attribute copyright.  If the current year and the startYear match, then it should display only one.  Let&apos;s get that down in the unit test.  Fortunately, the tag name used in the GSP is just the name of a closure in the taglib.&lt;/p&gt;
&lt;p&gt;Taglibs take a map of attibutes and a closure for the body of the tag, and they render their output to the &lt;code&gt;out&lt;/code&gt; property.  My first assumption says we should see the current year only and the body text when no tag attributes are specified (empty map).  I cheat a little and just derive the current year in the test to form my expectation instead of trying to inject the current date.&lt;/p&gt;
&lt;pre&gt;    void testCopyrightNoStart() {
        tagLib.copyright([:]) { &quot;xyz&quot; }
        def expectedDate = Calendar.getInstance().get(Calendar.YEAR)
        assertEquals(&quot;Copyright ${expectedDate} xyz&quot;, tagLib.out.toString())
    }&lt;/pre&gt;
&lt;p&gt;Next, I assume if the &lt;code&gt;startYear&lt;/code&gt; is specified and it matches the current year, it&apos;ll only display one year, and not a range.  Make special note, the value of the &lt;code&gt;startYear&lt;/code&gt; attribute being passed into the &lt;code&gt;copyright&lt;/code&gt; method is a &lt;code&gt;String&lt;/code&gt;.  When taglibs are called by the GSP engine, they will pass in &lt;code&gt;String&lt;/code&gt; values, so do yourself the favor and make sure you&apos;re doing that here.&lt;/p&gt;
&lt;pre&gt;    void testCopyrightStartThisYear() {
        def expectedDate = Calendar.getInstance().get(Calendar.YEAR)
        tagLib.copyright(
            startYear: &quot;${expectedDate}&quot;) { &quot;xyz&quot; }
        assertEquals(&quot;Copyright ${expectedDate} xyz&quot;, tagLib.out.toString())
    }&lt;/pre&gt;
&lt;p&gt;I do a little math for the test of the full functionality and pass in &lt;em&gt;last year&lt;/em&gt; for the &lt;code&gt;startYear&lt;/code&gt; and demonstrate the taglib in all its glory -- showing a range of years.&lt;/p&gt;
&lt;pre&gt;    void testCopyrightStartLastYear() {
        def expectedDate = Calendar.getInstance().get(Calendar.YEAR)
        tagLib.copyright(startYear: &quot;${expectedDate - 1}&quot;) { &quot;xyz&quot; }
        assertEquals(&quot;Copyright ${expectedDate - 1} - ${expectedDate} xyz&quot;,
                tagLib.out.toString())
    }&lt;/pre&gt;
&lt;p&gt;I like to nail down expectations about what would be misuses as well, so I&apos;m going to say that a bad &lt;code&gt;startDate&lt;/code&gt; will still run fine, and it&apos;ll just be shown in the output of the taglib.&lt;/p&gt;
&lt;pre&gt;    void testCopyrightBadStart() {
        def expectedDate = Calendar.getInstance().get(Calendar.YEAR)
        tagLib.copyright(startYear: &quot;badYear&quot;) { &quot;xyz&quot; }
        assertEquals(&quot;Copyright badYear - ${expectedDate} xyz&quot;, tagLib.out.toString())
    }&lt;/pre&gt;
&lt;p&gt;Now that I have all my tests done up front, let&apos;s run &lt;code&gt;grails test-app&lt;/code&gt; to see what we have!  All my shiny new tests fail spectacularly, because I&apos;ve not written the taglib yet, so let&apos;s go write enough of this new &lt;code&gt;copyright&lt;/code&gt; closure on the &lt;code&gt;CopyrightTaglib&lt;/code&gt; to get these tests to pass.&lt;/p&gt;
&lt;p&gt;I address one test at at time, starting with just giving myself an empty closure assigned to &lt;code&gt;copyright&lt;/code&gt;, and adding and modifying bits of the taglib code until it passes all my tests. That&apos;s how I know I&apos;ve done everything I wanted and nothing unnecessary.&lt;/p&gt;
&lt;pre&gt;class CopyrightTagLib {
    def copyright = { attrs, body -&gt;
        def thisYear = Calendar.getInstance().get(Calendar.YEAR) as String
        def startYear = attrs.startYear ?: thisYear
        out &lt;&lt; &quot;Copyright&quot;

        if (thisYear != startYear) {
            out &lt;&lt; &quot; ${startYear} -&quot;
        }

        out &lt;&lt; &quot; ${thisYear} ${body()}&quot;
    }
}&lt;/pre&gt;
&lt;p&gt;And there it is, some simple taglib code which satisfies my every expectation as laid down in the tests.  The last thing to do, is go add my shiny new taglib to my &lt;code&gt;footer.gsp&lt;/code&gt; and I&apos;m done.  The code for the test and taglib are available in their entirety here: &lt;a href = &quot;http://www.hjsoft.com/~john/copyright.zip&quot;&gt;copyright.zip&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                D-Link DIR-615 vs Asus EeePC 1000HE
            </title>
            <link>
                https://www.hjsoft.com/blog/D-Link_DIR-615_vs_Asus_EeePC_1000HE.html
            </link>
            <pubDate>Thu, 6 Aug 2009 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/D-Link_DIR-615_vs_Asus_EeePC_1000HE.html
            </guid>
            <description>
                &lt;p&gt;Claire&apos;s excellent little EeePC 1000HE was not being so excellent in one area -- the wireless network.  Everything had gone so nicely with the installation and daily running the machine, but the network kept dropping out, and it always seemed to have a weak signal (~50%) in our favorite parts of the house.&lt;/p&gt;
&lt;h1&gt;The Problem&lt;/h1&gt;
&lt;p&gt;I didn&apos;t use the machine much, but it seemed to mostly behave for me -- I had trouble reproducing the problems, so I was continually moving the DIR-615 router around in the office trying to get it closer to where she wanted to use it.  It only needed to go through 4 or 5 surfaces (walls and floors).  The DIR-615 was performing fabulously for every other device in the house (ThinkPad, E71, MacBook Pro).&lt;/p&gt;
&lt;p&gt;I really started to suspect the netbook was maybe broken (but at this point, it&apos;s been months of it working on and off) when I installed the same model access point (D-Link DIR-615) at K-Prep, and Claire still dropped connection just trying to get packets across an open room!&lt;/p&gt;
&lt;p&gt;Google turned up some discussion of the wireless being weak, and people cracking these things open to install external antennae, but fortunately no talk of it being a Linux vs Windows driver issue.  I also stumbled upon talk of some radio bands no working so well.&lt;/p&gt;
&lt;h1&gt;The Resolution&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Finally&lt;/em&gt;, I started digging around more in the router configurations to try to work this out. I figured maybe I needed to eliminate the fringe technologies and settings (like those problematic radio bands, etc).  I didn&apos;t find those particular bands (5GHz?), but I &lt;em&gt;did&lt;/em&gt; find the 802.11 B/G/N settings, and locked it down to the more tried and true B/G networks, eliminating the fringe N spec.&lt;/p&gt;
&lt;p&gt;I did this on both the home and work routers, all the normal devices kept working, and &lt;strong&gt;now&lt;/strong&gt; even the EeePC is working reliably -- it almost never drops connection!&lt;/p&gt;
&lt;p&gt;I don&apos;t actually know how to get the Linux to tell me that much about its wireless network, so I don&apos;t know if it was ever really &lt;em&gt;using&lt;/em&gt; the N network, or if the N network was just causing interference for its G connection. Interestingly, the connection power still sits around 50-70% in the popular spots in the house as it always has, but the connection is more robust at those levels than it had previously been.  Either way, Claire is once again happy with her little netbook, and I&apos;m sort of wanting one again for myself.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Birdstep SmartConnect for E71
            </title>
            <link>
                https://www.hjsoft.com/blog/Birdstep_SmartConnect_for_E71.html
            </link>
            <pubDate>Sat, 18 Jul 2009 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Birdstep_SmartConnect_for_E71.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been testing out &lt;a href = &quot;http://www.birdstep.com/Products/Birdstep/SmartConnect/&quot;&gt;SmartConnect&lt;/a&gt; (which seems to be free for E-series devices) from &lt;a href = &quot;http://www.birdstep.com/&quot;&gt;Birdstep&lt;/a&gt; to automatically switch my network connections as I move around.&lt;/p&gt;
&lt;p&gt;I started out by defining a connection group for each of my applications, since some applications use the network differently, and some of my locations offer different limitations.&lt;/p&gt;

&lt;p&gt;I started out with an &quot;email&quot; group.  This group prefers 2 open wifi points I frequent and then falls back to the EDGE network when needed.  I specifically exclude my workplace wireless in this group, because it doesn&apos;t pass IMAP traffic, so it would be useless to try to do mail there.  With that configuration, and the messaging client configured to use that group as its accesspoint, I stay connected on EDGE all day, and then it switches to wifi sometime shortly after I get home -- that works as advertised and it&apos;s pretty cool.  I think it&apos;s saving me battery, because I had previously had to keep my mail client always configured to use EDGE.  Interacting with the mail server is also blazingly fast when you&apos;re not on EDGE.&lt;/p&gt;
&lt;p&gt;The operation gets a little less optimal when I try to use one of my other groups I defined: &quot;Web&quot; or &quot;Mobbler&quot;.  Since the applications using these groups only need web access, I can include my work AP in those configurations, but upon selecting one of these, it never lights up the wireless, and instead uses the active EDGE connection that the &quot;email&quot; profile already had going. That&apos;s an unfortunate limitation mentioned in the &lt;a href = &quot;http://www.birdstep.com/Products/Birdstep/SmartConnect/SmartConnect-FAQ/&quot;&gt;SmartConnect FAQ&lt;/a&gt;.  It sounds like it&apos;s on the radar to be fixed in a future version.&lt;/p&gt;
&lt;p&gt;Until the multiple group problem is resolved, I think I&apos;ll need to stick to defining one group for email, and then I&apos;ll just continue to manually select the access points for myself when each application prompts.  I look forward to updates to this slick little utility.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eating My Way Across Disney
            </title>
            <link>
                https://www.hjsoft.com/blog/Eating_My_Way_Across_Disney.html
            </link>
            <pubDate>Sat, 28 Mar 2009 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Eating_My_Way_Across_Disney.html
            </guid>
            <description>
                &lt;p&gt;Back in the middle of January, the whole family (with my parents) took a vacation to Disney World in Florida.  We spent a week there, had a great time, and we &lt;em&gt;ate&lt;/em&gt; very well.&lt;/p&gt;
&lt;p&gt;We went back to EPCOT for dinner a couple times, so we needed the park-hopper tickets to allow us to switch parks at dinner time.&lt;/p&gt;
&lt;p&gt;Here are some of the restaurants we visited in order of my preference:&lt;/p&gt;
&lt;ol&gt;
&lt;li style = &quot;clear: both&quot;&gt;
&lt;img src = &quot;http://gallery.hjsoft.com/gallery2/d/45873-2/DSC_3984_01.jpg&quot; style = &quot;float: right; margin: 1ex&quot; alt = &quot;Tusker House Checkin&quot;/&gt;
Lunch at &lt;a href = &quot;http://disneyworld.disney.go.com/parks/animal-kingdom/dining/tusker-house/&quot;&gt;Tusker House&lt;/a&gt; (Animal Kingdom/Africa) -- buffet with a wide variety regional dishes to try. (I remember this being very veggie friendly.)
&lt;/li&gt;
&lt;li style = &quot;clear: both&quot;&gt;
&lt;img src = &quot;http://gallery.hjsoft.com/gallery2/d/46233-2/DSC_4905_01.jpg&quot; alt = &quot;Marrakesh Hallways&quot; style = &quot;float: right; margin: 1ex&quot;/&gt;
Dinner at &lt;a href = &quot;http://disneyworld.disney.go.com/parks/epcot/dining/restaurant-marrakesh/&quot;&gt;Marrakesh&lt;/a&gt; (EPCOT/Morocco) -- &lt;strong&gt;beautiful&lt;/strong&gt; restaurant with interesting Moroccan food I&apos;ve not had previously -- we split the expensive &quot;feast&quot; sampler and an appetizer, so we could try lots of different things.  While I may not really like Moroccan food, it was an awesome experience.
&lt;/li&gt;
&lt;li style = &quot;clear: both&quot;&gt;
Lunch at the quick burrito/taco place, La Cantina, in EPCOT/Mexico.
&lt;/li&gt;
&lt;li style = &quot;clear: both&quot;&gt;
&lt;img src = &quot;http://gallery.hjsoft.com/gallery2/d/46080-2/DSC_4488_01.jpg&quot; style = &quot;float: right; margin: 1ex&quot; alt = &quot;Le Cellier&quot;/&gt;
&lt;a href = &quot;http://disneyworld.disney.go.com/parks/epcot/dining/le-celier-steakhouse/&quot;&gt;Le Cellier Steakhouse&lt;/a&gt; (EPCOT/Canada) had excellent food &lt;em&gt;and&lt;/em&gt; beer. I had the Trois di Pistoles from Canada&apos;s own Unibroue brewery.&lt;/li&gt;
&lt;li style = &quot;clear: both&quot;&gt;
&lt;img src = &quot;http://gallery.hjsoft.com/gallery2/d/46092-2/DSC_4534_01.jpg&quot; alt = &quot;Kids with Eeyore&quot; style = &quot;float: right; margin: 1ex&quot;/&gt;
Pooh character breakfast (buffet) at &lt;a href = &quot;http://disneyworld.disney.go.com/parks/magic-kingdom/dining/the-crystal-palace/&quot;&gt;Crystal Palace&lt;/a&gt; in Magic Kingdom.
&lt;/li&gt;
&lt;li style = &quot;clear: both&quot;&gt;
For Italian, Mama Melrose in Hollywood Studios was better than Tony&apos;s in Magic Kingdom.
&lt;/li&gt;
&lt;li style = &quot;clear: both&quot;&gt;
&lt;img src = &quot;http://gallery.hjsoft.com/gallery2/d/45957-2/DSC_4115_01.jpg&quot; style = &quot;float: right; margin: 1ex&quot; alt = &quot;Paige and Belle&quot;/&gt;
Norway&apos;s restaurant with the princess was only &lt;em&gt;OK&lt;/em&gt;.  The authentic Norwegian dish amounts to a meat loaf, and the appetizer buffet wasn&apos;t very extensive.
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style = &quot;clear: both&quot;&gt;
I also drank my way half way around the world, but I sort of ran out of time on that endeavor.&lt;/p&gt;
&lt;p&gt;My parents made all the dinner reservations, some 2 months in advance (Le Cellier) and some 9 hours: (407) WDWDINE takes care of all that.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://gallery.hjsoft.com/gallery2/v/Trips/2009-01-14_Disney_World/&quot;&gt;photos&lt;/a&gt; are in the gallery, and it&apos;s not just food.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Nokia E71
            </title>
            <link>
                https://www.hjsoft.com/blog/Nokia_E71.html
            </link>
            <pubDate>Fri, 27 Mar 2009 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Nokia_E71.html
            </guid>
            <description>
                &lt;p&gt;Since my birthday on Saturday, I&apos;m now the proud owner of a Nokia E71 smart phone.  I had been poking around and reading specs of lots of devices, and this was definitely the forerunner.  Along with a bit of research, I had started to prepare Claire for the sticker shock of leaving the subsidized carrier phone world to start buying unlocked, retail phones, and that it would probably happen this year.  She apparently believed me, because she went out and bought it.&lt;/p&gt;
&lt;p&gt;It&apos;s a serious geek phone with a qwerty keyboard and enough configurations to keep me playing and reading the manual for days.  Fortunately, I like exploring devices, their manuals, and all the online tips.&lt;/p&gt;

&lt;p&gt;I&apos;m pleased to see it runs Java applications as seamlessly as S60 applications, and as I had hoped, I can assign my own applications to shortcuts and soft keys on the home screen.&lt;/p&gt;
&lt;p&gt;My stupid phone tricks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://code.google.com/p/mobbler/&quot;&gt;Mobbler&lt;/a&gt; allows me to feed (scrobble) my music and podcast listening live as the built-in audio player plays on my device just like iTunes and Rhythmbox does on the computers.&lt;/li&gt;
&lt;li&gt;The default text messaging interface doesn&apos;t identify your recent recipients like my Sony Ericsson phone did, so it seemed like too much clicking around to pick a recipient and send a message.  Nokia&apos;s &lt;a href = &quot;http://betalabs.nokia.com/betas/view/conversation&quot;&gt;Conversation&lt;/a&gt; application organizes text messages as conversations, so you can easily see your frequent recipients and send them quick messages in an IM-like interface.&lt;/li&gt;
&lt;li&gt;I have the &lt;a href = &quot;http://fftogo.com/&quot;&gt;fftogo&lt;/a&gt; website bound to the long-press of my messaging key, and the &lt;a href = &quot;http://reader.google.com/&quot;&gt;Google Reader&lt;/a&gt; mobile site is bound to the left soft key for quick access.  The JavaScript on the full (or iPhone) version of the &lt;a href = &quot;http://friendfeed.com/jflinchbaugh&quot;&gt;FriendFeed&lt;/a&gt; site doesn&apos;t *quite* work right, so I had to stick with fftogo.&lt;/li&gt;
&lt;li&gt;The phone will do SyncML, but Google doesn&apos;t do it yet for the calendar, so I use the &lt;a href = &quot;http://s60addons.com/calsync/&quot;&gt;CalSyncS60&lt;/a&gt; application (bound to the long press of the calendar button) to sync between my Google Calendar and the phone calendar.  It seems to only pick up my personal calendar, though, and not the other shared calendars to which I subscribe.&lt;/li&gt;
&lt;li&gt;I have &lt;a href = &quot;http://www.joiku.com/?action=products&amp;amp;mode=productDetails&amp;amp;product_id=310&quot;&gt;JoikuSpot Light&lt;/a&gt; installed to turn my phone into a little wireless hotspot to share its 3G connection, but that only allows browsing and not &lt;code&gt;ssh&lt;/code&gt;, etc, so I quickly setup good old bluetooth DUN tethering. JoikuSpot will be fun to just show off, though, because it&apos;s very quick and simple.&lt;/li&gt;
&lt;li&gt;Flash works on this handset, so I was able to watch the &lt;a href = &quot;http://homestarrunner.com/sbemail.html&quot;&gt;Strong Bad Email&lt;/a&gt; on the go.&lt;/li&gt;
&lt;li&gt;GPS navigation is quite amusing.  It works pretty well -- walking or driving.  The voice prompts in the turn-by-turn directions are conspicuously devoid of any street names -- it&apos;s all &quot;turn left&quot;, and &quot;enter highway&quot;, but not which street or highway.  I guess this keeps them from having to figure out how to pronounce these things.  It gets the job done.&lt;/li&gt;
&lt;li&gt;I&apos;m pleased to see that the PDF reader remembers my current page number, so it&apos;ll serve nicely as an ebook reader.&lt;/li&gt;
&lt;li&gt;I may be able to script this thing with &lt;a href = &quot;http://wiki.opensource.nokia.com/projects/PyS60&quot;&gt;Python&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;I found that the 2D barcode reading capability is built into the phone -- it reads datamatrix and QR-code on its own.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shortcomings of this device:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2.5mm headphone jack instead of 3.5mm (always an adapter)&lt;/li&gt;
&lt;li&gt;No USB charging&lt;/li&gt;
&lt;li&gt;Firmware updates require a Windows machine&lt;/li&gt;
&lt;li&gt;Firmware updates for North American models lag behind European releases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you&apos;ve probably already seen, my &lt;a href = &quot;http://friendfeed.com/jflinchbaugh&quot;&gt;FriendFeed&lt;/a&gt; is being filled up with Nokia and S60 bookmarks and comments, so that&apos;ll probably trickle over into the blog soon enough.  I look forward to seeing what these devices and they&apos;re Symbian OS can do.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ubuntu 8.10 on EeePC 1000HE
            </title>
            <link>
                https://www.hjsoft.com/blog/Ubuntu_810_on_EeePC_1000HE.html
            </link>
            <pubDate>Thu, 26 Mar 2009 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ubuntu_810_on_EeePC_1000HE.html
            </guid>
            <description>
                &lt;p&gt;I picked up a &lt;a href = &quot;http://promos.asus.com/US/1000HE/ASUS/index.html&quot;&gt;Asus EeePC 1000HE&lt;/a&gt; for Claire, and she needs Linux installed on it.  &lt;a href = &quot;http://www.ubuntu.com/products/WhatIsUbuntu/desktopedition&quot;&gt;Ubuntu 8.10&lt;/a&gt; looked great on the &lt;a href = &quot;http://www.hjsoft.com/blog/link/Ubuntu_810_on_the_Old_ThinkPad_R40&quot;&gt;ThinkPad&lt;/a&gt;, so that&apos;s what I&apos;m installing on this new netbook.&lt;/p&gt;
&lt;p&gt;First problem: get an Ubuntu installer on an 4G SD card.  It turns out that &lt;a href = &quot;http://unetbootin.sourceforge.net/&quot;&gt;&lt;code&gt;unetbootin&lt;/code&gt;&lt;/a&gt; does an excellent job of this.  I installed it on my &lt;a href = &quot;http://www.debian.org/releases/unstable/&quot;&gt;Debian unstable&lt;/a&gt; server right from the repository.  &lt;code&gt;unetbootin&lt;/code&gt; provides a choice of distributions to download and install (including Ubuntu), or you can build a bootable USB device from an existing ISO.&lt;/p&gt;
&lt;p&gt;After a few failed attempts, I realized that I needed to repartition the SD card with &lt;code&gt;fdisk&lt;/code&gt;, giving the card one big partition, and marking that partition bootable.  That main partition needed to also be given a &lt;code&gt;vfat&lt;/code&gt; filesystem (&lt;code&gt;mkfs -t vfat /dev/sdX1&lt;/code&gt;), not ext2.&lt;/p&gt; 
&lt;p&gt;With the SD card in order, I could have &lt;code&gt;unetbootin&lt;/code&gt; install the full Ubuntu 8.10 Live CD image to the main partition (&lt;code&gt;/dev/sdX1&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;F2&lt;/strong&gt; on the EeePC gets into the setup screen, and there, I disabled all the quick boot stuff and booting off the hard drive.  Then, I rebooted and hit &lt;strong&gt;Esc&lt;/strong&gt; to choose a boot device.  Upon choosing the &lt;em&gt;Single Flash Reader&lt;/em&gt;, I got to see the SYSLINUX boot screen, and then the nice graphical Ubuntu boot screen.  After a few more moments, it played it&apos;s normal chimes and I was looking at the live, wide-screen desktop with battery, bluetooth, wired network indicators going.  I clicked the network applet, and on the Gnome toolbar, and I see that even wireless seems to be working!&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;Install&lt;/em&gt; icon is sitting right there on the desktop, so I give it a run, tell it to use the whole 160G drive, and it&apos;s off. I let that finish, and rebooted, and I&apos;m in business.&lt;/p&gt;
&lt;p&gt;At this point, the volume keys aren&apos;t working for some reason, but the brightness and suspend keys &lt;em&gt;are&lt;/em&gt; working.  First time out, the battery was only lasting 4-5 hours, but I suspect that probably had something to do with the processor scaling defaulting to &lt;code&gt;on-demand&lt;/code&gt; instead of &lt;code&gt;conservative&lt;/code&gt; or &lt;code&gt;power-save&lt;/code&gt;.  I&apos;ll have to look into that a bit.&lt;/p&gt;
&lt;p&gt;As I search around for solutions to the last few things, I see lots of details on fixing problems I&apos;m not experiencing -- it seems that Ubuntu has taken care of most the hard stuff already, and they&apos;ve rendered many of the other fix-it articles outdated.&lt;/p&gt;
&lt;p&gt;It looks like its going to be a great little machine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (16 March 2009):&lt;/strong&gt; I&apos;m still not seeing the 9-hour battery life yet -- instead the fan runs and runs, and I see 4-5 hours.  Additionally, it seems that the ASUS ACPI kernel module is reporting a &lt;a href = &quot;http://forum.eeeuser.com/viewtopic.php?pid=507588#p507588&quot;&gt;few events incorrectly&lt;/a&gt;, so evolution keeps trying to pop up when I plug in the AC power.  This lead should help me get all the little buttons working, like volume the volume keys.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (26 March 2009):&lt;/strong&gt; The LCD display, USB hub, keyboard, and mouse arrived for the notebook over the past week.  Ubuntu mostly saw the display correctly when I plugged it in.  I ended up having to restart the X server, and it seems that I have to restart the X server any time I want to switch now, but it took care of the configuration itself.  The external display isn&apos;t running at its full resolution yet, though.  I have to look into it a bit closer, but it&apos;s working well enough for now.&lt;/p&gt;
&lt;p&gt;I assembled the USB gadgetry, left it on the desk.  When Claire found it later, she just plugged it in, and it just worked.  Linux has come a long way.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                A Night With Java ME
            </title>
            <link>
                https://www.hjsoft.com/blog/A_Night_With_Java_ME.html
            </link>
            <pubDate>Wed, 25 Feb 2009 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/A_Night_With_Java_ME.html
            </guid>
            <description>
                &lt;p&gt;I decided I needed a change of pace last week, so I sat down with Eclipse, the &lt;a href = &quot;http://www.eclipse.org/dsdp/mtj/&quot;&gt;Mobile Tools for Java (MTJ) plugin&lt;/a&gt;, and MPowerPlayer on the Mac, and cranked out a little toy game using the Game APIs.  My only reference was the &lt;a href = &quot;http://apress.com/book/view/1590594797&quot;&gt;Beginning J2ME: From Novice to Professional&lt;/a&gt; ebook and previous experience.&lt;/p&gt;

&lt;p&gt;Starting up the mobile project was never easier -- the stack finally works nicely, even on a Mac.  Within about 7 hours of coding and interruptions, I had a working platform-style game with a little backhoe that can be driven back and across the screen, and you dig for little jewels.  It&apos;s dead simple and the kids find it amusing.  It looked good in the MPowerPlayer emulator, and it worked even better on my SonyEricsson W810i.&lt;/p&gt;
&lt;p&gt;The next day, I spent 2 more hours or so adding some trees to plow over.  It still needs a few finishing touches and features, but you can grab &lt;a href = &quot;http://www.hjsoft.com/~john/bbh/&quot;&gt;Ben&apos;s Backhoe&lt;/a&gt; and amuse your kid in the grocery store or something with a simple little game.  I hope to be able to put together a few more little mini games like this -- Paige is already making requests.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ubuntu 8.10 on the Old ThinkPad R40
            </title>
            <link>
                https://www.hjsoft.com/blog/Ubuntu_810_on_the_Old_ThinkPad_R40.html
            </link>
            <pubDate>Sun, 9 Nov 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ubuntu_810_on_the_Old_ThinkPad_R40.html
            </guid>
            <description>
                &lt;p&gt;The wireless interface on the old ThinkPad R40 running Debian Unstable flaked out and stopped associating with the wireless access point at home.  I thought the hardware was failing, like the USB failed months ago, but I wanted a second opinion -- was it really broken, or am I just incompetent?&lt;/p&gt;
&lt;p&gt;I booted an Ubuntu 8.10 live CD, and found that it got the wireless running right away!  Encouraged, I backed up the useful home directories, wiped the existing partitions, and ran the install.&lt;/p&gt;
&lt;p&gt;Upon installing, and booting for the first time, I logged in to have it pick up the wireless again right away from the little NetworkManager applet, and then offer me software updates.  During the update, it told me that my old 25M &lt;code&gt;/boot&lt;/code&gt; partition was too small, so I moved those files onto the &lt;code&gt;/&lt;/code&gt; partition and abandoned the old 25M partition.  After a few reboots and twiddling around the grub config, I got it booting from the new partition again.&lt;/p&gt;
&lt;p&gt;That pretty much had the computer up and running on the network again! I&apos;ve since poked at it a little bit to find that Ubuntu has the whizzy compiz effects working out of the box.  Surprisingly, I also see all the little ACPI interfaces working down to being able to control screen brightness.  Finally, I tested the suspend and hibernate, and even that&apos;s working! The machine even woke up from suspend and hibernate! ;)  I&apos;ll have to see if the machine continues to run or reverts back to crashing 10 minutes after resume, like it used to do.  I&apos;m sort of hopeful at this point.&lt;/p&gt;
&lt;p&gt;It&apos;s amazing to see all these things work out of the box, since I had to configure and script this stuff all up by hand on the previous install from 4 years ago or so.  Just when I started to think about not having time to run Linux on the desktop, Ubuntu proves to be slick and usable.  Now I want a new Linux notebook.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (2008-11-9):&lt;/strong&gt; Claire let me know that the machine still locks up occasionally after a resume, so I disabled that.  I was hoping to see that fixed with the Ubuntu install.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Claire&apos;s Weekend Away
            </title>
            <link>
                https://www.hjsoft.com/blog/Claires_Weekend_Away.html
            </link>
            <pubDate>Fri, 7 Nov 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Claires_Weekend_Away.html
            </guid>
            <description>
                &lt;p&gt;Claire&apos;s headed off for her &lt;a href = &quot;http://manicmommies.com/2008/07/escape_08_cruise_to_the_bahama.html&quot;&gt;Manic Mommies cruise&lt;/a&gt; for the weekend, and I&apos;m anticipating the rest of my weekend with the kids.  Paige has a half day of school, so I figured I&apos;d just take Friday off.&lt;/p&gt;
&lt;p&gt;I figure it&apos;s an opportunity to do the stuff she wasn&apos;t jumping to do, so I&apos;m looking for some things to do with the kids and people to join us.&lt;/p&gt;
&lt;p&gt;Here&apos;s my loose plan so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Friday Afternoon: Green Dragon&lt;/li&gt;
&lt;li&gt;Saturday: Strasburg Train Museum&lt;/li&gt;
&lt;li&gt;Sunday Afternoon: Lancaster Science Factory&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then everyone&apos;s back to school, day care, and work for Monday.&lt;/p&gt;
&lt;p&gt;Anyone interested in joining us or have any additional ideas?  More kids are obviously welcome.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                NFS Challenges with the NAS
            </title>
            <link>
                https://www.hjsoft.com/blog/NFS_Challenges_with_the_NAS.html
            </link>
            <pubDate>Mon, 3 Nov 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/NFS_Challenges_with_the_NAS.html
            </guid>
            <description>
                &lt;p&gt;I had my SimpleShare NAS working nicely for a while, but something&apos;s changed, and I&apos;m not sure what.&lt;/p&gt;
&lt;p&gt;My Debian and Ubuntu machines seem to be using the NAS over NFS as only the nfsnobody (uid -2) user only.  The NAS seems to be in &lt;code&gt;all_squash&lt;/code&gt;, so I&apos;m creating files, then I&apos;m not able to manipulate or access some of the files.  I often can&apos;t change permissions either -- operation not permitted.  I used to get my regular Linux UIDs on the NAS.&lt;/p&gt;
&lt;p&gt;Interestingly, the Mac still has full access to the NAS over NFS, and I have permissions to fix up permissions as necessary.&lt;/p&gt;
&lt;p&gt;What&apos;s the difference between the Linux client and Mac client, and how&apos;d I break the Linux machine?&lt;/p&gt;
&lt;p&gt;Hopefully, I&apos;ll be able to report a fix here soon.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Using the D-Link DIR-615 Wireless Router as Access Point
            </title>
            <link>
                https://www.hjsoft.com/blog/Using_the_D-Link_DIR-615_Wireless_Router_as_Access_Point.html
            </link>
            <pubDate>Wed, 29 Oct 2008 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Using_the_D-Link_DIR-615_Wireless_Router_as_Access_Point.html
            </guid>
            <description>
                &lt;p&gt;My very old Hawking Tech wireless access point started to flake out, so I had to go out and get a new one. I was preparing for the worst -- I was going to end up with a router, and I couldn&apos;t disable the router functionality. Access points are hard to come by these days, and the only one I could find cost twice as much as a more feature-rich router (in case I wanted to use any of those features one day).&lt;/p&gt;
&lt;p&gt;My Debian Linux machine already serves as my customized NAT router, so I didn&apos;t want another layer of routing introduced.  Having the wireless hosts hidden behind another NAT would also keep me from being able to access the wireless hosts from the wired network.&lt;/p&gt;
&lt;p&gt;I read lots of horror stories of people using Linksys and not being able to disable the NAT and use it as a plain access point, so I was stearing clear.  That left the D-Link, Netgear, Belkin, etc. While walking between OfficeMax and Circuity City, I quickly Googled D-Link and stumbled upon a recommendation of turning off the DHCP server, assigning a static IP, and then being able to use an existing router.  I found a good price on the D-Link DIR-615 Wireless N router, so I picked it up at Circuit City.&lt;/p&gt;
&lt;p&gt;I got it home, plugged it in conventionally into the existing network, and hit the configuration IP from the wireless network (http://192.168.0.1/).  I poked around the configuration, Googled around a little more, and found the keys to making it all work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set a new static IP so the router falls within your existing network.  This allows you to find it again for configuration when we&apos;re done.&lt;/li&gt;
&lt;li&gt;Disable the DHCP server, so that the existing DHCP server for the network can continue to hand out configurations.&lt;/li&gt;
&lt;li&gt;Disconnect the incoming wired connection from the &quot;Internet&quot; port of the D-Link, and plug it into one of the host ports on the D-Link.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Where you still can&apos;t flip a configuration to disable the NAT on this router, if you neglect to use the &quot;Internet&quot; side, and keep everything on the same side of the router (the wireless and 4 host ports), the NAT can&apos;t affect your packets, and it just works as a simple switch between wired and wireless networks!  This probably would have worked for any router I could have bought.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Make NFS Easily Mountable from Ubuntu Gnome
            </title>
            <link>
                https://www.hjsoft.com/blog/Make_NFS_Easily_Mountable_from_Ubuntu_Gnome.html
            </link>
            <pubDate>Wed, 29 Oct 2008 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Make_NFS_Easily_Mountable_from_Ubuntu_Gnome.html
            </guid>
            <description>
                &lt;p&gt;I reinstalled the ThinkPad with Ubuntu 8.10, and I&apos;ve had to get a few things going again on there. As slick as Ubuntu has been with most things, I was expecting to be able to browse my way to my NFS shares in the house, or failing that, I&apos;d be able to go to &quot;nfs://nas/...&quot; and be in business.  That&apos;s &lt;a href = &quot;http://bugzilla.gnome.org/show_bug.cgi?id=328107&quot;&gt;not the case&lt;/a&gt;, so I had to set up a bit for myself.&lt;/p&gt;

&lt;p&gt;Using my previous Debian experience, I knew that autofs is a pretty friendly way to get filesystems mountable by normal users.  It automatically mounts a filesystem when a user first requests it, then unmounts it later when it&apos;s been idle.&lt;/p&gt;
&lt;p&gt;I installed &lt;code&gt;autofs5&lt;/code&gt;, &lt;code&gt;nfs-common&lt;/code&gt;, etc from &lt;code&gt;aptitude&lt;/code&gt;. Then I uncommented the &lt;code&gt;/net&lt;/code&gt; line in &lt;code&gt;/etc/auto.master&lt;/code&gt;, and restarted autofs.  At this point, I could just cd into &lt;code&gt;/net/nas&lt;/code&gt;, and autofs would get it mounted for me, even as a user.&lt;/p&gt;
&lt;p&gt;To make it easy from Gnome, I created a Custom Launcher on the Panel for the &quot;Location&quot;, &lt;code&gt;file:///net/nas/&lt;/code&gt;, and it becomes easily clickable to open it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                What Are You Doing?
            </title>
            <link>
                https://www.hjsoft.com/blog/What_Are_You_Doing.html
            </link>
            <pubDate>Mon, 27 Oct 2008 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/What_Are_You_Doing.html
            </guid>
            <description>
                &lt;p&gt;Does anyone even remember that question? That&apos;s the question that Twitter explicitly asks, and the purpose of any microblog.  It&apos;s about putting original little thoughts out there that weren&apos;t worthy of big old blog entries.&lt;/p&gt;
&lt;p&gt;Somewhere along the way, people discovered they could throw a question out there on Twitter, and people may post an answer, but noting a reply has remained awkward on Twitter.  Other services, such as Jaiku and FriendFeed, have successfully made replying and commenting work nicely, but for some reason the population hasn&apos;t jumped, and they just stick with the same old awkward Twitter.&lt;/p&gt;
&lt;p&gt;Twitter&apos;s fine as a microblog for original and independent thoughts, but I can&apos;t stand trying to follow a conversation.  I&apos;ve seen a feature request on FriendFeed to filter away @-replies when following Twitter, because we just don&apos;t want to see them and have to wonder what you&apos;re saying.&lt;/p&gt;
&lt;p&gt;I still do like to comment on other people&apos;s microblogs (I&apos;m a smart ass), but it better be easy to follow, because I&apos;m not worth the trouble, and neither are most people.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                FriendFeed vs Jaiku
            </title>
            <link>
                https://www.hjsoft.com/blog/FriendFeed_vs_Jaiku.html
            </link>
            <pubDate>Mon, 30 Jun 2008 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/FriendFeed_vs_Jaiku.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been looking at &lt;a href = &quot;http://friendfeed.com/jflinchbaugh/&quot;&gt;FriendFeed&lt;/a&gt; a bit this weekend. They seem to actually roll out new features, and I have a feeling that feeds may update more often.&lt;/p&gt;
&lt;p&gt;Development is very important to me, because I get bored looking at the same old application for too long, so this thing could be interesting.  Jaiku, in the meantime, hasn&apos;t seen any interesting changes in months, and feed retrieval feels slower and slower.&lt;/p&gt;
&lt;p&gt;If I jump, and my friends don&apos;t right away, it&apos;s OK, because I&apos;ve already created them as imaginary friends on FriendFeed, meaning I added them with their feeds, so I can still see them. I&apos;ve also managed to hook up a few 3rd-party apps, like &lt;a href = &quot;http://www.imified.com/&quot;&gt;IMified&lt;/a&gt; and &lt;a href = &quot;http://fftogo.com/&quot;&gt;FF-to-go&lt;/a&gt;.  After figuring out to ignore friend-of-friend traffic, I think I may be able to use FF-to-go without it burying me in reading.&lt;/p&gt;
&lt;p&gt;I ultimately still want a more distributed system to do this stuff, but this thing may address the current pain points I have with Jaiku.  We&apos;ll see if I stay here or not -- I always hear that ultimately, it comes down to where your friends are.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                A Useful Example in Java, Ruby, and Groovy
            </title>
            <link>
                https://www.hjsoft.com/blog/A_Useful_Example_in_Java_Ruby_and_Groovy.html
            </link>
            <pubDate>Wed, 4 Jun 2008 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/A_Useful_Example_in_Java_Ruby_and_Groovy.html
            </guid>
            <description>
                &lt;p&gt;We&apos;ve been using Java and Ruby for work, and we&apos;ve recently been asked to look more toward Groovy where we had been using Ruby, so I rewrote a useful little iconv script which we use to re-encode large volumes of data (which the GNU iconv doesn&apos;t seem to want to handle).&lt;/p&gt;
&lt;p&gt;For illustration, here are the implementations I wrote:&lt;/p&gt;
&lt;p&gt;Java (40 lines):&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;import java.io.*;

public class Iconv {
    public static void main(final String[] args) throws Exception {
        if (args.length &amp;lt; 2) {
            System.out.println(
                    &quot;Usage: Iconv &amp;lt;in&amp;gt;:&amp;lt;encoding&amp;gt; &amp;lt;out&amp;gt;:&amp;lt;encoding&amp;gt;&quot;);
            return;
        }

        final String[] ins = args[0].split(&quot;:&quot;);
        final String[] outs = args[1].split(&quot;:&quot;);

        final String inFile = ins[0];
        final String inEnc = ins[1];
        final String outFile = outs[0];
        final String outEnc = outs[1];

        Writer writer = null;
        try {
            writer = new OutputStreamWriter(
                    new FileOutputStream(outFile), outEnc);
            Reader reader = null;
            try {
                reader = new InputStreamReader(
                        new FileInputStream(inFile), inEnc);
                Integer character = null;
                while ((character = reader.read()) &gt;= 0) {
                    writer.write(character);
                }
            } finally {
                if (reader != null)
                    reader.close();
            }
        } finally {
            if (writer != null)
                writer.close();
        }
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ruby (20 lines):&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;#!/usr/bin/env jruby

require &apos;iconv&apos;
require &apos;fileutils&apos;

if ARGV.size &amp;lt; 2 then
    puts &quot;Usage: iconv.rb &amp;lt;from&amp;gt;:&amp;lt;enc&amp;gt; &amp;lt;to&amp;gt;:&amp;lt;enc&amp;gt;&quot;
    exit
end

in_file, in_enc = ARGV[0].split(&quot;:&quot;)
out_file, out_enc = ARGV[1].split(&quot;:&quot;)

Iconv.open(out_enc, in_enc) do |conv|
    File.open(out_file, &apos;w&apos;) do |out|
        File.open(in_file, &apos;r&apos;).each_line do |line|
            out.write(conv.iconv(line))
        end
    end
end&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Groovy (19 lines):&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;#!/usr/bin/env groovy

if (args.size() &amp;lt; 2) {
    println &quot;Usage: iconv.groovy &amp;lt;from&amp;gt;:&amp;lt;enc&amp;gt; &amp;lt;to&amp;gt;:&amp;lt;enc&amp;gt;&quot;
    return
}

final ins = args[0].split(&quot;:&quot;)
final outs = args[1].split(&quot;:&quot;)
final from = ins[0]
final fromEnc = ins[1]
final to = outs[0]
final toEnc = outs[1]

new FileOutputStream(to).withWriter(toEnc) { writer -&amp;gt;
    new FileInputStream(from).withReader(fromEnc) { reader -&amp;gt;
        writer &amp;lt;&amp;lt; reader
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using the Groovy 1.6 beta, I could have used the new left-side array assignment syntax to shorten the groovy version to 15 lines:&lt;/p&gt;
&lt;pre&gt;...
[from, fromEnc] = args[0].split(&quot;:&quot;)
...&lt;/pre&gt;
&lt;p&gt;I had initially set out to skip over Groovy and just learn Ruby, as I had viewed Groovy as a sort of compromise -- Ruby would be the real twist of the mind, but alas, my neural pathways seem a bit more rigid than I had hoped.  I can think a little quicker in Groovy than Ruby and get a few things done.  Groovy is also a bit more compatible with the work directives handed down from on high -- we want to be a Java shop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (2008-06-04):&lt;/strong&gt; I updated the code above to reflect some comments.  To be complete, the Java code should null check the streams it&apos;s trying to close in the finally blocks.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Emerging Technology Conference at MapQuest
            </title>
            <link>
                https://www.hjsoft.com/blog/Emerging_Technology_Conference_at_MapQuest.html
            </link>
            <pubDate>Fri, 28 Mar 2008 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Emerging_Technology_Conference_at_MapQuest.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m organizing &lt;a href = &quot;http://mapquest.pingg.com/EmergingTechnologies&quot;&gt;An Evening of Emerging Technologies&lt;/a&gt; at MapQuest in Lancaster, PA on 23 April 2008.&lt;/p&gt;
&lt;p&gt;It&apos;s a free open space conference, so join us to hear about technology in our region and to share your own experiences.  Click the link and register today.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Imagine No Religion
            </title>
            <link>
                https://www.hjsoft.com/blog/Imagine_No_Religion.html
            </link>
            <pubDate>Tue, 19 Feb 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Imagine_No_Religion.html
            </guid>
            <description>
                &lt;p&gt;There&apos;s a &lt;a href = &quot;http://ffrf.org/news/2008/hatebillboard.php&quot;&gt;Billboard War&lt;/a&gt; going on in some spots around the United States.  One particular site is in Chambersburg, PA -- that&apos;s a relatively short drive.  I&apos;d love to go see these billboards in person.&lt;/p&gt;
&lt;p&gt;How do you demonstrate support for this message once you&apos;re there?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Consumable Discoveries of 2007
            </title>
            <link>
                https://www.hjsoft.com/blog/Consumable_Discoveries_of_2007.html
            </link>
            <pubDate>Fri, 18 Jan 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Consumable_Discoveries_of_2007.html
            </guid>
            <description>
                &lt;p&gt;Favorite Beer Discoveries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://www.wellsandyoungs.co.uk/wellsandyoungs/beers/ales/youngs-double-chocolate&quot;&gt;Young&apos;s Double Chocolate Stout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Favorite Hot Sauce Discoveries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://www.vitafoodproducts.com/productDetail.asp_Q_productID_E_115_A_subcatID_E_29_A_catID_E_17_A_brandID_E_4&quot;&gt;Scorned Woman Original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://extremefood.com/product.php?id=4&quot;&gt;Blair&apos;s Original Death&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mobility Considerations
            </title>
            <link>
                https://www.hjsoft.com/blog/Mobility_Considerations.html
            </link>
            <pubDate>Mon, 14 Jan 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mobility_Considerations.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m looking to replace my ThinkPad R40, so listening to &lt;a href = &quot;http://www.mobiletechroundup.com/?p=160&quot;&gt;Mobile Tech Roundup 120&lt;/a&gt; gave me a moment to consider going with a super phone or something otherwise ultra-mobile instead of a notebook.&lt;/p&gt;
&lt;p&gt;I&apos;ve long liked the idea of the Nokia N95, and the MoTR people made the &lt;a href = &quot;http://www.america.htc.com/products/advantage7501/default.html&quot;&gt;HTC  Advantage&lt;/a&gt; sound pretty slick. I&apos;d also consider anything SonyEricsson smart phone.  All these phones still cost more than half of what I expect to spend on a full notebook.&lt;/p&gt;
&lt;p&gt;The MoTR guys were talking about how they could get by on these devices to cover CES and do other work, but I realized that they really just needed media, browsing, writing, and networking.  My main tasks outside of browsing are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Photo editing&lt;/li&gt;
&lt;li&gt;Coding (in Eclipse)&lt;/li&gt;
&lt;li&gt;Video editing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I unfortunately just can&apos;t do these things on a mobile platform as far as I&apos;ve seen. I&apos;ve been liking sitting at the dual-core desktop for photo editing, so I really look forward to a dual-core ThinkPad R61 to replace the R40.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://eeepc.asus.com/global/&quot;&gt;Asus&apos; Eee PC&lt;/a&gt; is intriguing, and I think I&apos;d look into it as a network computer, but it doesn&apos;t look like it would cut it for image editing. The resolution would make Eclipse hard to use as well.  I&apos;ve stuggled too long on low-res displays.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                If I Implemented a new Jaiku
            </title>
            <link>
                https://www.hjsoft.com/blog/If_I_Implemented_a_new_Jaiku.html
            </link>
            <pubDate>Wed, 9 Jan 2008 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/If_I_Implemented_a_new_Jaiku.html
            </guid>
            <description>
                &lt;p&gt;Jaiku&apos;s getting boring, since they don&apos;t actually update anything, and now, they seem to just be letting it fall apart.  Maybe I&apos;ll need to move soon.&lt;/p&gt;
&lt;p&gt;A true Unix philosopher would find just the right tools for each part of the job and pipe them together.  Is that Twitter for microblogging, and Tumblr for full aggregation of all my content?  Do I care about the community that has gathered around Jaiku?  Leo Laporte concludes that you just have to go where your friends are, but I think I may just be able to point my RSS reader at my friends.&lt;/p&gt;
&lt;p&gt;The key features of Jaiku to me are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RSS aggregation&lt;/li&gt;
&lt;li&gt;Microblogging&lt;/li&gt;
&lt;li&gt;Comments allowing threads to grow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What else is important?&lt;/p&gt;
&lt;p&gt;I think that otherwise, I&apos;d enhance my system with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configurable RSS periods&lt;/li&gt;
&lt;li&gt;Unlimited post length&lt;/li&gt;
&lt;li&gt;Uniform content formatting across posts and comments&lt;/li&gt;
&lt;li&gt;Versatile mobile, email, and XMPP interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are the features that are important to me, but unfortunately, I don&apos;t actually get around to coding anymore, so I&apos;ll just have to wait for someone else to do it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                No More Java Memory Tuning
            </title>
            <link>
                https://www.hjsoft.com/blog/No_More_Java_Memory_Tuning.html
            </link>
            <pubDate>Wed, 19 Dec 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/No_More_Java_Memory_Tuning.html
            </guid>
            <description>
                &lt;p&gt;My days of tuning my JBoss server for a slim server environment seem to be over!  &lt;a href = &quot;http://rimuhosting.com/&quot;&gt;RimuHosting&lt;/a&gt; beefed up their &lt;a href = &quot;http://rimuhosting.com/order/startorder1.jsp?type=18&quot;&gt;standard VPS plans&lt;/a&gt; to include lots more RAM.  RAM on my plan basically doubled!&lt;/p&gt;
&lt;p&gt;I rebooted my box (just short of an uptime record), and then removed many of the constraints on my JBoss server configs.  The next JBoss server install is going to be much easier, since I&apos;ll not have to tune so much.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Discovering Maven
            </title>
            <link>
                https://www.hjsoft.com/blog/Discovering_Maven.html
            </link>
            <pubDate>Sun, 9 Dec 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Discovering_Maven.html
            </guid>
            <description>
                &lt;p&gt;I attended the &lt;a href = &quot;http://www.harrisburgjug.org/&quot;&gt;Harrisburg JUG&lt;/a&gt; meeting a couple weeks ago (I&apos;ve been terrible about getting this posted) to hear &lt;a href = &quot;http://www.harrisburgjug.org/display/JUG/2007-11-15+Apache+Maven&quot;&gt;Neil Hall talk about Maven&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Neil did a great job showing off Maven and relating his story of introducing it to his organization.  It looks like a really slick tool to use for the next project I bootstrap.&lt;/p&gt;
&lt;p&gt;I&apos;m not as impressed with the dependency management as I am with its ability to just build and package a project with minimal configuration -- I just need to structure my project the right way.  I used to have philosophical conflicts when a tool imposed its will on me like this, but I&apos;ve gotten over it while learning to use Eclipse.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Watching Others Work
            </title>
            <link>
                https://www.hjsoft.com/blog/Watching_Others_Work.html
            </link>
            <pubDate>Mon, 8 Oct 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Watching_Others_Work.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently been watching people use software, and I&apos;ve been learning some great things for work and for play.&lt;/p&gt;

&lt;p&gt;At work, we have a project tracking software which shows some real promise -- I really think it&apos;ll make life easier.  We&apos;re all learning how we want to use the software within our projects, and different teams are applying it in different ways.  Every time I watch someone use the software in a planning meeting, I&apos;m scrawling notes like mad about new things to try.&lt;/p&gt;
&lt;p&gt;Watching and working together in real time is a great way to learn features and tricks of new software.   The &lt;a href = &quot;http://en.wikipedia.org/wiki/Pair_programming&quot;&gt;pair programming&lt;/a&gt; people have been telling us this forever, and I had nearly forgotten the importance of pairing.&lt;/p&gt;
&lt;p&gt;If you don&apos;t have a community of people using a piece of software, finding screen-cast podcasts could be the next best thing.&lt;/p&gt;
&lt;p&gt;I&apos;ve seen a few Photoshop video podcasts advertised, but the attention a video would demand just never felt worthwhile.  Finally, I discovered Rolf Steinort&apos;s excellent &lt;a href = &quot;http://www.meetthegimp.org/&quot;&gt;Meet the Gimp&lt;/a&gt; video podcast.  In just the first few episodes, I&apos;ve discovered:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a few real applications of different layer blending methods for emulating correction layers&lt;/li&gt;
&lt;li&gt;a new way to use the rotate tool for easier corrections&lt;/li&gt;
&lt;li&gt;the 2 default dialog windows can be collapsed  into one big dialog&lt;/li&gt;
&lt;li&gt;tools can be added and removed from the toolbar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out this podcast, if you&apos;re using Gimp to edit photos.  If you&apos;re coding, be sure to pair occasionally -- you&apos;ll start using your tools more effectively and likely even discover some new ones.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Reloading CSS, etc
            </title>
            <link>
                https://www.hjsoft.com/blog/Reloading_CSS_etc.html
            </link>
            <pubDate>Tue, 18 Sep 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Reloading_CSS_etc.html
            </guid>
            <description>
                &lt;p&gt;As I deployed the new version of the &lt;a href = &quot;http://www.k-prep.com/&quot;&gt;K-Prep site&lt;/a&gt;, I was having trouble getting clients to get the new versions of the CSS files.  It stayed cached in the browsers.&lt;/p&gt;
&lt;p&gt;To make sure it doesn&apos;t happen again, I&apos;ve dropped a configuration into my Apache 2 server to expire CSS files immediately, and require the browser to at least ask the server if there&apos;s been an update.  This doesn&apos;t make the server unnecessarily transfer the file with every request -- it returns an HTTP 304 code to indicate that the cached copy is still up-to-date.  I should probably do something similar for other notoriously cached files, like scripts.&lt;/p&gt;
&lt;pre&gt;&amp;lt;IfModule mod_expires.c&amp;gt;
    ExpiresActive On
    ExpiresByType text/css A0
&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;

            </description>
            
        </item>
        <item>
            <title>
                What If Dawkins is Wrong
            </title>
            <link>
                https://www.hjsoft.com/blog/What_If_Dawkins_is_Wrong.html
            </link>
            <pubDate>Tue, 18 Sep 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/What_If_Dawkins_is_Wrong.html
            </guid>
            <description>
                &lt;p&gt;Via Digg, I stumbled upon a video of Richard Dawkins answering a &lt;a href = &quot;http://youtube.com/watch?v=6mmskXXetcg#&quot;&gt;simple question&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;m apparently to understand that he&apos;s demonstrating all these other odd beliefs which we don&apos;t believe and could equally be subject to &lt;em&gt;those&lt;/em&gt; hells for disbelief, and Christianity provides just one more example.  Unfortunately, his style of delivery feels more like an attack, so his subtle point could easily be missed -- I agree with the guy, but I missed it at first.  I was terribly disappointed.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Effective Performance Tuning
            </title>
            <link>
                https://www.hjsoft.com/blog/Effective_Performance_Tuning.html
            </link>
            <pubDate>Thu, 30 Aug 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Effective_Performance_Tuning.html
            </guid>
            <description>
                &lt;p&gt;I went to &lt;a href = &quot;http://www.hjsoft.com/blog/link/Tweaking_JBoss_Again&quot;&gt;all that trouble&lt;/a&gt; trying to tune out my JBoss server without much positive effect.  Trac had started to sort of put the squeeze on memory, and all the JBoss tuning in the world wasn&apos;t going to get Trac working better, so I just did the easy thing, and upgraded the server to 288M of RAM.  Now everything&apos;s flying!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Tweaking JBoss Again
            </title>
            <link>
                https://www.hjsoft.com/blog/Tweaking_JBoss_Again.html
            </link>
            <pubDate>Wed, 29 Aug 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Tweaking_JBoss_Again.html
            </guid>
            <description>
                &lt;p&gt;The JBoss server was dragging a bit, so I&apos;ve been poking at the memory and GC settings again:&lt;/p&gt;
&lt;p style = &quot;text-decoration: line-through&quot;&gt;
&lt;code&gt;
-Dprogram.name=run.sh -server -Xms56m -Xmx56m -XX:MaxPermSize=53M -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:ThreadStackSize=96 -Xss96k -XX:+UseBiasedLocking -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Djava.net.preferIPv4Stack=true
&lt;/code&gt;
&lt;/p&gt;
&lt;p style = &quot;text-decoration: line-through&quot;&gt;I basically tightened down the heap, and re-introduced the parallel GC and adaptive sizing.  I&apos;m not sure it&apos;s working well yet.&lt;/p&gt;
&lt;p&gt;Those settings were wholly unsatisfying, so I&apos;m chasing another set of settings which &lt;em&gt;academically&lt;/em&gt; make more sense:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
-Dprogram.name=run.sh -server -Xms50m -Xmx50m -XX:MaxPermSize=50M -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:ThreadStackSize=96 -Xss96k -XX:+UseBiasedLocking -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading -Djava.net.preferIPv4Stack=true
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (29 August 2007):&lt;/strong&gt; &lt;em&gt;Academically&lt;/em&gt;, thrashing virtual memory with complex GC schemes doesn&apos;t make sense, either.  That&apos;s what I started seeing with the Concurrent collector, so I&apos;m back to the default collector that I had before I had started this exercise.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Using Eclipse Organized Imports Without Annoying Others
            </title>
            <link>
                https://www.hjsoft.com/blog/Using_Eclipse_Organized_Imports_Without_Annoying_Others.html
            </link>
            <pubDate>Tue, 28 Aug 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Using_Eclipse_Organized_Imports_Without_Annoying_Others.html
            </guid>
            <description>
                &lt;p&gt;I found a neat little trick in Eclipse 3.3 which will keep my TextMate-using coworkers happier with me.&lt;/p&gt;
&lt;p&gt;Eclipse&apos; Organize Imports (Ctrl-Shift-O) is handy for quickly finding and adding an import for a class you just started using in your code, but the default behavior is to list out each class in a long list of explicit imports.  Users of text editors may hate you for always replacing their &lt;code&gt;import java.util.*;&lt;/code&gt; with your convenient little keystrokes.&lt;/p&gt;

&lt;p&gt;Wildcard imports &lt;em&gt;can&lt;/em&gt; be accomodated and generated from Eclipse by changing a preference.  Open &lt;strong&gt;Window menu -&amp;gt; Preferences window -&amp;gt; Java -&amp;gt; -&gt; Code Style -&amp;gt; Organize Imports&lt;/strong&gt; and change the &lt;em&gt;Number of imports needed for .*&lt;/em&gt; options down to 1.  Then importing just one class from a package will result in an &lt;code&gt;import package.*;&lt;/code&gt;, which your project mates may appreciate more.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Spread Thin
            </title>
            <link>
                https://www.hjsoft.com/blog/Spread_Thin.html
            </link>
            <pubDate>Thu, 23 Aug 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Spread_Thin.html
            </guid>
            <description>
                &lt;p&gt;Looking at my weblog, I feel that I&apos;ve spread the content that I produce pretty thinly.  Jaiku sucks up most my little thoughts, Flickr sucks up my occassional notable photo, del.icio.us has my links -- I don&apos;t have much left to actually post to this weblog.  Fortunately Jaiku aggregates it all together, otherwise, you&apos;d never be able to find it all.&lt;/p&gt;
&lt;p&gt;I&apos;ll have to try to remember to dig through my past Jaiku posts for ideas to expand into real articles.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Hardware on the Way
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Hardware_on_the_Way.html
            </link>
            <pubDate>Tue, 14 Aug 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Hardware_on_the_Way.html
            </guid>
            <description>
                &lt;p&gt;My ThinkPad has twice now started spewing hard drive errors.  This is the 40G drive that IBM sent me nearly 3 years ago to replace the original drive.  The &lt;em&gt;third&lt;/em&gt; drive in this notebook will be an 80G drive from Toshiba.&lt;/p&gt;
&lt;p&gt;While I was ordering the emergency replacement drive at NewEgg, I decided to pick up the other things I&apos;d been wanting.  This includes an IDE-to-USB adapter cable to make troubleshooting and drive migration easier when I get the new drive.  I also picked up a SimpleTech 500GB NAS to replace the old Pentium 200 backup machine.  That should be much quieter and power-efficient, not to mention a huge amount of storage.  With the addition of an external USB drive or two, I can expand this thing well beyond a terabyte.&lt;/p&gt;
&lt;p&gt;Finally, I stumbled upon a 20.1&quot; widescreen LCD from Sceptre as a super-discounted open-box special, so I picked that up to replace the old CRT in the office.  That should also help keep the office cooler.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Emailing My Phone From Log4J
            </title>
            <link>
                https://www.hjsoft.com/blog/Emailing_My_Phone_From_Log4J.html
            </link>
            <pubDate>Tue, 7 Aug 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Emailing_My_Phone_From_Log4J.html
            </guid>
            <description>
                &lt;p&gt;I have JBoss&apos; log4j configured to email my mobile phone using the &lt;code&gt;SMTPAppender&lt;/code&gt;.  My SE W810i didn&apos;t seem to want to display the messages with stacktraces, though.  It said the message used an unsupported encoding.&lt;/p&gt;
&lt;p&gt;By adding the &lt;code&gt;&amp;lt;param name = &quot;Encoding&quot; value = &quot;iso-8859-1&quot;/&amp;gt;&lt;/code&gt; parameter to the appender configuration (&lt;code&gt;jboss-log4j.xml&lt;/code&gt;), I forced the messages down to an encoding that my phone does understand, and now it works nicely.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Software Features Discovered at MapQuest
            </title>
            <link>
                https://www.hjsoft.com/blog/Software_Features_Discovered_at_MapQuest.html
            </link>
            <pubDate>Thu, 26 Jul 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Software_Features_Discovered_at_MapQuest.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m not to have my notebook at work, so I&apos;m scrambling to distribute my normal uses of my notebook onto my work PC and to websites.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://reader.google.com/&quot;&gt;Google Reader&lt;/a&gt; seems to work pretty well in place of &lt;a href = &quot;http://liferea.sourceforge.net/&quot;&gt;Liferea&lt;/a&gt;, and I&apos;ve started using &lt;a href = &quot;http://www.apple.com/itunes/&quot;&gt;iTunes&lt;/a&gt; to suck down podcasts to my work machine.  That may actually mostly work, since that&apos;s where I end up doing most my listening anyway.  We&apos;ll see how it goes on weekends.&lt;/p&gt;

&lt;p&gt;&lt;a href = &quot;http://pidgin.im/pidgin/home/&quot;&gt;Pidgin&lt;/a&gt; is proving to be super-slick as well, since each account can have its own proxy settings.  I have it configured to do my work AIM account normally, and my personal Jabber account passes through a SSH-tunneled SOCKS5 connection.  The interface is very usable as well.  I had been using &lt;a href = &quot;http://psi-im.org/&quot;&gt;Psi&lt;/a&gt; for the longest time.&lt;/p&gt;
&lt;p&gt;Finally, I&apos;ve discovered that &lt;a href = &quot;http://www.mapquest.com/&quot;&gt;MapQuest.com&lt;/a&gt; has some features I&apos;ve been wanting from mapping sites for a while.  One such feature is the &lt;a href = &quot;http://help.mapquest.com/jive/entry.jspa?externalID=45&amp;amp;categoryID=6&quot;&gt;&quot;Places Nearby&quot;&lt;/a&gt; link.  I can just pop in a location, then have it just show me everything around me.  That&apos;s especially useful when you&apos;re just looking for random things to do in a new area.  You can further refine it by category or other search.&lt;/p&gt;
&lt;p&gt;The &quot;Places Nearby&quot; feature isn&apos;t available through the normal WAP site right now, but I hope to see it in newer versions of the Java ME MapQuest client due out later this year.&lt;/p&gt;
&lt;p&gt;I&apos;ve also discovered that &lt;a href = &quot;http://www.adobe.org/&quot;&gt;Adobe&lt;/a&gt; has a free &lt;a href = &quot;http://www.adobe.com/devnet/flex/&quot;&gt;Flex&lt;/a&gt; compiler for producing Flash applications from Actionscript and MXML markup -- I&apos;ve created my own little Flash apps now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Roman Pichler on Scrum
            </title>
            <link>
                https://www.hjsoft.com/blog/Roman_Pichler_on_Scrum.html
            </link>
            <pubDate>Thu, 28 Jun 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Roman_Pichler_on_Scrum.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.se-radio.net/&quot;&gt;Software Engineering Radio&lt;/a&gt; has an excellent &lt;a href = &quot;http://www.se-radio.net/index.php?post_id=220581&quot;&gt;introductory discussion of Scrum&lt;/a&gt; with &lt;a href = &quot;http://www.se-radio.net/index.php?post_id=220581&quot;&gt;Roman Pichler&lt;/a&gt;.  Check it out.&lt;/p&gt;
&lt;p&gt;I&apos;m hoping to soon have the opportunity to put some of these lightweight process to the test in personal and team environments.  I think my first step may be to start getting some user stories into Trac as my backlog, and then bite of a small list of features to be a personal sprint.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                MapQuest
            </title>
            <link>
                https://www.hjsoft.com/blog/MapQuest.html
            </link>
            <pubDate>Thu, 28 Jun 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/MapQuest.html
            </guid>
            <description>
                &lt;p&gt;In the next week, I&apos;ll be leaving my current job and going to work with &lt;a href = &quot;http://www.mapquest.com/&quot;&gt;MapQuest&lt;/a&gt; (via &lt;a href = &quot;http://www.teksystems.com/&quot;&gt;TEKsystems&lt;/a&gt;).  They use Java, and they have an office within 5 miles of my house.  It&apos;ll be nice to be done commuting 90 miles each day.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                W810i Failed Playlist
            </title>
            <link>
                https://www.hjsoft.com/blog/W810i_Failed_Playlist.html
            </link>
            <pubDate>Thu, 28 Jun 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/W810i_Failed_Playlist.html
            </guid>
            <description>
                &lt;p&gt;Yesterday, I added a couple 1-hour podcasts to my W810i and dropped them into a playlist.  When I tried to play it, it just said &quot;Failed&quot;, and shutdown the player.  After that I couldn&apos;t even open the player with the Walkman button -- it just said &quot;Failed&quot; again and slowly went back to the standby screen.&lt;/p&gt;
&lt;p&gt;Restarting didn&apos;t help, removing the files didn&apos;t help, and removing the card didn&apos;t help.  Finally, I managed to get into the Walkman player mode through the main menu which doesn&apos;t go right to the current playlist.  From the Walkman menu, I could select another song and get it playing again.&lt;/p&gt;
&lt;p&gt;In the end, I found that selecting the playlist again would cause the failure, so I deleted the playlist and rebuilt it.  All is well now.  The playlist must have gotten corrupted somehow when I was manipulating it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sony Ericsson W810i
            </title>
            <link>
                https://www.hjsoft.com/blog/Sony_Ericsson_W810i.html
            </link>
            <pubDate>Fri, 8 Jun 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Sony_Ericsson_W810i.html
            </guid>
            <description>
                &lt;p&gt;As most people with face-to-face contact with me know, I&apos;ve recently picked up a new &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=893&quot;&gt;Sony Ericsson W810i&lt;/a&gt; from &lt;a href = &quot;http://www.cingular.com/&quot;&gt;Cingular&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was very happy with the phone from the start, then about 4 hours later I discovered how brain-dead crippled the phone was by Cingular.  With all hopes dashed, I resolved to unbrand the phone or return it.&lt;/p&gt;
&lt;h2&gt;Unbranding&lt;/h2&gt;
&lt;p&gt;I had come to expect the &quot;security&quot; limitations imposed on the Java implementation, but finding the stock Sony Ericsson email client disabled was completely unacceptable.&lt;/p&gt;
&lt;p&gt;I found some scant mentions of free tools to manipulate Sony Ericsson phones, but alas, they all seemed too scary for me -- I just didn&apos;t have the stomach for &lt;em&gt;bricking&lt;/em&gt; my phone.  In the end I chose to pay about $10 and use &lt;a href = &quot;http://www.wotanserver.com/&quot;&gt;Wotan Server&lt;/a&gt; -- they&apos;re documentation seemed the most complete.&lt;/p&gt;
&lt;p&gt;I actually ended up running the Wotan software on my work computer, since I didn&apos;t have a readily available Windows machine otherwise.  After the longest 5 minutes or so of my life, the unbranding process completed, and I rebooted to have a completely functional and kick-ass phone!  Not only did the nice email client return, but I found that the Java implementation was functional beyond my wildest dreams -- I had open access to Bluetooth, PIM, camera, and even network sockets!  &lt;a href = &quot;http://www.xk72.com/midpssh/&quot;&gt;MidpSSH&lt;/a&gt; now runs!  I&apos;ve wanted MidpSSH on my phones for years.&lt;/p&gt;
&lt;p&gt;Cingular seems to have even disabled the Flash Lite menu system for some reason, so I have that back as well.&lt;/p&gt;
&lt;p&gt;I&apos;m currently running the R4EA031 firmware.  I&apos;m pretty sure I can&apos;t use Sony Ericsson&apos;s Update Service with this firmware, though.  It seems to figure out it should be a Cingular phone, and pushes that crippled firmware back onto it, but left the upgraded filesystem.  (See &lt;strong&gt;I Broke It&lt;/strong&gt; below to see why I had opportunity to flash phones a couple times.)&lt;/p&gt;
&lt;h2&gt;Back to the Beginning, Unpacking the Device and Accessories&lt;/h2&gt;
&lt;p&gt;The phone is the tiny candy bar style -- very similar to my old T616.  I love this form factor, though I miss the larger 320x240 pixel screen of my old S710a for a few uses.&lt;/p&gt;
&lt;p&gt;Claire hated the tiny buttons when I tried to get her to pick this phone, but I don&apos;t mind it in the least.  It&apos;s great to have so many functions so quickly accessible.&lt;/p&gt;
&lt;p&gt;The phone comes with a USB cable and a 256M MemoryStick Duo Pro card.  This is a pretty good start.  The USB is indispensable if you&apos;re going to be loading music onto the phone, which you should, since it comes with very nice ear buds.&lt;/p&gt;
&lt;p&gt;The ear buds are nice little Sony deep-ear, isolating things.  They sound very good.  As I unfortunately found out, to buy comparable replacement Sony ear buds can be quite expensive (~ $40).&lt;/p&gt;
&lt;p&gt;They also finally provided a normal 1/8-inch stereo jack, so you can use your own head phones or plug the phone into any other audio system (like your car).  The jack is still in a proprietary cable, but it&apos;s better than nothing.  The ear buds (or anything else) plug into the main cable, and the microphone&apos;s there, so you can use any headphones for phone calls.  I had hacked up my old hands-free kit on my S710a to add a jack.&lt;/p&gt;
&lt;h2&gt;Connecting to the Linux Notebook&lt;/h2&gt;
&lt;p&gt;The Bluetooth works great for serial tethering, OBEX (pushing applications and media, pulling media) just like I came to expect back with my &lt;a href = &quot;http://www.hjsoft.com/blog/link/SonyEricsson_S710a&quot;&gt;S710a&lt;/a&gt;,
and &lt;a href = &quot;http://www.hjsoft.com/blog/link/Fun_Bluetooth_Linux&quot;&gt;T616&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The phone also came with a USB cable. The phone has 2 modes: &lt;strong&gt;Phone Mode&lt;/strong&gt; or &lt;strong&gt;File Transfer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Phone Mode makes it do OBEX/serial just like it does over Bluetooth.  I just use &lt;code&gt;obexftp -u 0&lt;/code&gt; or talk to &lt;code&gt;/dev/ttyACM0&lt;/code&gt; in place of &lt;code&gt;/dev/rfcomm0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;File Transfer mode reboots the phone and makes it act as a little USB mass storage device, which Linux can still see.  I&apos;d get some errors on the Linux box about overrunning the end of the device (especially with Nautilus), but it worked for the most part.  I still choose to use Phone Mode primarily though, since it keeps all the normal phone functionality enabled.&lt;/p&gt;
&lt;p&gt;It took me a long time to get around to it, but I finally poked around and found a link with hints at having &lt;a href = &quot;http://news.softpedia.com/news/Access-Your-Mobile-Phone-Through-USB-Cable-46486.shtml&quot;&gt;udev assign more open permissions to my phone when it&apos;s plugged into USB&lt;/a&gt;.  Ultimately, I ended up creating an &lt;code&gt;/etc/udev/rules.d/phone.rules&lt;/code&gt; file containing only this line:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;BUS==&quot;usb&quot;, SYSFS{idVendor}==&quot;0fce&quot;, SYSFS{idProduct}==&quot;d042&quot;, GROUP=&quot;plugdev&quot;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Since I&apos;m in the &lt;code&gt;plugdev&lt;/code&gt; group on my notebook, this provided sufficient access.  With this access, I use the USB primarily to push music and podcasts to the phone.&lt;/p&gt;
&lt;h2&gt;Messaging&lt;/h2&gt;
&lt;p&gt;The email client has gotten slicker since previous phones.  It now has the option to stay connected all the time and watch for email.  Email gets delivered from my IMAP account within seconds  of arrival on the server.  It&apos;s like push email, and much faster than the 5-minute polling I used to do.  I&apos;ve abandoned using SMS for quick email notifications, and now I just use my IMAP account, since it&apos;s so fast.&lt;/p&gt;
&lt;p&gt;With Bluetooth enabled and this push email option holding the data network up all the time, my battery lasts about 2 days.&lt;/p&gt;
&lt;h2&gt;Camera&lt;/h2&gt;
&lt;p&gt;The 2 megapixel camera is awesome! You can see examples shots mixed into my &lt;a href = &quot;http://flickr.com/photos/jflinchbaugh/&quot;&gt;Flickr account&lt;/a&gt;.  Macro mode is a welcome addition to the feature set, but spot metering is gone.  Camera silent mode succeeds in muting the obnoxious shutter sound.  I&apos;ll continue to use this camera extensively.&lt;/p&gt;
&lt;p&gt;The W810i has a few more image editing options, but rotation and scaling still seems a bit awkward.  It&apos;s nice to be able to use the zoom functionality while viewing a saved photo to have more flexible cropping, but it seems to save at odd resolutions (no 320x160 or 640x480).  Since I&apos;m emailing photos to Flickr these days, I don&apos;t care so much about the scaling, since that happens on the server-side now.&lt;/p&gt;
&lt;h2&gt;Yes, I Even Use It for Voice, Occasionally&lt;/h2&gt;
&lt;p&gt;The voice quality is amazingly good.  The S710a was a bit disappointing in the end, but this phone performs very well, even with low signal.  During the unbranding process, I did enable the AMR codec which allows lower sampling rates with low signal.  I must wonder if AT&amp;amp;T/Cingular support this codec at all, because this may be the key to voice quality still being useful even with low signal.  I didn&apos;t test the phone too much before modifying it.&lt;/p&gt;
&lt;p&gt;The ear piece volume is a bit low for use in noisy environments (the car), but a nice set of earplug-style ear buds makes it much easier to hear.&lt;/p&gt;
&lt;h2&gt;I Broke It&lt;/h2&gt;
&lt;p&gt;About a month into using the phone, the shutter button started flaking out.  It has the 2-click functionality common on most cameras where the half press focuses and the full press takes the picture.  Well, the full-click stopped registering.  It felt like an obvious hardware defect, but cleaning didn&apos;t help it.  After about a week of struggling with it, I ended up sending it back to Cingular  for a replacement.  I unfortunately had to go through the whole unbranding process again with the new phone. (I never did hear any noise from Cingular about the broken phone being unbranded.  That&apos;s good of them.)&lt;/p&gt;
&lt;p&gt;The only problem with the new phone is that I put a few scratches in the screen pretty early.  I&apos;ve always hated those hazy little screen protector sheets, and I never had a need for them previously.  Maybe I&apos;ll change my tune now, though I&apos;ve still not installed one.  (It&apos;ll just make it worse.)&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I&apos;m extremely happy with this phone.  It&apos;s the best I&apos;ve had.  I think I&apos;ve also learned my lesson about locked phones.  I&apos;ll pay the extra $100 next time and buy the retail, unlocked phone to avoid the hassles.  Clean phones resell better, and I&apos;ll not have to necessarily limit my upgrades to 2-year periods.&lt;/p&gt;
&lt;p&gt;A friend is trying to convince me to step up to more advanced S60 phones from Nokia, and I may bite (since I&apos;ll not wait for subsidized phones anymore), but I more likely will remain a Sony Ericsson super-fan.  As a developer, I like to target the more widely available Java phones over smart phones.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Assigning Multimedia Keys for RhythmBox
            </title>
            <link>
                https://www.hjsoft.com/blog/Assigning_Multimedia_Keys_for_RhythmBox.html
            </link>
            <pubDate>Wed, 30 May 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Assigning_Multimedia_Keys_for_RhythmBox.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve long used the little page-back and page-forward buttons on my ThinkPad as multimedia keys instead of paging.  The latest version of Gnome Control Center (2.18.1) on my Debian box stopped doing it properly, so I lost easy control of RhythmBox.&lt;/p&gt;
&lt;p&gt;Thanks to some browsing, and the discussion on this &lt;a href = &quot;http://bugzilla.gnome.org/show_bug.cgi?id=133815&quot;&gt;bug report&lt;/a&gt;, I figured out that it was just a matter of mapping the keycodes to the right keysyms, so now I have this in my &lt;code&gt;~/.Xmodmap&lt;/code&gt; in hopes that it continues to work for me:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;keycode 234 = XF86AudioPlay
keycode 236 = XF86AudioNext&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Update (30 May 2007):&lt;/strong&gt;
This eventually broke again, and my best option to see it work was to drop the &lt;code&gt;.Xmodmap&lt;/code&gt; settings and go back to letting the Gnome keyboard shortcuts do it, which seems to work again.  Whatever.  It&apos;s weird changes like this that make Claire not like my computers.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eclipse Text Editor Extension Plugin
            </title>
            <link>
                https://www.hjsoft.com/blog/Eclipse_Text_Editor_Extension_Plugin.html
            </link>
            <pubDate>Thu, 17 May 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Eclipse_Text_Editor_Extension_Plugin.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been ripping through lots of code refactoring and cleaning, so I&apos;ve been dying to script up a few of these basic text manipulations, but Eclipse doesn&apos;t really have much to help there.  I went searching, and found the &lt;a href = &quot;http://eclipseexeditor.sourceforge.net/index.html&quot;&gt;Eclipse Text Editor Extension&lt;/a&gt; plugin.  It&apos;s really basic, but its most useful feature is the &quot;Filter...&quot; functionality.  It lets you select a chunk of code, and run any shell commands on that code as a  filter.&lt;/p&gt;
&lt;p&gt;This is great!  It opens up all sorts of possibilities which you&apos;d have using &lt;em&gt;lesser&lt;/em&gt; plain text editors like &lt;code&gt;vi&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;My first application of this excellent little plugin was to hack up a quick little Perl script to wrap SQL code in Java string literals.  I&apos;ve been doing lots of this by hand, but no more!  &lt;a href = &quot;http://www.cygwin.com/&quot;&gt;Cygwin&lt;/a&gt; and some PATH hacking make this especially useful on Windows.&lt;/p&gt;
&lt;p&gt;I&apos;ve recently begun recognizing the value of shortcut keys, so I&apos;m pleased to see that I can quickly get to the filter dialog by pressing Alt-Shift-|(pipe).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Oldest NIC
            </title>
            <link>
                https://www.hjsoft.com/blog/Oldest_NIC.html
            </link>
            <pubDate>Wed, 9 May 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Oldest_NIC.html
            </guid>
            <description>
                &lt;p&gt;I just swapped out one of he oldest NICs I have around here.  As I recollect, It&apos;s only 10-mbit and the first PCI NIC I bought.  It&apos;s been passed along from server to server starting in my old Pentium 200, and I finally pulled it from the Athlon 64 X2 yesterday.&lt;/p&gt;
&lt;p&gt;10-mbit was enough to talk to the 6-mbit cablemodem, but finally, these later Linux kernels have been taking issue with it, causing it to drop interrupts and timeout.  Earlier kernels didn&apos;t do it as much, so I&apos;ve taken it to mean that it may just not be keeping up well with recent changes in the ne2k-pci driver.  Replacing the NIC with a cheap 3COM card was just easier too.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                More RAM!
            </title>
            <link>
                https://www.hjsoft.com/blog/More_RAM.html
            </link>
            <pubDate>Mon, 7 May 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/More_RAM.html
            </guid>
            <description>
                &lt;p&gt;I extended my notebook&apos;s RAM from 512M to 1280M.  It&apos;s great!  No more swapping as JBoss, Gnome, Eclipse, and Firefox take their turns executing, and now I have lots of caching (500M at the momemnt).  Life&apos;s too short to wait for your applications to swap in and out of memory.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Beer Stock 2007-05-07
            </title>
            <link>
                https://www.hjsoft.com/blog/Beer_Stock_2007-05-07.html
            </link>
            <pubDate>Mon, 7 May 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Beer_Stock_2007-05-07.html
            </guid>
            <description>
                &lt;p&gt;The beer fridge was looking pretty barren last weekend (only 2 Yuengling Lagers), but I fixed it.  The nice guy at Kirchner recommended the &lt;a href = &quot;http://www.harpoonbrewery.com/&quot;&gt;Harpoon&lt;/a&gt; UFO (UnFiltered Offering) Hefeweizen for a good summer wheat beer.  It proved to be an excellent recommendation.  It&apos;s light but tasty and grainy feeling.  It goes down like water.&lt;/p&gt;
&lt;p&gt;I also picked up a 12-pack of Samuel Smith&apos;s Oatmeal Stout.  Fortunately, this doesn&apos;t go down like water, because that would be awfully expensive.&lt;/p&gt;
&lt;p&gt;Finally, Lynn introduced a 6-pack of Brooklyn Brewery&apos;s Double Chocolate Stout to round out the collection.  It&apos;s probably been a year since I&apos;ve had either the Brooklyn or the Sammy Smith.  Good stuff.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Teachers Just Want to Have Fun
            </title>
            <link>
                https://www.hjsoft.com/blog/Teachers_Just_Want_to_Have_Fun.html
            </link>
            <pubDate>Wed, 2 May 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Teachers_Just_Want_to_Have_Fun.html
            </guid>
            <description>
                &lt;p&gt;I heard on the news this morning that Millersville University is involved in a lawsuit over &lt;a href = &quot;http://blog.washingtonpost.com/offbeat/2007/05/myspace_photo_costs_teacher_ed.html&quot;&gt;denying a teacher her certification over a MySpace photo&lt;/a&gt; of her with a drink at a Halloween party.&lt;/p&gt;

&lt;p&gt;Rightfully, she&apos;s suing the school over the whole thing.  I hope she gets this corrected.  In an age when anyone can post anything about anyone, it doesn&apos;t make sense to evaluate if she posted the pictures herself or it was someone else.  There&apos;s nothing wrong with having an unprofessional life, and we need to learn to consider context.  A drunken pirate at a Halloween party does not imply she represents a drunken pirate in the classroom.&lt;/p&gt;
&lt;p&gt;Would this have been different if it was posted to FaceBook, which had traditionally started out as more of a college-age service?  Of course, MySpace started out as a place for bands, so what&apos;s it matter what the intended audience is?&lt;/p&gt;
&lt;p&gt;Here&apos;s a &lt;a href = &quot;http://www.whptv.com/news/local/story.aspx?content_id=a9bf5401-4030-413b-9fc3-14e51036a49e&quot;&gt;more local link to the story&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Environmentalist Democrats?
            </title>
            <link>
                https://www.hjsoft.com/blog/Environmentalist_Democrats.html
            </link>
            <pubDate>Mon, 23 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Environmentalist_Democrats.html
            </guid>
            <description>
                &lt;p&gt;Was I not paying attention during the previous two presidential campaigns?  I knew I was voting for the Democratic candidate, but I don&apos;t remember thinking I&apos;d be getting super-environmentalists.&lt;/p&gt;
&lt;p&gt;Gore ran with the whole &lt;a href = &quot;http://www.climatecrisis.net/&quot;&gt;global warming&lt;/a&gt; thing, and now it seems the Kerry&apos;s have tossed a &lt;a href = &quot;http://www.johnkerry.com/momentonearth/&quot;&gt;book onto the bandwagon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&apos;s great to have high-profile people bringing attention to these issues, but it feels like some may be using these hot issues to &lt;em&gt;maintain&lt;/em&gt; their high profile.&lt;/p&gt;
&lt;p&gt;I just don&apos;t remember these people running on these platforms.  I must wonder if the environment would have been as strong of a component in their leadership if Gore or Kerry had been elected.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Podington Bear
            </title>
            <link>
                https://www.hjsoft.com/blog/Podington_Bear.html
            </link>
            <pubDate>Fri, 20 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Podington_Bear.html
            </guid>
            <description>
                &lt;p&gt;Yesterday, &lt;a href = &quot;http://www.npr.org/templates/rundowns/rundown.php?prgId=3&amp;amp;prgDate=19-Apr-07&quot;&gt;Morning Edition&lt;/a&gt; ended their show with mention of artists writing, recording, producing, and distributing music &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=9666926&quot;&gt;nearly daily&lt;/a&gt; as podcasts.&lt;/p&gt;
&lt;p&gt;Thankfully, I&apos;ve now discovered &lt;a href = &quot;http://www.podingtonbear.com/&quot;&gt;Podington Bear&lt;/a&gt;.  He&apos;s producing great little upbeat electronic tracks and remixes at a rate of 3 per week.  It sounds great so far.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Nostalgia for TechTV
            </title>
            <link>
                https://www.hjsoft.com/blog/Nostalgia_for_TechTV.html
            </link>
            <pubDate>Tue, 17 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Nostalgia_for_TechTV.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.hjsoft.com/blog/searchArticles.java?search=techtv&quot;&gt;The old talk.&lt;/a&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Watching for Linux WTK 2.5
            </title>
            <link>
                https://www.hjsoft.com/blog/Watching_for_Linux_WTK_25.html
            </link>
            <pubDate>Mon, 16 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Watching_for_Linux_WTK_25.html
            </guid>
            <description>
                &lt;p&gt;I love the new software rat race for some reason, so I was all excited to see &lt;a href = &quot;http://java.sun.com/products/sjwtoolkit/download-2_5.html&quot;&gt;WTK 2.5&lt;/a&gt; was released.  It&apos;s only for WinXP at this point, though, so I&apos;ll be  watching for the Linux one.  I hope it won&apos;t be too long, since my Linux notebook is my only mobile development platform.  I&apos;ve been using WTK 2.2 for the longest time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (13 April 2007):&lt;/strong&gt; I see that Sun has an early access version of &lt;a href = &quot;http://java.sun.com/products/sjwtoolkit/download-2_5_1.html&quot;&gt;WTK 2.5.1&lt;/a&gt; available for Linux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (16 April 2007):&lt;/strong&gt; Thank&apos;s to an explanation at &lt;a href = &quot;http://gnu.wildebeest.org/diary-man-di/?p=36&quot;&gt;man-di&apos;s weblog&lt;/a&gt;, I see that it&apos;s built against a newer version of GLIBC (2.4 I guess), so the emulator doesn&apos;t want to run on my Debian unstable box.&lt;/p&gt;
&lt;p&gt;Fortunately, I just did an update of Debian and found that GLIBC 2.5 just hit the unstable tree.  Awesome!  I&apos;m up and running now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                RSSing up the Weblog
            </title>
            <link>
                https://www.hjsoft.com/blog/RSSing_up_the_Weblog.html
            </link>
            <pubDate>Wed, 11 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/RSSing_up_the_Weblog.html
            </guid>
            <description>
                &lt;p&gt;I was previously using an old RSS library from Churchill Objects (maybe gone now?).  I had hacked it up a bit to make it produce more compliant feeds from this weblog.&lt;/p&gt;
&lt;p&gt;I was originally planning to replace it with a template of my own done in JSP or something (similar to what I saw Blojsom do), but decided instead to give &lt;a href = &quot;https://rome.dev.java.net/&quot;&gt;ROME&lt;/a&gt; a shot.  It seems to be pretty widely used already, and it would provide me easy facilities to produce &lt;em&gt;and consume&lt;/em&gt; other feed types.  Integrating other feeds into the weblog is another near future goal of mine.&lt;/p&gt;
&lt;p&gt;Porting was pretty simple, since ROME has a very familiar object model for a feed.  ROME&apos;s now producing my old article feeds, plus I pretty quickly added a feed for latest comments.  I hope to abstract this process further to allow me to add feeds for just about anything I want in the minimal time.  ROME has the added benefit of seeming to be actively maintained.  It&apos;s been a good experience so far, and I look forward to using it for loftier goals.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Breaking Hearts with Presence Networks
            </title>
            <link>
                https://www.hjsoft.com/blog/Breaking_Hearts_with_Presence_Networks.html
            </link>
            <pubDate>Wed, 11 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Breaking_Hearts_with_Presence_Networks.html
            </guid>
            <description>
                &lt;p&gt;I found &lt;a href = &quot;http://www.groovr.com/user/jflinchbaugh/&quot;&gt;Groovr&lt;/a&gt; a bit lacking in features, so I jumped to &lt;a href =&quot;http://twitter.com/jflinchbaugh&quot;&gt;Twitter&lt;/a&gt;.  At that point, I had started wondering how I can &lt;a href = &quot;http://www.hjsoft.com/blog/link/My_Own_Little_Web_20&quot;&gt;pull it all back together&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Over the past weekend, one of the primary people I&apos;ve been watching in Twitter, Leo Laporte, &lt;a href = &quot;http://leoville.vox.com/library/post/goodbye-twitter-hello-jaiku.html&quot;&gt;jumped ship to go to Jaiku&lt;/a&gt;.  Besides now having Leo Laporte, &lt;a href = &quot;http://jaiku.com/&quot;&gt;Jaiku&lt;/a&gt; has a couple extra features over Twitter.  Most interestingly, you can import feeds from other networks to aggregate everything into one place!&lt;/p&gt;
&lt;p&gt;So...I have an &lt;a href = &quot;http://jflinchbaugh.jaiku.com/&quot;&gt;account&lt;/a&gt; there now too.  (That&apos;s 3 accounts now.)  In addition to my microblog/presence there, I&apos;m importing my feeds for Flickr, Twitter friends, weblog, and I&apos;ll probably add my Last.fm feed too.  This is sort of slick.&lt;/p&gt;
&lt;p&gt;Of course, it won&apos;t take much to break the hearts of thousands again when someone comes out with the next Twitter + 1 or Jaiku + 1 service which does all this and one more thing, and we all jump again.  This is a game to see who can run fastest to hang onto the crowd for that extra 10 seconds.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Away from the Computer on April 1
            </title>
            <link>
                https://www.hjsoft.com/blog/Away_from_the_Computer_on_April_1.html
            </link>
            <pubDate>Mon, 2 Apr 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Away_from_the_Computer_on_April_1.html
            </guid>
            <description>
                &lt;p&gt;I wasn&apos;t really online much yesterday, so thankfully, I found a &lt;a href = &quot;http://www.blueskyonmars.com/2007/04/01/april-fools-day-roundup/&quot;&gt;roundup&lt;/a&gt; of all the good jokes.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                My Own Little Web 2.0
            </title>
            <link>
                https://www.hjsoft.com/blog/My_Own_Little_Web_20.html
            </link>
            <pubDate>Thu, 29 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/My_Own_Little_Web_20.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve had my little &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/john/&quot;&gt;
mobile weblog&lt;/a&gt; for a couple years, but its functionality is relatively limited, so I&apos;m looking for more.&lt;/p&gt;
&lt;p&gt;I&apos;ve become a bit of a &lt;em&gt;joiner&lt;/em&gt; recently, and I&apos;ve joined a few services, including &lt;a href = &quot;http://www.groovr.com/user/jflinchbaugh/&quot;&gt;Groovr&lt;/a&gt;, &lt;a href = &quot;http://twitter.com/jflinchbaugh&quot;&gt;Twitter&lt;/a&gt;, and most recently &lt;a href = &quot;http://flickr.com/photos/jflinchbaugh/&quot;&gt;Flickr&lt;/a&gt;.  I figure I have my normal weblog for longer-form articles and a repository for my more important thoughts, but I could use Twitter and Flickr for the &lt;em&gt;micro&lt;/em&gt; stuff.&lt;/p&gt;
&lt;p&gt;I don&apos;t want to be splattered all over the internet like some of people I know, so I need a way to pull this all back together into one place -- one stream.  If I&apos;m posting on Twitter and Flickr at about the same time, then it&apos;s likely the photos and text are related and should be presented together.&lt;/p&gt;
&lt;p&gt;How do I integrate these?  Or should I be looking at another service?  Groovr wasn&apos;t quite it, but could be some day.&lt;/p&gt;
&lt;p&gt;I&apos;m also not sure how important the social aspect is to me.  It&apos;s awfully amusing to watch certain people within these networks, but am I really contributing anything back to these networks?  Probably not so much.  I must have at least a bit of an exhibitionist thing, though, since I want to post this stuff at all.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cleaned Up the DVR
            </title>
            <link>
                https://www.hjsoft.com/blog/Cleaned_Up_the_DVR.html
            </link>
            <pubDate>Fri, 23 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cleaned_Up_the_DVR.html
            </guid>
            <description>
                &lt;p&gt;Claire and I took turns deleting stuff off the DVR the other night.  We hacked it down from about 60% to less than 20%!&lt;/p&gt;
&lt;p&gt;One of the largest chunks of disk was occupied by most every episode of &lt;a href = &quot;http://www.bbc.co.uk/comedy/coupling/&quot;&gt;Coupling&lt;/a&gt; recorded from &lt;a href = &quot;http://www.bbcamerica.com/&quot;&gt;BBC America&lt;/a&gt;.  I finally can delete them, since Claire just bought me the entire series on DVD for my birthday!  The show is  hilarious, but no longer in production.  I&apos;ve shown it to a couple friends already, but I&apos;ll be more than willing to screen more episodes with anyone who&apos;s interested.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mobile Units of Work
            </title>
            <link>
                https://www.hjsoft.com/blog/Mobile_Units_of_Work.html
            </link>
            <pubDate>Fri, 23 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mobile_Units_of_Work.html
            </guid>
            <description>
                &lt;p&gt;I often find myself standing around with my phone for a few minutes wanting something to do, but I don&apos;t usually want a game!  I need something like Amazon&apos;s &lt;a href = &quot;http://www.mturk.com/mturk/welcome&quot;&gt;Mechanical Turk&lt;/a&gt; to break work into tiny units of work, and let me do each bit in these spare moments.&lt;/p&gt;
&lt;p&gt;Introduce a framework to distribute anyone&apos;s work (and money) to people with spare moments with their mobiles, and you have the Mobile Mechanical Turk!&lt;/p&gt;
&lt;p&gt;What units of work are appropriate for the small screen and short windows of time?  Surveys with only a few questions seem like a logical choice.&lt;/p&gt;
&lt;p&gt;I guess plain RSS reading on the phone could serve my purposes, but this isn&apos;t really synchronized with my normal desktop reader, so there&apos;s the problem of overlap.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TwitterVision
            </title>
            <link>
                https://www.hjsoft.com/blog/TwitterVision.html
            </link>
            <pubDate>Thu, 22 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TwitterVision.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.groovr.com/&quot;&gt;Groovr&lt;/a&gt; has its growing pains with its location system.  I keep accidentally checking into other people&apos;s work, or otherwise creating duplicate locations in the wrong cities.&lt;/p&gt;
&lt;p&gt;I&apos;ve been watching &lt;a href = &quot;http://www.twitter.com/&quot;&gt;Twitter&lt;/a&gt; as an alternative, and now it seems that &lt;a href = &quot;http://twittermap.com/twittervision&quot;&gt;TwitterVision&lt;/a&gt; adds &lt;a href = &quot;http://twittermap.com/maps/faq.html&quot;&gt;location&lt;/a&gt; to the service.  The alias system looks like just the right solution, so maybe I&apos;ll create a Twitter account now.&lt;/p&gt;
&lt;p&gt;To be honest, it&apos;s sometimes hard to remember to update Groovr, but now that I think about it, I may miss posting photos if I switch to Twitter.  &lt;em&gt;Hmmm...&lt;/em&gt;  Really, I just wish Groovr would get their location/alias system working better.  They&apos;re shooting for shared hot spots on which people can converge and otherwise socially interact, but I just want geo-tracking and a photo stream.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Practical Subversion, Second Edition
            </title>
            <link>
                https://www.hjsoft.com/blog/Practical_Subversion_Second_Edition.html
            </link>
            <pubDate>Fri, 16 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Practical_Subversion_Second_Edition.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.apress.com/&quot;&gt;Apress&lt;/a&gt; was again so kind as to send me a copy of &lt;a href = &quot;http://apress.com/book/bookDisplay.html?bID=10203&quot;&gt;Practical Subversion, Second Edition&lt;/a&gt;.  I had read the &lt;a href = &quot;http://www.hjsoft.com/blog/link/Review_Practical_Subversion&quot;&gt;first edition&lt;/a&gt; a couple years ago and gleaned lots of good information, so this time around I was already pretty familiar with the subject material.  Today, I use Subversion to track the source for my various Java projects.&lt;/p&gt;
&lt;p&gt;The introduction and crash course chapters provide a great primer to the basics of version control -- any version control.  Since the newest versions of Subversion have added support for features like locking, the authors added material on these as well.  In these chapters I learned about these new features and their recommended application.&lt;/p&gt;
&lt;p&gt;The administration and migration chapters ensure that you&apos;ll be able to handle any aspect of keeping your repository running.  I know lots of tools to help me when I need them, but I&apos;ve not needed most this knowledge yet, since my usage of Subversion remains pretty simple.  I was delighted to find that there was a new backend to the repository (FSFS) which doesn&apos;t suffer the complexities of the old BerkleyDB backend.  I found my newer repositories were created using this backend, so I went back and converted all my old repositories.&lt;/p&gt;
&lt;p&gt;I only skimmed the chapter on Apache integration, since I accomplished most of that with the previous version of the book.&lt;/p&gt;
&lt;p&gt;I greatly enjoyed the chapter on best practices.  I love these more academic discussions trying to learn the big picture.  Everyone should read this chapter (again, for any version control system).  Lots of people have already figured out the best ways to structure and use a repository, so take benefit of their experiences.&lt;/p&gt;
&lt;p&gt;In the chapter on tool integration, I found &lt;a href = &quot;http://trac.edgewall.org/&quot;&gt;Trac&lt;/a&gt;! It&apos;s a repository browser, wiki engine, and simple issue tracker.  This was the real jewel for me in this chapter, and I happened upon it exactly when I was looking for such a tool.  ViewVC and SVN:Web are covered in more detail, but I think the book would have probably done well to concentrate more time on Trac.  Otherwise, the authors provide some quick pointers to get you started integrating your IDE with Subversion.  I&apos;ll also come back to this chapter when I need to get Ant pulling source code for a continuous build system.&lt;/p&gt;
&lt;p&gt;Throughout this newer edition of the book, there are scripts and add-ons highlighted to make your life with Subversion easier.  There are many more noted here than in the previous edition.  You can definitely tell that more people are using Subversion and this book does well keeping up with the advances that those people have made.&lt;/p&gt;
&lt;p&gt;The final chapter of the book talks about using the Subversion APIs.  In my review of the first edition of this book, I had predicted that knowing these APIs could be useful for me to do complex manipulations and reporting on the repository, but in reality, I&apos;ve still not touched them.  To be honest, I probably never will.  I just don&apos;t need that much power, and other people are doing good things for me (see Trac).&lt;/p&gt;
&lt;p&gt;The appendices include the obligatory reference for all the commands in case you&apos;re not actually sitting at your computer with the built-in &lt;code&gt;help&lt;/code&gt; command.  Otherwise, there&apos;s the quick comparisons of Subversion to other version control systems.  Each system is only covered in a couple pages, but this is especially useful if you&apos;re migrating and still &lt;em&gt;think&lt;/em&gt; primarily in another system.&lt;/p&gt;
&lt;p&gt;These days, I mostly interact with Subversion through the Subclipse plugin for Eclipse, but I often drop into a shell when bootstrapping a new repository and project (and sometimes for entertainment, I just struggle trying to get Subclipse to do the right thing).  That said, I wouldn&apos;t carry around a paper copy of this book in my bag on a daily basis for my needs.  I think daily operation with Subversion is relatively easy.  If I was the administrator of a repository for lots of other people, it would be a different story -- this book would never be far from my reach.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java ME at the Harrisburg JUG
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_ME_at_the_Harrisburg_JUG.html
            </link>
            <pubDate>Fri, 16 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_ME_at_the_Harrisburg_JUG.html
            </guid>
            <description>
                &lt;p&gt;I gave a quick little talk at last night&apos;s &lt;a href = &quot;http://www.harrisburgjug.org/display/JUG/2007-03-15+Extending+JUnit&quot;&gt;JUG meeting&lt;/a&gt; on porting game code to run in Java ME.  For demonstration, I ported a little &lt;a href = &quot;http://en.wikipedia.org/wiki/Breakout&quot;&gt;BreakOut&lt;/a&gt; game from the previous meeting.&lt;/p&gt;
&lt;p&gt;I think it went well enough, but I can tell that people still don&apos;t grasp the potential of running software on your phone.  There are still too many people just thinking, &quot;I have a phone to make phone calls.&quot;.&lt;/p&gt;
&lt;p&gt;I was hoping to do more presentations on Java ME, but I guess I won&apos;t yet.  Maybe I&apos;ll keep doing these short talks to keep it in people&apos;s minds.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Drunk and Retired Podcast
            </title>
            <link>
                https://www.hjsoft.com/blog/Drunk_and_Retired_Podcast.html
            </link>
            <pubDate>Mon, 12 Mar 2007 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Drunk_and_Retired_Podcast.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://drunkandretired.com/podcast/&quot;&gt;Drunk and Retired Podcast&lt;/a&gt; is the &lt;em&gt;Beavis and Butthead&lt;/em&gt; of software development.  I made &lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt; listen to it on the way home in the car, and he hated it!  I love it!  It&apos;s definitely one of my top podcasts (netcasts?) of the week.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Couchville
            </title>
            <link>
                https://www.hjsoft.com/blog/Couchville.html
            </link>
            <pubDate>Tue, 6 Mar 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Couchville.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.couchville.com/&quot;&gt;Couchville&lt;/a&gt; offers a simple interactive interface to television listings.  
The Comcast interactive guide on the cable box is reasonable (and integrated with the DVR), but this website could be much easier to navigate.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Closing Off the Java Phone
            </title>
            <link>
                https://www.hjsoft.com/blog/Closing_Off_the_Java_Phone.html
            </link>
            <pubDate>Wed, 28 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Closing_Off_the_Java_Phone.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m really hoping this is being blown out of proportion, but I fear it&apos;s not.  Every person interested in Java ME development has been linking to this article about &lt;a href = &quot;http://www.gearlog.com/2007/01/tmobile_disses_opera_says_get.php&quot;&gt;T-Mobile cutting off 3rd-party Java applications&lt;/a&gt;.  Looking at the &lt;a href = &quot;https://developer.cingular.com/developer/technologies/java/signing.jhtml?_requestid=5414&quot;&gt;security profiles&lt;/a&gt; at Cingular&apos;s devCentral (sorry, it requires a login), you can see that Cingular is slowly testing the waters of doing the same stupid things.&lt;/p&gt;
&lt;p&gt;I&apos;ve been concerned for a little while about Cingular&apos;s lock down, but I&apos;ve not been able to turn up any horror stories about the particular Sony Ericsson phones I want to obtain next, so I&apos;m a bit relieved.  I fear that this may be my last time around with halfway useful phones if things don&apos;t change.  T-Mobile&apos;s move will undoubtedly make it easier for Cingular to fall over as well.  It&apos;s bizarre that they&apos;re doing this to themselves -- it feels like the whole struggle between the RIAA, artists, and consumers, but there&apos;s no troop of industry lawyers forcing this breach in consumer rights.&lt;/p&gt;
&lt;p&gt;So how do we get the carriers&apos; attention?  Canceling service is expensive.  Maybe some T-Mobile customers can use this change in service to get out of contracts, but where do they go?  Neither T-Mobile and Verizon are suitable for developers or power users now.  Cingular&apos;s looking shaky.  Do we all run to Sprint?  (I need to know these things, since I&apos;m about to &lt;span style = &quot;text-decoration: line-through;&quot;&gt;sell my soul&lt;/span&gt; enter into a new contract for 2 more years with Cingular.)&lt;/p&gt;
&lt;p&gt;I suppose each of us can go into a store, browse the phones, ask the questions about 3rd-party apps, and walk out letting them know that this lost them a sale.  Better: eye up those really expensive smart phones and high-end feature phones and let them know they&apos;ve lost &lt;em&gt;that&lt;/em&gt; sale.  With any luck, the disappointed sales representatives will start asking their bosses (and their bosses) why we&apos;re complaining.  Best: &lt;em&gt;Buy&lt;/em&gt; the high-end phone, call them up for support to talk to them about your desire to run 3rd-party applications.  When they start spewing garbage at you about maintaining security and protecting the network and the consumer, return the damn thing as defective or inadequate for your requirements (within the trial period).&lt;/p&gt;
&lt;p&gt;Of course, as informed consumers and developers who want to do more than &lt;em&gt;just make phone calls&lt;/em&gt;, we&apos;re a minority.  Even if we can manage to search and find a suitable carrier and device, we need to find a way to educate the general population about what their phones &lt;em&gt;could&lt;/em&gt; be doing for them and get them doing it &lt;em&gt;before&lt;/em&gt; the carrier stupidly kills off this largely emerging market.  These people are potentially our customers too, but only if we can keep their networks propped open!  The door may slam before the user even has a chance to realize the potential of their device.&lt;/p&gt;
&lt;p&gt;The window in which we can reach and influence a user is so narrow, though.  Subscribers generally only get to choose devices and carriers every couple years, then we&apos;re stuck for another couple years.  Otherwise, we can entice people with technology, anger them when our applications don&apos;t work, then they&apos;ll mostly accept  it (or blame us developers), and go back to their ways of just using the phone for voice calls.&lt;/p&gt;
&lt;p&gt;Phone technology is ripe for new useful applications, but our access to this ubiquitous platform is being choked by the carriers.  How are &lt;em&gt;you&lt;/em&gt; going to make some noise?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (4:04pm):&lt;/strong&gt; &lt;a href = &quot;http://digg.com/software/T_Mobile_Disses_Opera_Says_Get_Less&quot;&gt;Make some noise&lt;/a&gt; at Digg!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (28 February 2007):&lt;/strong&gt; I was explaining this all to Claire, and she&apos;s convinced me that Google will come to the rescue on this.  She figures that they&apos;re just lining up to do a Google Phone or something.  At the very least, they&apos;re providing the killer applications that people are going to want when they realize they want these things.  It&apos;s a good sign to see a company as large as Google refusing to pander to the carriers&apos; fabricated requirements to sign your applications.  Instead, they&apos;re pushing the responsibility back on the carriers to make the application work for their customers.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Struts 2 Is Gold!
            </title>
            <link>
                https://www.hjsoft.com/blog/Struts_2_Is_Gold.html
            </link>
            <pubDate>Tue, 27 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Struts_2_Is_Gold.html
            </guid>
            <description>
                &lt;p&gt;A while back, I had &lt;a href = &quot;http://www.hjsoft.com/blog/link/Abandon_Struts_for_Something_Anything_Else&quot;&gt;strayed from a very fragmented Struts framework&lt;/a&gt; to explore &lt;a href = &quot;http://www.hjsoft.com/blog/link/Starting_with_WebWork&quot;&gt;WebWork &lt;/a&gt; instead.  At that point, I wasn&apos;t all that sure anything useful would emerge from the mess of Struts chaining (1.3), actions (2.0), and Shale.  Once I had started with WebWork, I didn&apos;t care what happened to Struts, but today I got news that &lt;a href = &quot;http://struts.apache.org/2.0.6/&quot;&gt;Struts 2.0.6&lt;/a&gt; has finally been released for general availability, and I&apos;m really glad.  Nearly a year of happily using WebWork makes the new Struts 2 look incredibly familiar and comfortable.  I look forward to porting some applications to the new Struts, since this is where future development of the WebWork-style framework will proceed.&lt;/p&gt;
&lt;p&gt;Way back when, I had experimented with integrating commons-chain with Struts 1.2 in preparation for Struts 1.3, but I never did get around to actually using 1.3.  WebWork was much more compelling.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Northern Virginia Software Symposium
            </title>
            <link>
                https://www.hjsoft.com/blog/Northern_Virginia_Software_Symposium.html
            </link>
            <pubDate>Mon, 26 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Northern_Virginia_Software_Symposium.html
            </guid>
            <description>
                &lt;p&gt;My employer has agreed to send me to the &lt;a href = &quot;http://www.nofluffjuststuff.com/show_agenda.jsp?showId=76&amp;amp;byRoom=false&quot;&gt;Northern Virginia Software Symposium&lt;/a&gt; of the No Fluff Just Stuff series.  There are lots of great topics and speakers, so I&apos;m quite excited.  I&apos;ve already mapped out all the sessions I want to hit, and there were quite a few tough choices.  I&apos;ll be bouncing around talks on Enterprise Java, Agile, Testing, and Spring talks.  I expect to be completely overwhelmed for 2 and a half days.  It should be great!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Geek Meeting Week
            </title>
            <link>
                https://www.hjsoft.com/blog/Geek_Meeting_Week.html
            </link>
            <pubDate>Thu, 22 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Geek_Meeting_Week.html
            </guid>
            <description>
                &lt;p&gt;This is &lt;em&gt;Geek Meeting Week&lt;/em&gt; for me.  The &lt;a href = &quot;http://www.harrisburgjug.org/&quot;&gt;Harrisburg JUG&lt;/a&gt; (with Bill Kratzer&apos;s excellent presentation on &lt;a href = &quot;http://www.harrisburgjug.org/display/JUG/2007-02-20+Game+Development+in+Java&quot;&gt;Game Programming in Java&lt;/a&gt;).meeting got pushed from last Thursday up to this Tuesday, and the first monthly &lt;a href = &quot;http://agileharrisburg.pbwiki.com/&quot;&gt;Agile Harrisburg&lt;/a&gt; kicks off tonight.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mobile Banking
            </title>
            <link>
                https://www.hjsoft.com/blog/Mobile_Banking.html
            </link>
            <pubDate>Wed, 21 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mobile_Banking.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently read that &lt;a href = &quot;http://www.textually.org/textually/archives/2007/02/014999.htm&quot;&gt;Bank of America will be offering mobile banking&lt;/a&gt; soon.  I&apos;ve had WAP access to my banking for years from &lt;a href = &quot;http://www.psecu.com/account_access/pocket_teller/&quot;&gt;PSECU&lt;/a&gt;.   It&apos;s great to see someone doing something so innovative so early.&lt;/p&gt; 
&lt;p&gt;Now I guess I may get access to my credit cards soon.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eclipse 3.2.2
            </title>
            <link>
                https://www.hjsoft.com/blog/Eclipse_322.html
            </link>
            <pubDate>Tue, 20 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Eclipse_322.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.eclipse.org/eclipse/development/readme_eclipse_3.2.2.html&quot;&gt;Eclipse 3.2.2&lt;/a&gt; came out, and so far, I&apos;ve observed that it&apos;s stopped prompting me to install the same update every day.  That&apos;s great.&lt;/p&gt;
&lt;p&gt;Now I&apos;m hoping that I&apos;ll see if it fix the issue with some tab bars disappearing on my Windows XP workstation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (3:30pm):&lt;/strong&gt; The tab bar still disappears. ;(&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Choosing a New Java Phone
            </title>
            <link>
                https://www.hjsoft.com/blog/Choosing_a_New_Java_Phone.html
            </link>
            <pubDate>Sun, 18 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Choosing_a_New_Java_Phone.html
            </guid>
            <description>
                &lt;p&gt;I may soon be in a position to buy a new phone.  Assuming I stick with Cingular, what&apos;s the best phone for a Java ME developer?&lt;/p&gt;
&lt;p&gt;I see phones listed with lots of nice APIs (JSR feature sets), but then I see it&apos;s all supposedly disabled by Cingular&apos;s security profiles.  Are all the current phones locked down uniformly, or do I have options?&lt;/p&gt;
&lt;p&gt;My old T616 lacked the socket protocol, but SMS and HTTP worked.  My current S710a has socket protocol, but it&apos;s blocked from usage, as is SMS, so I lost Java&apos;s access to SMS in the deal.  I fear my next phone will not allow session HTTP access, and make applications like Google Maps unusable.&lt;/p&gt;
&lt;p&gt;I&apos;m terrified to shell out money for a device and have it not be useful.  I fully intend to use my trial period to figure out what works -- I may not even leave the store until I see some of these things work!&lt;/p&gt;
&lt;p&gt;Cingular seems to like to tell you to just spend the &quot;nominal&quot; fees and get a certificate to sign your application, or have your marketing department contact them to build a relationship and get it signed by Cingular.  I had also seen recommendation that an unsigned app should only be used for development and testing, but I doubt that&apos;s even possible, since an app won&apos;t function enough to even test it.&lt;/p&gt;
&lt;p&gt;Do any of the phones allow installation of your own developer certificate?  I know I couldn&apos;t on my Sony Ericssons.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cingular Settings Are Moving Targets
            </title>
            <link>
                https://www.hjsoft.com/blog/Cingular_Settings_Are_Moving_Targets.html
            </link>
            <pubDate>Tue, 6 Feb 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cingular_Settings_Are_Moving_Targets.html
            </guid>
            <description>
                &lt;p&gt;A month or 2, &lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&apos;s&lt;/a&gt; Cingular phone stopped getting proper DNS settings, so his Java applications which used hostnames to make HTTP connections just broke mysteriously.  We poked a hard-coded DNS server in there, and all was well again.&lt;/p&gt;
&lt;p&gt;Yesterday, I noted that my &lt;a href = &quot;http://www.groovr.com/user/jflinchbaugh/&quot;&gt;Groovr&lt;/a&gt; emails silently stopped getting delivered.  Further testing today showed that &lt;em&gt;no&lt;/em&gt; outgoing email was working, so I went through the normal dance of digging up the configurations from the &lt;a href = &quot;http://www.cingular.com/support/content.do&quot;&gt;Cingular Support&lt;/a&gt; site.  I found it now recommends setting the outgoing server to &lt;code&gt;cwmx.com&lt;/code&gt;, and not &lt;code&gt;cwmx.net&lt;/code&gt;.  I experienced these same kinds of shifts with the SMS-to-email gateways a while ago.&lt;/p&gt;
&lt;p&gt;I&apos;m glad that I&apos;ve learned where to find these answers and don&apos;t need to call up tech support every few months when they change things on me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (2007-02-06):&lt;/strong&gt; &lt;code&gt;cwmx.com&lt;/code&gt; has been broken all morning now.  The phone just said &quot;Email failed.&quot; -- it doesn&apos;t really give much clue.  I just tested again, though, and the message finally went through.  I wish there was somewhere to track these known outages.  I really don&apos;t feel like contacting a help desk that probably has no idea either.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                EJB 3 for the Blog Code
            </title>
            <link>
                https://www.hjsoft.com/blog/EJB_3_for_the_Blog_Code.html
            </link>
            <pubDate>Tue, 30 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/EJB_3_for_the_Blog_Code.html
            </guid>
            <description>
                &lt;p&gt;I really &lt;a href = &quot;http://www.hjsoft.com/blog/link/New_Blog_Code_Want_EJB3&quot;&gt;wanted EJB 3 for this weblog code&lt;/a&gt;, so I&apos;ve finally started it.&lt;/p&gt;

&lt;p&gt;First, I wanted to rebuild the blacklist system to be more configurable and support regular expressions.  Instead of fighting with the old EJB 2.1 entities for the blacklist, I defined new EJB 3 entity and stateless session bean in a new EJB jar.&lt;/p&gt;
&lt;p&gt;I built a client jar for my new EJB 3 code without the concrete session bean implementation code and without the &lt;code&gt;persistence.xml&lt;/code&gt;. Excluding the &lt;code&gt;persistence.xml&lt;/code&gt; was important, because the JBoss server tries to pick it up and deploy the entities again as part of the client (the old EJB 2.1 jar).  Each of my old packages got a copy of the client jar to allow them to use the new modules, since I have JBoss configured to isolate all the deployment units from each other.&lt;/p&gt;
&lt;p&gt;Next, I may move the dynamic link tree (on the left of this page) to be EJB 3, or maybe I&apos;ll look at moving referrers to EJB 3.  EJB 3 is so much nicer now -- I never want to look back.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Groovr
            </title>
            <link>
                https://www.hjsoft.com/blog/Groovr.html
            </link>
            <pubDate>Wed, 24 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Groovr.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been hearing about these little micro-blog/location applications for a while, so when I heard about them yet again on &lt;a href = &quot;http://www.twit.tv/natn11&quot;&gt;net@nite&lt;/a&gt;, I figured I should take a look.  They specifically mentioned &lt;a href = &quot;http://www.twitter.com/&quot;&gt;Twitter&lt;/a&gt; and &lt;a href = &quot;http://www.groovr.com/&quot;&gt;Groovr&lt;/a&gt;.  Groovr&apos;s ability to take photos and location intrigued me, so I created  &lt;a href = &quot;http://www.groovr.com/user/jflinchbaugh/&quot;&gt;my own account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;ve been interested in building this sort of thing for my own use, so maybe I&apos;ll find this useful.  I must say that I was pleased to see Groovr happily accepted my mobile email address instead of insisting upon sending me SMS messages directly.  This allows me to interact with it using my flat-rate data plan, instead of chewing through my SMS and MMS plan.  At a glance, it seems that the service may only be a month or 2 old, so I expect they&apos;ll add lots more interesting features.  It may also be that the new website is only a couple months old too.  I&apos;m not sure.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Installed Trac
            </title>
            <link>
                https://www.hjsoft.com/blog/Installed_Trac.html
            </link>
            <pubDate>Tue, 23 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Installed_Trac.html
            </guid>
            <description>
                &lt;p&gt;The new edition of &lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=10203&quot;&gt;Practical Subversion&lt;/a&gt; mentioned &lt;a href = &quot;http://trac.edgewall.org/&quot;&gt;Trac&lt;/a&gt; as a simple issue tracking software that integrated nicely with &lt;a href = &quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;.  Fortunately, Debian has it already packaged up, so I installed it, read a little, and setup a few Trac repositories to match my Subversion projects.&lt;/p&gt;
&lt;p&gt;I just used the default &lt;a href = &quot;http://www.sqlite.org/&quot;&gt;SQLite&lt;/a&gt; support, and I was on my way pretty quickly.  It gives me a wiki, issue tracker, and time-line, and source viewer -- all of which interlinked for easy navigation.  Now that it&apos;s working, I may go to the trouble to convert the DB over to my preexisting PostgreSQL install.&lt;/p&gt;
&lt;p&gt;After having read &lt;a href = &quot;http://www.hjsoft.com/blog/link/Practices_of_an_Agile_Developer&quot;&gt;Practices of an Agile Developer&lt;/a&gt;, I started to realize that I could use a few extra tools to help me organize my personal projects and keep on track.  Wikis have also seemed like an intriguing technology, but I always have doubts about my own ability to keep it in order and be able to find things when I need them.  It must be better than the knowledge just floating around in my head only though.  (That feels like a real problem at work.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java ME Application Links
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_ME_Application_Links.html
            </link>
            <pubDate>Tue, 23 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_ME_Application_Links.html
            </guid>
            <description>
                &lt;p&gt;I presented a quick little (Espresso) talk on Java ME applications at the &lt;a href = &quot;http://www.harrisburgjug.org/&quot;&gt;Harrisburg JUG&lt;/a&gt; meeting on Thursday.  My large collection of links for the talk are included on the &lt;a href = &quot;http://www.harrisburgjug.org/display/JUG/2007-01-18+Introduction+to+the+Spring+Framework&quot;&gt;meeting notes&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JavaPolis JPA Talks
            </title>
            <link>
                https://www.hjsoft.com/blog/JavaPolis_JPA_Talks.html
            </link>
            <pubDate>Mon, 22 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JavaPolis_JPA_Talks.html
            </guid>
            <description>
                &lt;p&gt;I had previously noted that I&apos;d definitely be revisiting &lt;a href = &quot;http://www.hjsoft.com/blog/link/Neal_Gafter_on_Closures&quot;&gt;Neal Gafter&apos;s talk on closures&lt;/a&gt; for a second listen.  Right along side that podcast in my player were 2 others on the Java Persistence API: &lt;a href = &quot;http://www.bejug.org/confluenceBeJUG/display/PARLEYS/Using+the+Java+Persistence+API&quot;&gt;Using JPA (Part 1)&lt;/a&gt; and &lt;a href = &quot;http://www.bejug.org/confluenceBeJUG/display/PARLEYS/Enterprise++Development+with+JPA&quot;&gt;Enterprise Development with JPA (Part 2)&lt;/a&gt; featuring 2 spec leads from Oracle and BEA.  These 2 talks are awesome primers to what JPA can do, and I look forward to looking for further information and applying it.&lt;/p&gt;
&lt;p&gt;I&apos;ll hopefully be headed to a &lt;a href = &quot;http://www.nofluffjuststuff.com/&quot;&gt;No Fluff Just Stuff Conference&lt;/a&gt; this Spring.  I&apos;ll be lucky if the conference is half as informative as these JavaPolis presentations.  I expect NFJS will not disappoint.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Moving to Lancaster
            </title>
            <link>
                https://www.hjsoft.com/blog/Moving_to_Lancaster.html
            </link>
            <pubDate>Thu, 18 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Moving_to_Lancaster.html
            </guid>
            <description>
                &lt;p&gt;Looking back, it seems that I started moving to Lancaster back in 1992.  Before MP3, streaming audio, or even internet access, I used to scour the low end of the FM radio dial for something worth my listening.  I primarily found &lt;a href = &quot;http://www.wixq.com/&quot;&gt;WIXQ&lt;/a&gt; 91.7 from &lt;a href = &quot;http://www.millersville.edu/&quot;&gt;Millersville University&lt;/a&gt;, but I expect I also found WFNM 89.1 of &lt;a href = &quot;http://www.fandm.edu/index.xml&quot;&gt;Franklin and Marshall College&lt;/a&gt;.  York supposedly had a college station as well, but its transmitter was apparently poorly placed for it to reach my house to the East.&lt;/p&gt;
&lt;p&gt;If I strung antenna wires from corner to corner of my bedroom or up the side of the house, I could get a mostly clear signal from WIXQ, and I had a much wider conduit of all that great &lt;em&gt;alternative&lt;/em&gt; music of the time.  From a powerful 30 second clip of sound, I discovered the &lt;a href = &quot;http://www.last.fm/music/The+Jesus+and+Mary+Chain&quot;&gt;Jesus and Mary Chain&lt;/a&gt;, and I moved on to watching MTV&apos;s &lt;a href = &quot;http://www.altmusictv.com/120/archive.html&quot;&gt;120 Minutes&lt;/a&gt;, etc.&lt;/p&gt;
&lt;p&gt;In 1994, when it came time to look around for colleges, Millersville was obviously familiar, so I visited and found an excellent computer science program with intriguing resources, so I was sold.  Millersville was the only place I applied.&lt;/p&gt;
&lt;p&gt;I was fortunately accepted, commuted furiously from York to Millersville for nearly 5 years. I spent more time on campus (in the computer labs) over time, until I was nearly living there, and only returning home for showers and a few more hours of sleep.&lt;/p&gt;
&lt;p&gt;Lancaster has always felt more metropolitan to me  -- there was just more culture there.  The clubs, education, people, shopping, and the downtown city drew me in.  Great independent restaurants remain to be a huge attraction to this area.&lt;/p&gt;
&lt;p&gt;In the end, I officially moved into Claire&apos;s apartment around graduation in 2000, and now I own a house and rear a family near Millersville.  It&apos;s been a long road.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(The inspiration for writing this isn&apos;t as random as one may think: I&apos;ve recently rediscovered that all the college stations in my area are again worth tuning.  This time, WFNM has been keeping my attention, and &lt;a href = &quot;http://www.xpn.org/&quot;&gt;WXPN&lt;/a&gt; has a transmitter in Harrisburg as well.)&lt;/em&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Neal Gafter on Closures
            </title>
            <link>
                https://www.hjsoft.com/blog/Neal_Gafter_on_Closures.html
            </link>
            <pubDate>Thu, 11 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Neal_Gafter_on_Closures.html
            </guid>
            <description>
                &lt;p&gt;I stumbled upon a podcast of &lt;a href = &quot;http://www.bejug.org/confluenceBeJUG/display/PARLEYS/Closures+for+Java&quot;&gt;Neal Gafter&apos;s talk on Closures at JavaPolis 2006&lt;/a&gt;.  I&apos;ve never used closures, so I barely grasp what they do.  I&apos;ve only been listening to the audio, and I just now discovered the slides, so I&apos;ll probably need to go back and listen to it with the slides running. (That is such a cool feature of that website!)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JBoss 4.0.5 and Java 6
            </title>
            <link>
                https://www.hjsoft.com/blog/JBoss_405_and_Java_6.html
            </link>
            <pubDate>Wed, 10 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JBoss_405_and_Java_6.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve had Java 6 running on my notebook since a couple days after its release.  For some reason, the Debian people are being a bit slow at getting Java 6 packaged, and they seem to not want to bother updating &lt;code&gt;java-package&lt;/code&gt; in the meantime.  Fortunately, I could hack up &lt;code&gt;java-package&lt;/code&gt; myself to make it work, and I very recently found a cleaner &lt;a href = &quot;http://www.mail-archive.com/pkg-java-maintainers@lists.alioth.debian.org/msg04406.html&quot;&gt;patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Trying to upgrade to JBoss 4.0.5 had been giving me &lt;a href = &quot;http://www.hjsoft.com/blog/link/More_Classloading_Issues_with_JBoss_405&quot;&gt;fits&lt;/a&gt; previously as well, but the GA release of the JBoss &lt;a href = &quot;http://labs.jboss.com/portal/jbossas/download&quot;&gt;JEMS Installer 1.2.0&lt;/a&gt; actually gets the thing configured properly for me to make it work. &lt;/p&gt;
&lt;p&gt;I told the installer to do a &lt;em&gt;Standard&lt;/em&gt; install instead of Advanced, then just flipped the 3 bits mentioned in the release notes (and lots of other places) to isolate applications from each other and avoid ClassCastExceptions.  Previous versions of the installer just didn&apos;t quite line things up correctly, and I started to think it was a bug in the application server code.&lt;/p&gt;
&lt;p&gt;Once I got this all working on my notebook, I pushed it up to the server successfully.  I hadn&apos;t initially planned to jump to Java 6 on the server yet, but I ran into class verification errors when I tried deploying my application (compiled on Java 6) into the server running Java 5.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Learn MySQL?
            </title>
            <link>
                https://www.hjsoft.com/blog/Learn_MySQL.html
            </link>
            <pubDate>Fri, 5 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Learn_MySQL.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve used PostgreSQL for years for my personal projects, and I usually find a PostgreSQL driver for most other DB-backed systems.&lt;/p&gt;
&lt;p&gt;There are a few, though, that seem to only have drivers for MySQL -- MythTV and Bugzilla are two examples.  I also occasionally have someone want to host a MySQL application on my servers.&lt;/p&gt;
&lt;p&gt;To date, my experience has been that MySQL is a memory hog, I can barely find my way around when I try to just jump into using it, and I have no idea how to backup and restore the thing.  It just doesn&apos;t feel safe for me to administer yet.&lt;/p&gt;
&lt;p&gt;I&apos;d really like to look at Bugzilla, and I really will care about that data, so I guess I must bite the bullet and learn to get around MySQL.  The funny thing is that I don&apos;t actually ever write any applications to directly use PostgreSQL anymore -- all my applications are Java talking to PostgreSQL  through EJB 2.1 or EJB 3 persistence APIs, so I could mostly just swap out PostgreSQL in favor of MySQL and really not care.  I just really prefer that PostgreSQL came from a more academic and feature-driven development model over the years.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java ME Resources
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_ME_Resources.html
            </link>
            <pubDate>Fri, 5 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_ME_Resources.html
            </guid>
            <description>
                &lt;p&gt;An old friend submitted a &lt;a href = &quot;http://www.hjsoft.com/blog/link/SonyEricsson_S710a&quot;&gt;comment&lt;/a&gt; inquiring about how to get started in Java ME, so here&apos;s my list of pointers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tool up: &lt;a href = &quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt;, &lt;a href = &quot;http://eclipseme.org/&quot;&gt;EclipseME&lt;/a&gt;, and Sun&apos;s &lt;a href = &quot;http://java.sun.com/products/sjwtoolkit/&quot;&gt;Wireless Toolkit&lt;/a&gt; (I still use WTK 2.2).&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=426&quot;&gt;Beginning J2ME: From Novice to Professional&lt;/a&gt; is a &lt;a href = &quot;http://www.hjsoft.com/blog/link/Book_Beginning_J2ME&quot;&gt;very thorough book&lt;/a&gt;, and I recommend it.&lt;/li&gt;
&lt;li&gt;When I need to start making my apps look better, I&apos;ll probably look at &lt;a href = &quot;http://www.j2mepolish.org/&quot;&gt;J2ME Polish&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I watch &lt;a href = &quot;http://www.getjar.com/&quot;&gt;GetJar&lt;/a&gt; to keep up with the other apps and games.&lt;/li&gt;
&lt;li&gt;I heard discussed in some podcast that the &lt;a href = &quot;http://developer.sprint.com/&quot;&gt;Sprint Developer Program&lt;/a&gt; is pretty open with access to lots of the Java APIs (sometimes using developer root certificates).&lt;/li&gt;
&lt;li&gt;Cingular&apos;s and SonyEricsson&apos;s security models for their phones can be &lt;a href = &quot;http://www.hjsoft.com/blog/link/S710a__Unsigned_Java_Midlets__Frustration&quot;&gt;infuriating&lt;/a&gt;, so you definitely want to search around and maybe even personally test what an application can do on a phone you&apos;re thinking of purchasing.&lt;/li&gt;
&lt;li&gt;I still intend to stick with Cingular, though, so I&apos;ll say that the phones that currently interest me are the &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=893&quot;&gt;SonyEricsson W810&lt;/a&gt; or maybe the &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=890&quot;&gt;Samsung D807&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I collect other links on delicious tagged: &lt;a href = &quot;http://del.icio.us/jflinchbaugh/JavaME&quot;&gt;JavaME&lt;/a&gt; and &lt;a href = &quot;http://del.icio.us/jflinchbaugh/Java+Mobile&quot;&gt;Java+Mobile&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Lastly, you&apos;ll find anything else I have to say on this subject under the Java or Mobile categories on this weblog.&lt;/li&gt;
&lt;/ul&gt;

            </description>
            
        </item>
        <item>
            <title>
                Firefox Doesn&apos;t Like Full Disks
            </title>
            <link>
                https://www.hjsoft.com/blog/Firefox_Doesnt_Like_Full_Disks.html
            </link>
            <pubDate>Fri, 5 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Firefox_Doesnt_Like_Full_Disks.html
            </guid>
            <description>
                &lt;p&gt;Firefox (Debian Iceweasel) has been getting very angry with me recently on my amd64 box.  Occassionally a restart of the browser would clear it, but when it didn&apos;t, I fired up &lt;code&gt;strace&lt;/code&gt;, and finally saw the reason -- strace showed the errors that Firefox was experiencing while trying to write the cookies database to disk.  Once I cleared some disk, it&apos;s working great.  It&apos;s too bad it couldn&apos;t have shown me that error itself.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Subversion Administration
            </title>
            <link>
                https://www.hjsoft.com/blog/Subversion_Administration.html
            </link>
            <pubDate>Thu, 4 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Subversion_Administration.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve started reading &lt;a href = &quot;http://apress.com/book/bookDisplay.html?bID=10203&quot;&gt;Practical Subversion, Second Edition&lt;/a&gt; which &lt;a href = &quot;http://www.apress.com/&quot;&gt;Apress&lt;/a&gt; kindly sent to me.  It&apos;s inspired me to poke around with the &lt;code&gt;svnadmin&lt;/code&gt; command to migrate some of my old repositories on my notebook to the new formats (fsfs) on my normal source code server.&lt;/p&gt;
&lt;p&gt;The dump, load, and &lt;code&gt;switch --relocate&lt;/code&gt; of my working copy were dead simple.  I look forward to reminding myself of some of the more powerful Subversion features, as well as learn about the enhancements since I&apos;ve first started using it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ThinkPad R40 Frustration
            </title>
            <link>
                https://www.hjsoft.com/blog/ThinkPad_R40_Frustration.html
            </link>
            <pubDate>Thu, 4 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ThinkPad_R40_Frustration.html
            </guid>
            <description>
                &lt;p&gt;My R40 has had a problem with occasional freezes after resume from any sleep or swsusp for the entire time I&apos;ve had it.  The worst part is that it&apos;ll go days without any trouble, then start doing it again with no discernible reason, except that it had been suspended 2-10 minutes previously.  It, of course, provides no stack traces or SysRq responses.  It does seem that the more inconvenient a freeze would be, the more likely it&apos;ll happen. (Murphy&apos;s Law?)&lt;/p&gt;
&lt;p&gt;Someone once suggested that it may be ACPI related, so I&apos;ve eagerly watched for news in this area with every kernel patch that is released.  I&apos;ve also tried flipping all the little switches around ACPI.&lt;/p&gt;
&lt;p&gt;Today, the frustration grew enough for me to switch from ACPI to APM to see how it fares.   So far, it suspends fine, but every couple resumes, it likes to corrupt the screen.  Another suspend/resume cycle fixes it.  I&apos;ve not played with swsusp yet in this new configuration.&lt;/p&gt;
&lt;p&gt;I&apos;ve always felt that I&apos;d be missing something without ACPI: handy events, configuration, scripting, etc, but now I intend to really test that assumption.  The suspend button works, and the battery monitor displays, so I&apos;ll see what else I need.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (10:00am):&lt;/strong&gt; The screen corruption thing sucks.  It can be pretty persistent, requiring several suspend cycles to get it to fix itself, but it at least continued to respond.  I get the feeling the corruption could have been caused by the quick cycling itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (4 January 2006):&lt;/strong&gt; Along with screen corruption, I managed to lock the computer completely when it tried to restore the X screen.&lt;/p&gt;
&lt;p&gt;To avoid all this trouble with the APM suspend, I tried the stock software suspend from the kernel.  This worked for a couple days, but then last night, it froze again, shortly after the resume, and it left a tiny bit of the screen corrupted -- just like it does when running ACPI.  ACPI&apos;s event model is much nicer, so I&apos;ve reverted back to using ACPI, since it&apos;s just going to do the same thing.&lt;/p&gt;
&lt;p&gt;I really wish I could figure out what causes the machine to freeze.  Since it happens only after a suspend or software suspend, and a software suspend effectively a cold reboot, I can&apos;t see that it&apos;s a hardware problem.  It must be an inconsistency in the restoration of the kernel.  I&apos;m hopeful that all the lock debugging work will unearth the issue, but ultimately, I have no idea how to begin to fix it.  On th other hand, I have trouble finding much evidence of other people seeing this problem.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Practices of an Agile Developer
            </title>
            <link>
                https://www.hjsoft.com/blog/Practices_of_an_Agile_Developer.html
            </link>
            <pubDate>Tue, 2 Jan 2007 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Practices_of_an_Agile_Developer.html
            </guid>
            <description>
                &lt;p&gt;I received a copy of Subramaniam&apos;s and Hunt&apos;s &lt;a href = &quot;http://www.pragmaticprogrammer.com/titles/pad/&quot;&gt;Practices of an Agile Developer&lt;/a&gt; for Christmas last Tuesday, and I blazed through reading it in 6 days.  It&apos;s relatively light reading (hence my unprecedented speed reading it), and it&apos;s filled me with inspiration to be a better programmer.  It&apos;s a renewal that I&apos;ve been greatly needing through the past couple months.&lt;/p&gt;
&lt;p&gt;I had originally heard an interview with &lt;a href = &quot;http://www.nofluffjuststuff.com/speaker_topic_view.jsp?topicId=286&quot;&gt;Venkat Subramaniam&lt;/a&gt; (&lt;a href = &quot;http://www.nofluffjuststuff.com/s/podcast/x/NFJS06_VenkatSubramamiam.mp3&quot;&gt;listen&lt;/a&gt;) in the &lt;a href = &quot;http://www.nofluffjuststuff.com/podcasts.jsp&quot;&gt;No Fluff Just Stuff podcast series&lt;/a&gt;.  It was a notably good listen.&lt;/p&gt;
&lt;p&gt;The book consists of 45 practices and discussions of each.  While Agile can often be a management topic, most of this is presented in ways that it can be implemented by the developer from the bottom up -- Do it yourself, demonstrate the benefits, and others will follow.&lt;/p&gt;
&lt;p&gt;The tone of the book is conversational and contains lots of anecdotes which sometimes feel like amusing stories from &lt;a href = &quot;http://www.thedailywtf.org&quot;&gt;TheDailyWTF&lt;/a&gt;, but with a very positive spin.  Some simple and valuable lesson that I&apos;ve taken to heart include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User confusion or other troubles are opportunities to improve your software.&lt;/li&gt;
&lt;li&gt;Work to find solutions, and don&apos;t bother looking for someone to blame.&lt;/li&gt;
&lt;li&gt;Use TDD to help guide simpler, cleaner design.&lt;/li&gt;
&lt;li&gt;Communicate effectively with your peers, management, and users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many of the other tips pertain to writing clear and concise code, refactoring, and remaining flexible -- many practices which we&apos;ve already embraced.  With a bit of renewed motivation, I&apos;ll be trying to keep these practices in mind at work and in personal projects, and I&apos;ll be lending the book  to the avid readers of my team.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                60 Feeds
            </title>
            <link>
                https://www.hjsoft.com/blog/60_Feeds.html
            </link>
            <pubDate>Wed, 20 Dec 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/60_Feeds.html
            </guid>
            <description>
                &lt;p&gt;I have about 60 feeds in my RSS reader now, so it seems I like RSS reading.  I also rip through all the news pretty quickly.&lt;/p&gt;
&lt;p&gt;I&apos;ll have to figure out a way to represent all my feeds here on the weblog, otherwise, you&apos;ll never know what I&apos;m reading anymore.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Assembly Java is Absurd
            </title>
            <link>
                https://www.hjsoft.com/blog/Assembly_Java_is_Absurd.html
            </link>
            <pubDate>Wed, 6 Dec 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Assembly_Java_is_Absurd.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been knee-deep in my studies of object oriented design patterns, refactoring, Java EE, and Java ME.  Today I finally took a moment to read over this article about &lt;a href = &quot;http://blog.javia.org/?p=31&quot;&gt;Assembly Java&lt;/a&gt; purporting that I throw it all away in favor of complex, but small, unmaintainable blobs of code.&lt;/p&gt;
&lt;p&gt;Just like assembly language may have been great for pulling reasonable performance out of the old Intel 8088 processors, I&apos;m sure these tips were great for the tiny MIDP 1.0 devices from 2001.  Today&apos;s devices are just getting bigger and more powerful, so there&apos;s no way I&apos;m giving up the maintainability of my code to write everything like this.  A few of these tips could be applicable within isolated subsystems which can exist as black boxes, but I&apos;d never be able to work like this from start to finish.  It&apos;s just premature optimization.&lt;/p&gt;

&lt;p&gt;We don&apos;t actually truncate all our symbol names down to single letters to save space, or think too extensively about dropping those stray extra classes from libraries we use -- that&apos;s the job of the class obfuscater.  I only expect to see these Assembly Java tips really implemented as some aggressive switches to an obfuscater or some similar tool.
To do this stuff across your entire code base would just cripple your ability to grow and adapt your software.  I can&apos;t see it being worth the pain.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                RimuHosting&apos;s New VPS Plans
            </title>
            <link>
                https://www.hjsoft.com/blog/RimuHostings_New_VPS_Plans.html
            </link>
            <pubDate>Tue, 28 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/RimuHostings_New_VPS_Plans.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.rimuhosting.com/&quot;&gt;RimuHosting&lt;/a&gt; recently realigned their middle to high-end &lt;a href = &quot;http://rimuhosting.com/order/startorder1.jsp?type=18&quot;&gt;VPS plans&lt;/a&gt; in their Dallas data center to give more memory for a cheaper price, so I submitted a ticket to switch to a MiroVPS 3 with 224M of RAM and doubled the disk.  I&apos;m even saving $6 in the end.&lt;/p&gt;
&lt;p&gt;The extra RAM is great for JBoss.&lt;/p&gt;
&lt;p&gt;To alleviate an &lt;em&gt;OutOfMemoryError: heap space&lt;/em&gt; error I had occasionally seen, my current JBoss settings are:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;-server -Xms50m -Xmx50m -XX:ThreadStackSize=96 -Xss96k -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -XX:-TraceClassUnloading&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

            </description>
            
        </item>
        <item>
            <title>
                Odd Trademark Issues Arising
            </title>
            <link>
                https://www.hjsoft.com/blog/Odd_Trademark_Issues_Arising.html
            </link>
            <pubDate>Wed, 22 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Odd_Trademark_Issues_Arising.html
            </guid>
            <description>
                &lt;p&gt;Sun&apos;s announced that they&apos;ll be releasing Java under GPLv2, but they&apos;ll be holding control of their Java trademark.  There&apos;s been odd noises from RedHat and JBoss about having to remove the &quot;JBoss&quot; trademark from the code as well, which some thought may include &lt;em&gt;package&lt;/em&gt; names in the code.&lt;/p&gt;
&lt;p&gt;Now, I&apos;ve finally gotten Firefox 2.0 on my Debian unstable box -- or should I say, IceWeasel.  Apparently the Mozilla/Firefox people are making some assertion that Debian can&apos;t recompile and redistribute Firefox and still call it Firefox, so they&apos;ve renamed it.  They&apos;ve taken similar actions renaming Thunderbird to IceDove.  This is down-right odd and wasting the time of many talented developers.&lt;/p&gt;
&lt;p&gt;I guess people are testing the legal limits of the licenses and the community using them.  I must wonder if the GPLv3 will be addressing this, since it seems to be on people&apos;s minds.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Blog Code, Want EJB3
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Blog_Code_Want_EJB3.html
            </link>
            <pubDate>Wed, 22 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Blog_Code_Want_EJB3.html
            </guid>
            <description>
                &lt;p&gt;I desperately want to add new features to my weblog, but I just don&apos;t want to deal with xDoclet, value objects, CMP2, etc. anymore.  I&apos;d love to start reimplementing this thing in EJB 3 and WebWork, but I have other things I should be coding before that.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mobile Flickr Browsing
            </title>
            <link>
                https://www.hjsoft.com/blog/Mobile_Flickr_Browsing.html
            </link>
            <pubDate>Wed, 22 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mobile_Flickr_Browsing.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://m.flickr.com/&quot;&gt;Flickr Mobile&lt;/a&gt; is available now.  There are so many beautiful and interesting photos coming across Flickr, and this makes it available in those spare moments when you&apos;re looking to kill some time.&lt;/p&gt;
&lt;p&gt;The native browser in my SE S710a didn&apos;t want to display the page, but Opera Mini does just fine.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Back to Throughput Collector
            </title>
            <link>
                https://www.hjsoft.com/blog/Back_to_Throughput_Collector.html
            </link>
            <pubDate>Wed, 22 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Back_to_Throughput_Collector.html
            </guid>
            <description>
                &lt;p&gt;Response times of the JBoss server were lagging a bit and the swapping was high with the &lt;a href = &quot; http://www.hjsoft.com/blog/link/Trying_CMS_Garbage_Collection&quot;&gt;CMS GC settings&lt;/a&gt;, so I&apos;m back to the throughput collector (-XX:+UseParallelGC).  I get occassional long pauses, but most the time, it&apos;s responding pretty quickly.&lt;/p&gt;
&lt;p&gt;Here are my latest settings in my small environment:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;-server -Xms44m -Xmx44m -XX:ThreadStackSize=96 -Xss96k -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -XX:-TraceClassUnloading&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

            </description>
            
        </item>
        <item>
            <title>
                Trying CMS Garbage Collection
            </title>
            <link>
                https://www.hjsoft.com/blog/Trying_CMS_Garbage_Collection.html
            </link>
            <pubDate>Tue, 21 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Trying_CMS_Garbage_Collection.html
            </guid>
            <description>
                &lt;p&gt;I was previously &lt;a href = &quot;http://www.hjsoft.com/blog/link/Java_5_GC_Ergonomics_in_a_Small_Environment&quot;&gt;trying the parallel throughput collector (-XX:+UseParallelGC) with ergonomics&lt;/a&gt;, but every description I&apos;ve ever &lt;a href = &quot;http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html&quot;&gt;read&lt;/a&gt; of this collector says it&apos;s appropriate for lots of RAM, and numerous processors.  I&apos;ve observed relatively good performance in my little 192M Xen VPS.&lt;/p&gt;
&lt;p&gt;The CMS collector (-XX:+UseConcMarkSweepGC) sounds a bit more appropriate for my small setup, so I&apos;m testing that now.  I decided to drop the incremental mode (-XX:+CMSIncrementalMode), since it felt like the incremental collection of the tenured area may have been causing thrashing of the swap space on the machine.  It seems that no matter what I do, this Java process always needs lots of memory -- heap is limited to 40M, permanent space is limited to 50M, and thread stack is only 96K, but the server still takes up 320M+ of virtual memory.&lt;/p&gt;
&lt;p&gt;Here are my current settings:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;-server -Xms40m -Xmx40m -XX:MaxPermSize=50M -XX:NewRatio=5 -XX:ThreadStackSize=96 -Xss96k -XX:+UseBiasedLocking -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -XX:-TraceClassUnloading&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don&apos;t think the NewRatio is actually having affect though, since the &lt;code&gt;DefNew&lt;/code&gt; sizes in the GC logs stay the same.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JavaME GPL Without Classpath Exception
            </title>
            <link>
                https://www.hjsoft.com/blog/JavaME_GPL_Without_Classpath_Exception.html
            </link>
            <pubDate>Thu, 16 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JavaME_GPL_Without_Classpath_Exception.html
            </guid>
            <description>
                &lt;p&gt;Everyone seems concerned about licensing of their JavaME applications, but this quick little article about &lt;a href = &quot;http://www.javalobby.org/java/forums/t84460.html&quot;&gt;JavaME and the GPL&lt;/a&gt; should allay everyone&apos;s fears.&lt;/p&gt;
&lt;p&gt;Basically, when we develop midlets, we&apos;re just writing code which runs on top of the JavaME platform code.  We&apos;ll never need to distribute the JavaME code with our applications, since that&apos;s always provided by phone vendors and emulators.  This is exactly the same situation with any application (open or closed) running on top of the Linux kernel which is GPL as well.&lt;/p&gt;
&lt;p&gt;Only those who derive works from Sun&apos;s platform code (say an emulator or a phone implementation) are obligated to distribute that implementation under the GPL.  See the difference?&lt;/p&gt;
&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; likely that someone will want to distribute a desktop or JavaEE application with the all the JVM and server API code, though, so the Classpath exception was specified in those licenses to explicitly allow such distribution without forcing a GPL license on the whole project.&lt;/p&gt;
&lt;p&gt;In the end, it makes no sense for Sun to cripple the flourishing commercial JavaME application market.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Figured Out Sudoku
            </title>
            <link>
                https://www.hjsoft.com/blog/Figured_Out_Sudoku.html
            </link>
            <pubDate>Thu, 16 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Figured_Out_Sudoku.html
            </guid>
            <description>
                &lt;p&gt;I loaded the little &lt;a href = &quot;http://www.getjar.com/products/2603/SUDOKUSpot&quot;&gt;Sudoku Spot&lt;/a&gt; JavaME game on my phone a long time ago, then wiped it, because I couldn&apos;t figure out a strategy to play. &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/bryn/&quot;&gt;Bryn&lt;/a&gt; recently expressed interest in getting a Sudoku game loaded on her phone, so I suggested this one, since it had a better interface than any of the others that I had seen.&lt;/p&gt;
&lt;p&gt;I figured I&apos;d load it myself again, and see if I could figure it out, and this time, it clicked, so I finally figured out the strategy for this game.  I&apos;ve actually completed a few boards.&lt;/p&gt;
&lt;p&gt;Now I just need to figure out how to get the Linux bluetooth stuff to push Java applications to the Motorola V551/V557.  I did find that I can put the jar in the &lt;em&gt;Other&lt;/em&gt; directory on my SonyEricsson S710a, and I can push it from there to other phones, including the Motorola phones.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                GStreamer General Resource Error
            </title>
            <link>
                https://www.hjsoft.com/blog/GStreamer_General_Resource_Error.html
            </link>
            <pubDate>Wed, 15 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/GStreamer_General_Resource_Error.html
            </guid>
            <description>
                &lt;p&gt;Rhythmbox seemed unhappy with some of my incoming podcasts, quietly refusing to import them with the note: &lt;em&gt;GStreamer encountered a general resource error.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This &lt;a href = &quot;http://ubuntuforums.org/showthread.php?t=270371&quot;&gt;Ubuntu forum thread&lt;/a&gt; suggested removing the &lt;code&gt;gstreamer0.10-fluendo-mp3&lt;/code&gt; package in favor of letting &lt;code&gt;gstreamer0.10-plugins-bad&lt;/code&gt;, or in my case &lt;code&gt;gstreamer0.10-plugins-really-bad&lt;/code&gt; from &lt;a href = &quot;http://www.debian-multimedia.org/&quot;&gt;debian-multimedia.org&lt;/a&gt;.
Now those files import just fine.  Among the regular offenders were &lt;a href = &quot;http://www.talkcrunch.com/&quot;&gt;TalkCrunch&lt;/a&gt;, &lt;a href = &quot;http://drunkandretired.com/podcast/&quot;&gt;Drunk and Retired&lt;/a&gt;, and &lt;a href = &quot;http://redmonk.libsyn.com/&quot;&gt;RedMonk Radio&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Javascript Escape for WebWork&apos;s RichTextEditor
            </title>
            <link>
                https://www.hjsoft.com/blog/Javascript_Escape_for_WebWorks_RichTextEditor.html
            </link>
            <pubDate>Tue, 14 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Javascript_Escape_for_WebWorks_RichTextEditor.html
            </guid>
            <description>
                &lt;p&gt;I rolled out the news admin interface to the &lt;a href = &quot;http://www.k-prep.com/&quot;&gt;K-Prep&lt;/a&gt; site a few weeks ago, and immediately, Claire found a way to break it -- including a single quote (apostrophe) in a news item broke the rendering of the rich text editor control.  It turns out that the &lt;code&gt;&amp;lt;ww:richtexteditor/&amp;gt;&lt;/code&gt; taglib component doesn&apos;t automatically escape the contents of the field, so I had to do it manually.&lt;/p&gt;
&lt;p&gt;I fixed it by escaping it in my WebWork action before handing the value off to the JSP:
&lt;code&gt;newText.replaceAll(&quot;&apos;&quot;, &quot;\\\\&apos;&quot;); // yes, it takes that many escapes&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I recently saw a recommendation to use &lt;code&gt;freemarker.template.utility.StringUtil.javaScriptStringEnc(String)&lt;/code&gt; to accomplish the same thing (with even more complete transformations).  In initial testing, this seems to work just fine, so I&apos;ll switch to this utility, since larger minds than mine have already mulled over its implementation.&lt;/p&gt;
&lt;p&gt;I still don&apos;t comprehend why I should need to do this myself though.  The tag knows the exact value of the text, it knows it&apos;s going to render it in Javascript snippet, so why do &lt;em&gt;I&lt;/em&gt; need to know that.  It&apos;s a terrible break in the encapsulation.  I&apos;m working at too high of a level to have to worry about Javascript injection.  I wonder if the FreeMarker tag for the rich text editor does this correctly.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                RSS Reading
            </title>
            <link>
                https://www.hjsoft.com/blog/RSS_Reading.html
            </link>
            <pubDate>Mon, 13 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/RSS_Reading.html
            </guid>
            <description>
                &lt;p&gt;I like to keep my links tree public, so people can see what I&apos;m reading.  I regularly click my way down through the list throughout the day, so it really does represent my online reading habits. More  and more, though, I&apos;ve been adding the slower sites into &lt;a href = &quot;http://liferea.sourceforge.net/&quot;&gt;Liferea&lt;/a&gt;, so I can continue to watch these sites for their infrequent updates without taking up the time and space of having it in my link list I traverse regularly.&lt;/p&gt;
&lt;p&gt;Now, for high-traffic sites, like &lt;a href = &quot;http://www.lifehacker.com/&quot;&gt;LifeHacker&lt;/a&gt; and others, I&apos;m thinking about moving those into my RSS reader as well to keep from missing things when they scroll off the page.  I also like that Liferea gives me a chance to see everything inter-mixed in chronological order, instead of (again) having to click on each feed.  That&apos;s where my phone RSS reader and Sage (Firefox extension) get sort of cumbersome.&lt;/p&gt;
&lt;p&gt;I&apos;m torn between convenience (of the RSS reader), portability (of having my list web-based), and disclosure (an up-to-date list for all to see).&lt;/p&gt;
&lt;p&gt;I at the very least intend to keep the RSS reader going to help absorb more of the Java and Mobile news around the world.  That was the impetus to look at using an RSS reader -- being able to add feeds freely without having to weigh adding a link to my list on this weblog.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Hope in a New World
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Hope_in_a_New_World.html
            </link>
            <pubDate>Wed, 8 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Hope_in_a_New_World.html
            </guid>
            <description>
                &lt;p&gt;It&apos;s been like waking up in a new world today -- &lt;a href = &quot;http://www.forbes.com/home/feeds/ap/2006/11/08/ap3155629.html&quot;&gt;Democrats took the house&lt;/a&gt; and may still take the senate, and &lt;a href = &quot;http://today.reuters.com/News/CrisesArticle.aspx?storyId=L08156780&quot;&gt;Rumsfeld is out&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;m just waiting to see the articles explaining &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=6410221&quot;&gt;Karl Rove&apos;s Cheerleader Math&lt;/a&gt; in retrospect.&lt;/p&gt;
&lt;p&gt;Now let&apos;s see if anything is really different.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                More Classloading Issues with JBoss 4.0.5
            </title>
            <link>
                https://www.hjsoft.com/blog/More_Classloading_Issues_with_JBoss_405.html
            </link>
            <pubDate>Thu, 2 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/More_Classloading_Issues_with_JBoss_405.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been &lt;a href = &quot;http://www.jboss.org/index.html?module=bb&amp;amp;op=viewtopic&amp;amp;t=93514&quot;&gt;fighting&lt;/a&gt; for a couple days with JBoss 4.0.5.  4.0.4 has been working fine for me, but now they&apos;ve changed around the classloading yet again.  3.2.x used to be difficult to get configured to be J2EE compliant (but I could do it), and they had cleaned it up in the 4.0.x series.  Now it seems they&apos;ve gone back to the flattened unified classloader (UCL), and I can&apos;t get it configured to work at all.&lt;/p&gt;
&lt;p&gt;I&apos;m seeing the familiar ClassCastExceptions due to packaging my EJB interfaces inside the war that uses them.  I could abandon doing this and just succumb to the UCL kool-aid, but I&apos;m afraid that&apos;ll rot my brain for the times when I need to isolate different version of the same classes within the same server, or when I need to work with another application server.&lt;/p&gt;
&lt;p&gt;Since I flipped all the advertised switches, and it still didn&apos;t work, I&apos;m expecting it&apos;ll end up being a bug and there will be a JBoss 4.0.6 (or 4.0.5SP1) which fixes it.  Unfortunately, it&apos;ll be delayed by the JBoss people&apos;s blind defensiveness over their odd classloader scheme -- You mention a classloader issue, and you just get people jamming wiki URLs down your throat when in reality, this configuration has been a moving target from the beginning.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Debian&apos;s Apache 2.2.3
            </title>
            <link>
                https://www.hjsoft.com/blog/Debians_Apache_223.html
            </link>
            <pubDate>Thu, 2 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Debians_Apache_223.html
            </guid>
            <description>
                &lt;p&gt;With the old Apache 2.0.x, I&apos;d sometimes see proxy errors if my JBoss server took too long to respond.  It was not reliably reproducible, but it looked a lot like &lt;a href = &quot;http://issues.apache.org/bugzilla/show_bug.cgi?id=37770&quot;&gt;Apache Bug #37770&lt;/a&gt; around keep-alive connections through the proxy.&lt;/p&gt;
&lt;p&gt;Apache 2.2.3 recently hit Debian, so when I got it installed, I was pleased to see that they seem to have included the patch for this fix, and I no longer see the proxy errors.  My previous approach to avoiding the issue is just excessively tuning JBoss, but that didn&apos;t even eliminate all the failures.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ryan Freitas on Collaboration
            </title>
            <link>
                https://www.hjsoft.com/blog/Ryan_Freitas_on_Collaboration.html
            </link>
            <pubDate>Thu, 2 Nov 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ryan_Freitas_on_Collaboration.html
            </guid>
            <description>
                &lt;p&gt;Just as I was thinking to myself that I&apos;ve not heard any compelling podcasts in a while, &lt;a href = &quot;http://www.itconversations.com/&quot;&gt;IT Conversations&lt;/a&gt; put out a talk with &lt;a href = &quot;http://www.itconversations.com/shows/detail1564.html&quot;&gt;Ryan Freitas on Facilitating Collaboration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&apos;s interesting to listen to him talk about his fast-paced working environment and the tools they use to keep track of everyone on the team.   Everyone seems to live and breathe their work.  Not only do people follow each other&apos;s project statuses, but also their reading (news/blog), locations, thoughts (blogs) -- everything.  The company encourages this full disclosure of everything you&apos;re doing, so you can find others in the organization with whom you can collaborate.&lt;/p&gt;
&lt;p&gt;It sounds like it could be really stressful disclosing your every move like this, but I get the feeling that personal and work all blends together here.  Their organization seems to recognize the value of all the learning and work inside and outside of official projects.  What I usually regard as &quot;screw-off&quot; time would not be questioned in such an environment and may be encouraged or at least accepted.&lt;/p&gt;
&lt;p&gt;I don&apos;t get the feeling that I&apos;m in an environment like that, and I&apos;ve completely fallen into the corporate mindset of looking busy and trying not to acquire too much more mundane work, so I&apos;m left with a few moments to look at the more interesting projects, work-related or not.  No one wants to know that I&apos;ve learned all about EJB3 or whatever in the past couple weeks, until the time comes 2 years from now when we may actually want to use that technology.  Of course, since I&apos;m not disclosing, on one here would know to ask me about it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Using My Phone to Learn Japanese
            </title>
            <link>
                https://www.hjsoft.com/blog/Using_My_Phone_to_Learn_Japanese.html
            </link>
            <pubDate>Fri, 13 Oct 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Using_My_Phone_to_Learn_Japanese.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m now using my S710a to study Japanese.  I have a 128M memory stick in it, so I can easily carry around a handful of 10-minute podcasts from &lt;a href = &quot;http://www.japanesepod101.com/&quot;&gt;JapanesePod101&lt;/a&gt;.  I&apos;m listening to the Beginner and Survival lessons.  The production is very good and the material is presented very well, so it&apos;s a pleasure to listen.&lt;/p&gt;
&lt;p&gt;Having it in my phone, I can easily play a lesson on the speaker phone a couple times a day while I&apos;m driving.  I intend to take my time, so I try to do a lesson each couple days, and I step back to previous ones that are still on my phone for a review.&lt;/p&gt;
&lt;p&gt;There&apos;s already nearly a year of material posted, so it&apos;s going to take me a long time to catch up, if I ever do.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Hilarious Google Video Finds
            </title>
            <link>
                https://www.hjsoft.com/blog/Hilarious_Google_Video_Finds.html
            </link>
            <pubDate>Tue, 10 Oct 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Hilarious_Google_Video_Finds.html
            </guid>
            <description>
                &lt;p&gt;It&apos;s amazing how you can waste time finding odd stuff on Google Video, so for your entertainment, I offer: &lt;a href = &quot;http://video.google.com/videoplay?docid=1047157044159649860&quot;&gt;Beat Boxin&apos; Bush&lt;/a&gt;, and &lt;a href = &quot;http://video.google.com/videoplay?docid=7997646050642417046&quot;&gt;The Internet is for Porn: The Musical&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Maybe it&apos;s just that I&apos;ve never played World of Warcraft, but I&apos;m always so surprised to see what you can make those avatars do.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                This Year&apos;s Christmas Gift
            </title>
            <link>
                https://www.hjsoft.com/blog/This_Years_Christmas_Gift.html
            </link>
            <pubDate>Fri, 6 Oct 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/This_Years_Christmas_Gift.html
            </guid>
            <description>
                &lt;p&gt;When I have trouble finding gifts for people this year, I&apos;m getting them the &lt;a href = &quot;http://www.dvdrewinder.com/index.php&quot;&gt;DVD Rewinder&lt;/a&gt;!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Experiences with the Canon Powershot S2
            </title>
            <link>
                https://www.hjsoft.com/blog/Experiences_with_the_Canon_Powershot_S2.html
            </link>
            <pubDate>Thu, 5 Oct 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Experiences_with_the_Canon_Powershot_S2.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve had the S2 for about a month now, and I must say I&apos;m very happy with it.&lt;/p&gt;
&lt;p&gt;The latest gPhoto libraries from Debian&apos;s unstable release work wonderfully to pull images from the camera.  I had to add myself to the &lt;code&gt;camera&lt;/code&gt; group to give my user account access to download the pictures.  As soon as I plug the camera in, gThumb pops up and shows me the thumbnails and gives me the option to import the photos.  It&apos;s very fast about it too, since it&apos;s USB 2.0. I&apos;m pleased that I won&apos;t need to buy a card reader.&lt;/p&gt;
&lt;p&gt;I got about a day of use from my 4-year-old set  of 1600mAh batteries.  Using the flash destroys those batteries pretty quickly.  I&apos;ve been using a new set of 2500mAh batteries for a couple days at a time, having taken at least 250 pictures on a charge.  The charging of the flash seems to slow after a bit of use, but it&apos;s still usable.&lt;/p&gt;
&lt;p&gt;I read the manual in a couple days and figured out how to use almost all the features.  I didn&apos;t bother with the odd color swap options, etc.  I shoot mostly in aperture-priority mode, but I have played a bit with long exposures too.  The camera doesn&apos;t do RAW, but I set the image quality to Large-Superfine, so it doesn&apos;t compress out any of the detail.  Each image is around 2-3MB on the card.  I prefer to capture them huge like that and let Gimp save it smaller (200-300kB) after I&apos;ve finished processing it.&lt;/p&gt;
&lt;p&gt;My first large stash of examples are from &lt;a href = &quot;http://gallery.hjsoft.com/gallery/2006-09-16_Ocean_City&quot;&gt;Ocean City, MD&lt;/a&gt;.  (The first 10 or so images are camera phone pictures, so ignore those.)&lt;/p&gt;
&lt;p&gt;Claire&apos;s been doing well with the camera as well.  She can just flip it to &lt;em&gt;Auto&lt;/em&gt;, and it undoes most of the weird options I&apos;ve set.&lt;/p&gt;
&lt;p&gt;This camera can take lens adapters, so I thought I&apos;d be hitting eBay in pretty short order to buy a 1.5x or 3.0x telephoto adapter lens or maybe a wide-angle.  After using its existing 12x zoom, I&apos;m not really feeling a need for the extra tele.  12x is usually plenty for my purposes, and when it&apos;s not, the resolution is high enough that I can tightly recrop and still keep lots of detail.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TrackBack Spam to Google Search
            </title>
            <link>
                https://www.hjsoft.com/blog/TrackBack_Spam_to_Google_Search.html
            </link>
            <pubDate>Wed, 4 Oct 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TrackBack_Spam_to_Google_Search.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m seeing trackback spam now linking to simple Google searches for a single garbled string.  I can&apos;t figure out what it may be accomplishing, since the search results in nothing.  I must wonder if it&apos;s just a test hit to confirm that trackback works for my site and index me for later attack.&lt;/p&gt;
&lt;p&gt;Does anyone know how these bogus search links may benefit anyone?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (12:40pm):&lt;/strong&gt;  I looked at the access logs, and these requests are coming from all over the place, and I see each client hit the permalink, submit a trackback, then hit the permalink again, as if to check that the trackback was accepted.  Interesting.&lt;/p&gt;
&lt;p&gt;These requests also all come in for the same page, so it may be some weird centrally-controlled bot network.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bar Codes and Mobile Phones
            </title>
            <link>
                https://www.hjsoft.com/blog/Bar_Codes_and_Mobile_Phones.html
            </link>
            <pubDate>Tue, 3 Oct 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bar_Codes_and_Mobile_Phones.html
            </guid>
            <description>
                &lt;p&gt;According to &lt;a href = &quot;http://mobilecrunch.com&quot;&gt;MobileCrunch&lt;/a&gt;, it seems that Coca Cola will be using &lt;a href = &quot;http://mobilecrunch.com/2006/10/03/op3-hits-it-big-shotcodes-to-appear-on-40-million-bottles-of-sprite/&quot;&gt;ShotCodes on some bottles&lt;/a&gt;.  I&apos;m sort of disappointed that they chose &lt;a href = &quot;http://www.shotcode.com/&quot;&gt;ShotCode&lt;/a&gt; when there are other attempts that make more sense to me.  It&apos;s all very marginal work, and boosting the right standard into the spotlight would help immensely.  I just don&apos;t feel that ShotCode is the right choice.&lt;/p&gt;
&lt;p&gt;ShotCode was the first example I had seen of these 2D barcodes for use with mobile phones, and I was really impressed.  It&apos;s used for quick downloads from &lt;a href = &quot;http://www.getjar.com/&quot;&gt;GetJar&lt;/a&gt; using the camera on your phone to scan the ShotCode off the computer display.&lt;/p&gt;
&lt;p&gt;My excitement quickly fell off when I saw that I couldn&apos;t openly create ShotCodes of my own.  They seem to be assigned and centrally mapped through shotcode.com, so it represents nothing more than a serial number.&lt;/p&gt;
&lt;p&gt;As an alternative, &lt;a href = &quot;http://www.hjsoft.com/blog/link/Large-Scale_Real-World_Computer_Gaming&quot;&gt;SemaCode was used by area/code gaming&lt;/a&gt;.  SemaCode has a more open SDK, and it seems that they encode the URL or text into the 2D barcode -- I&apos;ve seen the little application show me the target URL without having to connect to a lookup service, and I&apos;ve used their Java-based tools to generate barcodes on my Linux box.  This obviously feels like the better solution.&lt;/p&gt;
&lt;p&gt;I still hope to find the time to develop and setup my own &quot;little&quot; Geocache/SemaCode game in the style of what &lt;a href = &quot;http://playareacode.com/&quot;&gt;area/code&lt;/a&gt; does.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                .mobi Makes No Sense
            </title>
            <link>
                https://www.hjsoft.com/blog/mobi_Makes_No_Sense.html
            </link>
            <pubDate>Fri, 29 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/mobi_Makes_No_Sense.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://online.wsj.com/article_email/SB115923880575773947-lMyQjAxMDE2NTI5NjIyMzY4Wj.html&quot;&gt;.mobi TLD is available now&lt;/a&gt;.  I&apos;m hoping the world will mostly ignore this.  Top-level domains (TLD) are meant to be the &lt;em&gt;&lt;strong&gt;top&lt;/strong&gt;&lt;/em&gt; of the hierarchy, not a a duplicate of another hierarchy.  Supposedly now, I&apos;m to rush out and register the .mobi version of all my sites and put the mobile copy there.&lt;/p&gt;

&lt;p&gt;In reality, the web content is not really separate from mobile content -- it&apos;s the same content viewed in different ways.  I don&apos;t need to put a whole new site up on a whole new domain name.&lt;/p&gt;
&lt;p&gt;.mobi was to also help mobile users identify sites that are designed for small screens, but as screens get bigger, networks get faster, and phones get more powerful, the line between mobile and desktop is blurring, so I don&apos;t care so much if I&apos;m viewing content geared toward mobile when it all just renders fine.&lt;/p&gt;
&lt;p&gt;.mobi is just a money grab for the registrars.  It&apos;s just telling me that I need to spend the money on the .net, .org, .biz, .info, and now .mobi version of my domain name.  I&apos;ll continue to use a more semantic organization to my pages plus CSS to style it up, so the same page renders in both environments.  When the time comes to gear a site specifically for mobile, then I&apos;ll use context paths or &lt;em&gt;maybe&lt;/em&gt; a wap.hjsoft.com URL, since WAP/mobile is only an aspect of my site, not the other way around.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (29 September 2006):&lt;/strong&gt; This &lt;a href = &quot;http://news.techdirt.com/news/wireless/article/6902&quot;&gt;article at techdirt&lt;/a&gt; states everything much more completely than I bothered.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ThinkPad/Radeon S3 Sleep Power Drain Fixed
            </title>
            <link>
                https://www.hjsoft.com/blog/ThinkPadRadeon_S3_Sleep_Power_Drain_Fixed.html
            </link>
            <pubDate>Mon, 25 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ThinkPadRadeon_S3_Sleep_Power_Drain_Fixed.html
            </guid>
            <description>
                &lt;p&gt;It appears that the Radeon power management patch has finally been &lt;a href = &quot;http://bugme.osdl.org/show_bug.cgi?id=3022#c176&quot;&gt;included&lt;/a&gt; in an official kernel as of 2.6.18.  I realized it when the good old patch wouldn&apos;t apply.  Yay, I no longer need to patch my kernel.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Drug Education
            </title>
            <link>
                https://www.hjsoft.com/blog/Drug_Education.html
            </link>
            <pubDate>Mon, 25 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Drug_Education.html
            </guid>
            <description>
                &lt;p&gt;I keep abreast of the latest drugs through my comment spam on my weblog.  It seems I&apos;m always discovering names of new drugs in these URLs as I blacklist and delete them.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Vacation Stress
            </title>
            <link>
                https://www.hjsoft.com/blog/Vacation_Stress.html
            </link>
            <pubDate>Fri, 15 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Vacation_Stress.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m sort of panicked about going on vacation.  It just feels like I&apos;m being plucked from all the stuff I&apos;m trying to get done to allow it to all pile up for my return.  I&apos;ll be missing a very important week at work and removing myself from many of my normal technical comforts.&lt;/p&gt;
&lt;p&gt;I&apos;m trying to remain calm by reminding myself that a tethered EDGE connection is reasonable to use, and I may get some time to sit and read and work on some code.  I also look forward to chasing the kids and playing with the camera a bit.&lt;/p&gt;
&lt;p&gt;Getting normal life wrapped up in preparation to drop it for a week is hard work.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Subversion JavaHL over JavaSVN
            </title>
            <link>
                https://www.hjsoft.com/blog/Subversion_JavaHL_over_JavaSVN.html
            </link>
            <pubDate>Tue, 12 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Subversion_JavaHL_over_JavaSVN.html
            </guid>
            <description>
                &lt;p&gt;Subversion 1.4.0 hit Debian Unstable a day or 2 ago, so I happily upgraded my source repository server and development machine.  Then I found that Subclipse using JavaSVN got sort of unhappy with my choice -- throwing &quot;Malformed network data&quot; errors.&lt;/p&gt;
&lt;p&gt;The Debian release notes mentioned that &lt;code&gt;svn&lt;/code&gt; will automatically upgrade an older working copy to use the new 1.4 formats, so I was being really careful to not touch my working copy with anything but JavaSVN for now.  After chewing up my working copy badly enough with JavaSVN, I finally added &lt;code&gt;-Djava.library.path=/usr/lib/jni&lt;/code&gt; to my &lt;code&gt;eclipse.ini&lt;/code&gt;, and switch Subclipse to use the native JavaHL bindings which would use the official 1.4.0 Subversion libraries.  That&apos;s working nicely now, and it&apos;s &lt;em&gt;fast&lt;/em&gt;.  I may stick with this configuration for a bit even when I see a newer JavaSVN/Subclipse come across the update site.&lt;/p&gt;
&lt;p&gt;I had chosen JavaSVN previously to maintain &quot;Java purity&quot;, and I also think the native JavaHL libraries may not have been available by default through Debian.  I&apos;m not sure.  It&apos;s working now, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ThinkPad BIOS Upgrade in Linux
            </title>
            <link>
                https://www.hjsoft.com/blog/ThinkPad_BIOS_Upgrade_in_Linux.html
            </link>
            <pubDate>Fri, 8 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ThinkPad_BIOS_Upgrade_in_Linux.html
            </guid>
            <description>
                &lt;p&gt;I successfully updated the BIOS on my ThinkPad R40 completely from within Linux -- I didn&apos;t even need the ultrabay floppy I bought to do this last time.  I used the &lt;a href = &quot;http://www.thinkwiki.org/wiki/BIOS_Upgrade&quot;&gt;instructions at ThinkWiki&lt;/a&gt; to extract the image from the non-diskette EXE, create a bootable CD image, and burn it.  After that, it just booted the CD on the notebook.  I don&apos;t know why I couldn&apos;t have figured that out &lt;a href = &quot;http://www.hjsoft.com/blog/link/ThinkPad_BIOS_Upgrade&quot;&gt;last time&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ITC: Sam Harris at PopTech
            </title>
            <link>
                https://www.hjsoft.com/blog/ITC_Sam_Harris_at_PopTech.html
            </link>
            <pubDate>Wed, 6 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ITC_Sam_Harris_at_PopTech.html
            </guid>
            <description>
                &lt;p&gt;The podcast circuit has been a bit slow this summer, but an interesting one came across &lt;a href = &quot;http://www.itconversations.com/&quot;&gt;ITC&lt;/a&gt; recently.  Sam Harris was at PopTech! talking about &lt;a href = &quot;http://www.itconversations.com/shows/detail785.html&quot;&gt;the prevalence and absurdity of religious belief&lt;/a&gt;.  I&apos;m actually listening to it a second time to absorb more into my toolbox for atheist discussion.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Depressing Drive
            </title>
            <link>
                https://www.hjsoft.com/blog/Depressing_Drive.html
            </link>
            <pubDate>Tue, 5 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Depressing_Drive.html
            </guid>
            <description>
                &lt;p&gt;I took the very &quot;scenic&quot; route to work today which took me through the very burned out town of Steelton.  Sprinkle that with a bit of 9/11 news on the radio, and it&apos;s already a down sort of day.  The worst part was pulling up behind a car with a happy little bumper sticker with joyful little stick people.  Then I read, &quot;Marriage: One Man One Woman (NoGayMarriage.com)&quot;.&lt;/p&gt;
&lt;p&gt;I just wasn&apos;t prepared for that little reminder of the kind of people who run rampant these days.  Who are these people who don&apos;t have enough in their own lives that they need to worry about what others do in their private lives.&lt;/p&gt;
&lt;p&gt;Strike &lt;em&gt;marriage&lt;/em&gt; from the law, replace it with an equally protected &lt;em&gt;civil union&lt;/em&gt;, and I&apos;ll be among the first in line to abandon the tainted and filthy term.  It was obviously a mistake to write it into the law.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                To-Do List of Computer Things
            </title>
            <link>
                https://www.hjsoft.com/blog/To-Do_List_of_Computer_Things.html
            </link>
            <pubDate>Tue, 5 Sep 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/To-Do_List_of_Computer_Things.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve allowed a small pile of tasks to pile up across my hard drives.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edit the 450+ images from the &lt;a href = &quot;http://www.hjsoft.com/blog/link/Canon_PowerShot_S2&quot;&gt;new camera&lt;/a&gt;, now that I can use it well enough.&lt;/li&gt;
&lt;li&gt;Finish upgrading the &lt;a href = &quot;http://weblogs.hjsoft.com/&quot;&gt;weblogs server&lt;/a&gt; to the latest Blojsom.&lt;/li&gt;
&lt;li&gt;Upgrade my 3 existing WebWork projects to the newly-released version 2.2.3.&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://www.k-prep.com/&quot;&gt;K-Prep&lt;/a&gt; site enhancements.&lt;/li&gt;
&lt;/ul&gt;

            </description>
            
        </item>
        <item>
            <title>
                Dixie Chicks
            </title>
            <link>
                https://www.hjsoft.com/blog/Dixie_Chicks.html
            </link>
            <pubDate>Thu, 31 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Dixie_Chicks.html
            </guid>
            <description>
                &lt;p&gt;It sounds like &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=5742229&quot;&gt;The Dixie Chicks are still having a rough time&lt;/a&gt; after the anti-Bush comments of one member 3 years ago.  They remain mostly unapologetic and bitter about the way the music scene, radio programmers, and fans have treated them as well -- their latest single is titled &lt;em&gt;Not Ready To Make Nice&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I saw them live years and years ago at a &lt;a href = &quot;http://www.lilithfair.com/&quot;&gt;Lilith Fair&lt;/a&gt;.  I don&apos;t care much for country music, but we were all howling with laughter and appreciation when they sang the very entertaining &lt;a href = &quot;http://www.lyricsfreak.com/d/dixie+chicks/goodbye+earl_20040999.html&quot;&gt;&lt;em&gt;Goodbye Earl&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I almost feel like I should go out and buy the new CD just to support them for trying to make their statement.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java 5 GC Ergonomics in a Small Environment
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_5_GC_Ergonomics_in_a_Small_Environment.html
            </link>
            <pubDate>Wed, 30 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_5_GC_Ergonomics_in_a_Small_Environment.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been trying to tune a JBoss instance on a relatively low-memory system (192M physical RAM) for a long time now.  I think my biggest problem was that the Java heap space would get swapped out to disk by the OS, and then GC of any sort would degrade to taking tens of seconds and at times minutes!  For my set of applications, the most effective switches I had found were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set the thread stacks smaller to reduce overall memory usage: &lt;code&gt;-XX:ThreadStackSize=96 -Xss96k&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Severely limit the size of the heap to avoid hitting OS swap: &lt;code&gt;-Xmx46m -Xms46m&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It took lots of trial and error to determine these numbers. &lt;a href = &quot;http://java.sun.com/j2se/1.5.0/docs/guide/vm/gc-ergonomics.html&quot;&gt;Java 5 GC Ergonomics&lt;/a&gt; advertises that it should help eliminate the need to do all this tuning, so I thought I&apos;d give it a try.&lt;/p&gt;
&lt;p&gt;It seems that you need to be using the Throughput collector (&lt;code&gt;-XX:+UseParallelGC&lt;/code&gt;) to get adaptive sizing automatically enabled.  I then removed my manual heap sizing options completely, and set the ergonomic options: &lt;code&gt;-XX:MaxGCPauseMillis=100 -XX:MaxGCMinorPauseMillis=100 -XX:GCTimeRatio=9&lt;/code&gt;.  I chose a &quot;high&quot; GCTimeRatio (lesser than the 19 from other examples), since I knew that &lt;em&gt;footprint&lt;/em&gt; is probably the biggest issue for my server.  I figured if I made it easy to hit the GCTimeRatio and the maximum pauses, it could shrink the heap even smaller.  I&apos;m testing this all right now -- it seems to take a long time for performance to settle into its worst states (12-24 hours).  Repeatedly spidering and touching all the apps (while also spawning lots of sessions) just doesn&apos;t seem to kick off the problems like I&apos;d expect.  It may ultimately be caused by other heavy nightly jobs that run on the box, so I just have to wait.&lt;/p&gt;
&lt;p&gt;After 4 hours of testing the latest configuration, the server&apos;s settled into using only about 41M or heap space, of which only 640K is set aside for the young generation.  I&apos;m hoping that the JVM is able to recognize when GC times go long due to the OS swappig out heap and is automatically keeping it below that threshold.  We&apos;ll see how it does in the longer term.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (30 August 2006):&lt;/strong&gt;
The server&apos;s been up for a week straight.  I&apos;ve  redeployed a WebWork application a couple times, so the memory usage creeped up a bit, but it&apos;s now sitting around 46M.  I get occassional long GCs (~10 seconds), but they&apos;re not common.&lt;/p&gt;
&lt;p&gt;I looked up the proxy error I see in Apache occassionally, and it may be an issue with keepalive connections between Apache and JBoss.  I&apos;ll have to read more about that and see if any of the tips alleviate it.  I had always assumed this was caused the JBoss server going away.&lt;/p&gt;
&lt;p&gt;I must say that I&apos;ve been pleased with its behavior so far, and my java command line is shorter than it was -- that&apos;s always a good thing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Nokia Firmware Upgrade
            </title>
            <link>
                https://www.hjsoft.com/blog/Nokia_Firmware_Upgrade.html
            </link>
            <pubDate>Fri, 25 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Nokia_Firmware_Upgrade.html
            </guid>
            <description>
                &lt;p&gt;Nokia&apos;s offering free &lt;a href = &quot;http://www.nokia.co.uk/nokia/0,1522,,00.html?orig=/softwareupdate&quot;&gt;firmware updates&lt;/a&gt; for their phones.  Reportedly, this is the &lt;a href = &quot;http://mobilecrunch.com/2006/08/24/nokia-unveils-phone-firmware-updater/&quot;&gt;first carrier&lt;/a&gt; to do this.  Maybe I&apos;ll need to look at Nokia phones next time I&apos;m shopping.  I&apos;d love to have a clear option for upgrades, instead of these sketchy schemes we have now for updating my SonyEricsson: mail-in-your-phone, or the buy credits, run this software, and hope it doesn&apos;t destroy your phone, and still not really have any clear guarantees as to what it&apos;ll accomplish for you.&lt;/p&gt;
&lt;p&gt;I&apos;m afraid to try a flash/unlock service for my phone, because I don&apos;t want to break it, and if I can&apos;t get the Java security completely unlocked, I don&apos;t want to lose that one set of certificates that does allow some software to access priveleged services.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ZapReader
            </title>
            <link>
                https://www.hjsoft.com/blog/ZapReader.html
            </link>
            <pubDate>Thu, 24 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ZapReader.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently discovered &lt;a href = &quot;http://zapreader.com/&quot;&gt;ZapReader&lt;/a&gt; tracking through some links on &lt;a href = &quot;http://www.lifehacker.com/&quot;&gt;LifeHacker&lt;/a&gt;.  It&apos;s a speed reading assistant that flashes words of the text at you at a certain rate.  Seeing one word at a time didn&apos;t seem like a good idea, since I had always tried to read in phrases in my previous speed reading attempts.  Fortunately, ZapReader lets you configure the number of words it shows you at a time, so I set it to 4 words at 600wpm, and I&apos;ve found I can just barely keep up.  That actually doesn&apos;t feel too bad.  I&apos;d love to see the thing be able to break on phrases more intelligently than just word count.&lt;/p&gt;
&lt;p&gt;My biggest problem has always been subvocalization -- I have so much trouble getting the little voice in my head to go away.  This tool may help with that, and hopefully the habit will go away for printed text as well.&lt;/p&gt;
&lt;p&gt;I&apos;ve added the little &lt;a href = &quot;http://www.zapreader.com/tools.php&quot;&gt;ZapRead&lt;/a&gt; bookmarklet to my FireFox link bar, so I can select any text and have it &quot;Zapped&quot; at me.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                30 Minutes with NetBeans 5.0
            </title>
            <link>
                https://www.hjsoft.com/blog/30_Minutes_with_NetBeans_50.html
            </link>
            <pubDate>Wed, 23 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/30_Minutes_with_NetBeans_50.html
            </guid>
            <description>
                &lt;p&gt;I guess all the NetBeans talk at &lt;a href = &quot;http://www.javaposse.com/&quot;&gt;JavaPosse&lt;/a&gt; finally sunk into my head, because I just downloaded NetBeans 5.0 to play with it.  The interface seems pleasantly minimal, and I got my current project set up with Ant builds and everything in a very short time.  That part was much easier than it was with Eclipse.&lt;/p&gt;
&lt;p&gt;Then I started trying to work and found the source formatting to be just what I like, which is good, because it didn&apos;t give me many options to change it.  The &quot;format code&quot; option seems to just  be a &quot;correct indentation&quot; feature, which does keep it from doing some of the horrible things that Eclipse does (preferring to wrap on &apos;.&apos;, etc).&lt;/p&gt;
&lt;p&gt;I unfortunately hit a huge bump in the road when I extracted a method, changed the new method,  then found that there&apos;s no &quot;inline method/variable&quot; option!  That&apos;s a feature planned for a future release.  I couldn&apos;t find any release notes on the web telling me it was in the 5.5 beta.  Extract and inline are my main tools when I&apos;m cleaning up and massaging code.&lt;/p&gt;
&lt;p&gt;People say &quot;use the right tool for the job&quot;, so it seems that Eclipse will remain my &lt;em&gt;refactoring&lt;/em&gt; tool.  I figure I can still use NetBeans for one of its most favorite features -- GUI building.&lt;/p&gt;
&lt;p&gt;I started drawing a little bit of a JFrame in Matisse, and then looked at the code with all its warnings not to edit it.  I know I should be able to properly modularize my application in such a way that I&apos;d not have to edit the form, but I&apos;m just not sold on that yet.  Additionally, I don&apos;t actually do Swing GUIs, and I&apos;m not ready to take the JSF plunge over WebWork 2 / Struts yet.&lt;/p&gt;
&lt;p&gt;I guess I&apos;ll leave NetBeans on the shelf a bit longer, though the features are getting more attractive.  It&apos;s getting closer to what I&apos;d want with every release.  It&apos;s easy Ant integration was the first thing that caught my eye years ago, and the prospect of easy VSS integration and GUI building are the latest features to stand out.  We&apos;ll see what 5.5 or 6.0 hold next time I get bored.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Latest Google Maps Mobile?
            </title>
            <link>
                https://www.hjsoft.com/blog/Latest_Google_Maps_Mobile.html
            </link>
            <pubDate>Tue, 22 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Latest_Google_Maps_Mobile.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://www.google.com/gmm/&quot;&gt;Google Maps Mobile&lt;/a&gt; page is so void of details that I can&apos;t tell what version number they&apos;ve released or even when they release them.  The client really should alert you when there&apos;s a new version.&lt;/p&gt;
&lt;p&gt;I&apos;ve just happened to stumble upon the latest (1.3.1) version, because I saw mention of the traffic feature which I did not have.  I wasn&apos;t positive of what version I was getting until I actually downloaded it to the phone.  I found a quick message buried in a Google Group about a new release, but nowhere &lt;em&gt;official&lt;/em&gt;, like the homepage for the thing.&lt;/p&gt;
&lt;p&gt;It really is my current killer app on my phone, and they keep making it better, but they need to market it a bit more effectively.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                30 Boxes Trial
            </title>
            <link>
                https://www.hjsoft.com/blog/30_Boxes_Trial.html
            </link>
            <pubDate>Wed, 16 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/30_Boxes_Trial.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.30boxes.com/&quot;&gt;30 Boxes&lt;/a&gt; recently released a &lt;a href = &quot;http://30boxes.com/blog/index.php/2006/08/09/30boxes-mobile-m30boxescom/&quot;&gt;mobile version&lt;/a&gt;, so I thought I&apos;d look at it.  I&apos;ve been looking for a way to share scheduling with Claire in an accessible way.&lt;/p&gt;
&lt;p&gt;So far, I&apos;m not sure if it&apos;ll really work or not.  I can&apos;t figure out how to do a shared editable calendar -- Claire can&apos;t remove something I put onto my calendar.  You can only seem to view what others have scheduled or send invitations.  I could create another calendar with another shared login, but it would also require attaching it to its own email address.  That feels like it shouldn&apos;t be necessary. I&apos;m sure I&apos;ll figure it out.  I have a feeling that &lt;em&gt;tagging&lt;/em&gt; entries will probably be the key to simulating separate calendars.&lt;/p&gt;
&lt;p&gt;The mobile version is pretty quick and responsive.  Data entry on the phone is awkward.  I think some tuning of the field types could help.  (I&apos;m pretty sure you can do that in WAP.)  They also don&apos;t have your buddies&apos; calendars (the all important shared part) merged into your default calendar view.  I expect this&apos;ll come eventually.&lt;/p&gt;
&lt;p&gt;Google&apos;s calendar didn&apos;t seem to have a mobile interface, though I expect it could with the given success of their mobile maps application.  That&apos;s what kept me from looking too seriously at Google yet.&lt;/p&gt;
&lt;p&gt;Claire was pretty excited about 30 Boxes when she first looked at it.  She wants to use it to coordinate her business schedule with her business partner at the &lt;a href = &quot;http://www.k-prep.com/&quot;&gt;daycare&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (16 August 2006):&lt;/strong&gt;
Importing RSS and iCal feeds is sort of amusing in 30 Boxes.  I can import my weblog and websvn feeds to get an interesting perspective of posts and code commits.  Subscribing to iCal feeds of other calendars (instead of using the Buddy links) may prove useful, since it&apos;ll let me more tighly integrate Claire&apos;s calendar into my own. It seems that it will even make it visible by default in mobile view.  It still doesn&apos;t provide any shared editing capability though.  I&apos;ll have to keep poking around with that.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Real-time Radio Playlists
            </title>
            <link>
                https://www.hjsoft.com/blog/Real-time_Radio_Playlists.html
            </link>
            <pubDate>Mon, 7 Aug 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Real-time_Radio_Playlists.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://yes.com/&quot;&gt;Yes.com&lt;/a&gt; has a fun little toy showing song titles as they start playing on radio stations across the United States.  This is just intriguing to watch.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Clerks II
            </title>
            <link>
                https://www.hjsoft.com/blog/Clerks_II.html
            </link>
            <pubDate>Mon, 31 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Clerks_II.html
            </guid>
            <description>
                &lt;p&gt;Claire and I got out to see &lt;a href = &quot;http://www.imdb.com/title/tt0424345/&quot;&gt;Clerks II&lt;/a&gt; on Saturday.  It was pretty funny, but I had a bit of a headache, so that made parts feel a bit slow.&lt;/p&gt;
&lt;p&gt;I&apos;m not sure what I was expecting, but it wasn&apos;t quite as satisfying as I had hoped.  I guess these days, if I&apos;m going to devote some time to something, even a couple hours, it should be teaching me something or changing the way I think about a subject.  I&apos;m not sure.&lt;/p&gt;
&lt;p&gt;It was definitely better than &lt;em&gt;Jay and Silent Bob Strike Back&lt;/em&gt;.  Maybe some quotables and scenes will take hold in my brain, and I&apos;ll feel the movie was worth the exorbitant theater price.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Excessive Memory Usage
            </title>
            <link>
                https://www.hjsoft.com/blog/Excessive_Memory_Usage.html
            </link>
            <pubDate>Fri, 21 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Excessive_Memory_Usage.html
            </guid>
            <description>
                &lt;p&gt;My notebook seems to be hurting for more memory, but I&apos;m not sure what&apos;s causing it.  I can see memory usage of everything, but I don&apos;t know what the usages were previously.  I&apos;ve recently started working with Webwork and EJB3, but I do regular upgrades of everything else, so it could be anything.&lt;/p&gt;
&lt;p&gt;Between JBoss, latest Eclipse, Gnome, etc, the 512M is being eaten up.   Rhythmbox is pretty high on the list as well.  I&apos;m going to try dropping jPodder for a lighter podcatcher, hpodder, and see if it makes a difference.  It seems obscene to install more memory in a Linux notebook.  It&apos;s supposed to be all efficient, the savior of older hardware.&lt;/p&gt;
&lt;p&gt;Since I&apos;ve recently found that I can run JBoss out of PermGen space, I&apos;m afraid it&apos;s Webwork and/or EJB3.  This is going to be painful when I try to deploy my new application to the less-resourceful production server.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Oh The Tangled Logs We Weave
            </title>
            <link>
                https://www.hjsoft.com/blog/Oh_The_Tangled_Logs_We_Weave.html
            </link>
            <pubDate>Fri, 21 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Oh_The_Tangled_Logs_We_Weave.html
            </guid>
            <description>
                &lt;p&gt;My install of &lt;a href = &quot;http://blojsom.sf.net/&quot;&gt;Blojsom&lt;/a&gt; seems to have its own copy of log4j and properties.  I never recognized previously that all my logs from Blojsom were double-wrapped.  Blojsom spit them out to STDOUT, and JBoss routed STDOUT to server.log.&lt;/p&gt;
&lt;p&gt;This would definitely qualify as an unnecessary overhead on an already limited server.  I removed Blojsom&apos;s log4j jar and properties, and configured JBoss to limit Blojsom messages to INFO, so that should be a bit simpler.&lt;/p&gt;
&lt;p&gt;While I dug around in there, I also removed Blojsom&apos;s CompressionFilter from the web.xml, and cut the OSCache down to 100 objects, since there&apos;s not really many weblogs on the server.  I already have the Apache proxy doing compression.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Last.fm Running S-L-O-W-L-Y
            </title>
            <link>
                https://www.hjsoft.com/blog/Lastfm_Running_S-L-O-W-L-Y.html
            </link>
            <pubDate>Wed, 19 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Lastfm_Running_S-L-O-W-L-Y.html
            </guid>
            <description>
                &lt;p&gt;I added the cool little &lt;a href = &quot;http://www.last.fm/user/jflinchbaugh/&quot;&gt;last.fm&lt;/a&gt; playlist thing to my weblog, but it&apos;s been running really slowly for the past couple days -- that&apos;s why my site seems to load slowly.  Fortunately, my site renders quickly, so you can see the content right away, but the browser keeps spinning until that little javascript for the Recent Listening box finishes loading.  It wouldn&apos;t be that noticeable, but it holds up my form-prefilling in Firefox, so it takes an extra 10 seconds or whatever until my login form prefills, so I can login.&lt;/p&gt;
&lt;p&gt;I may need to add a button (and matching persisting cookie) to allow the user to turn off the last.fm playlist when it&apos;s running slowly.  I see there&apos;s an RSS feed for my recent tracks in my profile.  I may just need to teach the weblog code to consume and redisplay data from RSS.&lt;/p&gt;
&lt;p&gt;I really love this application otherwise. I can see my listening habits, get lots of info related to the artists, and see others&apos; recommendations.  I also think publishing my listening habits gives others an interesting little window into my soul too.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JavaPolis 2005 Podcasts
            </title>
            <link>
                https://www.hjsoft.com/blog/JavaPolis_2005_Podcasts.html
            </link>
            <pubDate>Wed, 19 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JavaPolis_2005_Podcasts.html
            </guid>
            <description>
                &lt;p&gt;It seems that many talks from the recent &lt;a href = &quot;http://www.javapolis.com/confluence/display/JP05/Home&quot;&gt;JavaPolis conference&lt;/a&gt; are now available online.  I&apos;ve downloaded a small pile, and will be listening for a day or so.  They have lots of big names in Java  talking about the latest technologies today, so it should be informative.  Check it out.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bluetooth is Dead, Long Live Bluetooth
            </title>
            <link>
                https://www.hjsoft.com/blog/Bluetooth_is_Dead_Long_Live_Bluetooth.html
            </link>
            <pubDate>Fri, 14 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bluetooth_is_Dead_Long_Live_Bluetooth.html
            </guid>
            <description>
                &lt;p&gt;It&apos;s funny to see articles today &lt;a href = &quot;http://blogs.zdnet.com/ITFacts/?p=11290&quot;&gt;exclaiming how 55 million bluetooth headsets&lt;/a&gt; will ship this year, when just 3 years ago, &lt;a href = &quot;http://www.eetimes.com/story/OEG20031013S0040&quot;&gt;everyone knew it was dead&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;ve been &lt;a href = &quot;http://www.hjsoft.com/blog/searchArticles.java?search=bluetooth&quot;&gt;using bluetooth&lt;/a&gt; for its mobile data networking since about the time of its death, and I really was concerned for a bit -- there weren&apos;t many bluetooth phones from which to choose, and the ones that did exist were considerably more expensive.  Today, it&apos;s much more common, since everyone wants the wireless hands-free kit.  My &lt;a href = &quot;http://www.prius.com/&quot;&gt;next car&lt;/a&gt; will probably have bluetooth as well.&lt;/p&gt;
&lt;p&gt;I&apos;m very pleased that the personal-area-network has finally become useful for the normal people.  Now I just hope that the manufacturers don&apos;t let the data side of the devices slip in favor of only supporting voice services, like some &lt;a href = &quot;http://www.verizonwireless.com/&quot;&gt;errant carriers&lt;/a&gt; try to do.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Xenophobia
            </title>
            <link>
                https://www.hjsoft.com/blog/Xenophobia.html
            </link>
            <pubDate>Fri, 7 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Xenophobia.html
            </guid>
            <description>
                &lt;p&gt;I have new neighbors in Cubeville, and for some irrational reason, I find these people quite disturbing.  It&apos;s the infiltration of new voices talking about non-tech on the &lt;em&gt;telephone&lt;/em&gt;.  I&apos;m accustomed only to the &lt;em&gt;tic&lt;/em&gt; and &lt;em&gt;tac&lt;/em&gt; of keyboards, and maybe a few voices which I&apos;ve already tuned out.&lt;/p&gt;
&lt;p&gt;Additionally, they&apos;ve clogged our hallways with behemoth filing cabinets presumably full of &lt;em&gt;paper&lt;/em&gt;.  They apparently didn&apos;t get the email recommending we just save documents on the computer and stop printing them.  Honestly, I have a grand total of maybe 30 sheets of paper littering my entire workspace.&lt;/p&gt;
&lt;p&gt;Lastly, I have no idea who Myron Cope is, and I don&apos;t know what makes his towel so terrible, except maybe that it&apos;s hanging from another invading filing cabinet and represents everything I don&apos;t understand, and therefore, fear.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                4AM Admin
            </title>
            <link>
                https://www.hjsoft.com/blog/4AM_Admin.html
            </link>
            <pubDate>Fri, 7 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/4AM_Admin.html
            </guid>
            <description>
                &lt;p&gt;4 AM is a good time for me to get things done, like implementing a long-overdue backup process for one of my servers.  I just don&apos;t get around to these things at other times of the day.&lt;/p&gt;
&lt;p&gt;Paige finds 4 AM to be the best time to eat Pop Tarts.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JavaOne Resources
            </title>
            <link>
                https://www.hjsoft.com/blog/JavaOne_Resources.html
            </link>
            <pubDate>Wed, 5 Jul 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JavaOne_Resources.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve just effectively added a huge number of entries to my list of articles to read.  Sun&apos;s put slides and transcripts for &lt;a href = &quot;http://developers.sun.com/learning/javaoneonline/&quot;&gt;all the JavaOne presentations&lt;/a&gt; online.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Time Spent Web Designing
            </title>
            <link>
                https://www.hjsoft.com/blog/Time_Spent_Web_Designing.html
            </link>
            <pubDate>Fri, 30 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Time_Spent_Web_Designing.html
            </guid>
            <description>
                &lt;p&gt;This &lt;a href = &quot;http://www.yatblog.com/2006/06/29/taking-a-closer-look-at-designing-a-website/&quot;&gt;graph &lt;/a&gt; looks about right.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux 2.6.17.2, We Barely Knew You
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_26172_We_Barely_Knew_You.html
            </link>
            <pubDate>Fri, 30 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_26172_We_Barely_Knew_You.html
            </guid>
            <description>
                &lt;p&gt;I had enough time to download, compile, and install the source for Linux 2.6.17.2 on 3 computers, but I&apos;ve not rebooted any of them yet.  Linux 2.6.17.3 is out.  Lather, Rinse, Repeat...&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eclipse 3.2 Soon
            </title>
            <link>
                https://www.hjsoft.com/blog/Eclipse_32_Soon.html
            </link>
            <pubDate>Fri, 30 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Eclipse_32_Soon.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been running Eclipse 3.2M6 for a while, but haven&apos;t felt like investing the time in installing M7, so I&apos;ve just been waiting.  I have tiny little nags with Eclipse, but nothing I&apos;d really bother mentioning.  I think I&apos;m in the software upgrade rat race just to see something new, and to see if it just does something slicker.  I&apos;d like to get my workstation and notebook synced up again with a shiny new version of Eclipse.&lt;/p&gt;
&lt;p&gt;For the rest of the day and probably tomorrow I&apos;ll be watching (reload, reload, reload...) the Eclipse website like one watches a shipping tracker for that new piece of hardware.  This odd anticipation also manifests as an obsession with clicking on every mention of 3.2 that I see on java.blogs and other Java news sites.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                OutOfMemoryError with WebWork
            </title>
            <link>
                https://www.hjsoft.com/blog/OutOfMemoryError_with_WebWork.html
            </link>
            <pubDate>Wed, 28 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/OutOfMemoryError_with_WebWork.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been working along at a fast enough clip now with WebWork that I&apos;ve touched off a long-standing class memory leak in &lt;em&gt;something&lt;/em&gt;.  JBoss tells me I&apos;m out of PermGen space after I repeatedly redeploy my WebWork application.  From online discussions, it seems to be well-known to exist somewhere between CGLIB, Spring, Hibernate, and Tomcat, but &lt;a href = &quot;http://www.nabble.com/java.lang.OutOfMemoryError:-PermGen-space-t1815206s2369.html&quot;&gt;everyone blames everyone else&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I wish I knew which component was causing it and knew how to eliminate that component.  I doubt it&apos;s Hibernate in my case, because I&apos;m only using Hibernate indirectly through the EJB3 persistence layer, and I&apos;m not actually redeploying the EJB side of the app when this happens.  If I understand correctly, WebWork&apos;s using Spring, which uses CGLIB.  WebWork apparently used to use another object factory instead of Spring, but I&apos;m not sure what it was or how to get back to that.  There&apos;s a nice &lt;code&gt;webwork.objectFactory&lt;/code&gt; property, but I&apos;ve found no evidence of it being setable to anything but &lt;code&gt;spring&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Until I figure it out, I guess I&apos;ll be restarting my development instance of JBoss periodically, and I&apos;ll just have to be careful about hot deploying to my production box when that day comes.  Fortunately, none of my current projects have had the benefit of reaching production quality recently.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Timex Helix WRKS after 2 Years
            </title>
            <link>
                https://www.hjsoft.com/blog/Timex_Helix_WRKS_after_2_Years.html
            </link>
            <pubDate>Wed, 28 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Timex_Helix_WRKS_after_2_Years.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve had my Timex Helix WRKS watch for well over 2 years now.  It&apos;s an interesting watch.  I use it mostly for time, but my next most popular function is the altimeter.&lt;/p&gt;

&lt;p&gt;I mostly watch the altimeter for drastic skews from what I know the altitude should be at work or home.  I can derive the weather from the change.  It&apos;s easier to remember 2 known altitudes and compare at a glance than to remember the previous barometer reading or to scroll back through the previously saved readings in the watch to establish a trend.  I still calibrate the altimeter 1000 ft high to avoid it getting stuck in &lt;code&gt;LO&lt;/code&gt; if the air pressure spikes.&lt;/p&gt;
&lt;p&gt;I use the compass and the timer on occassion, and the alarm tells me when to leave for work in the morning.&lt;/p&gt;
&lt;p&gt;I think I may have seen a low-battery indicator blink on for a moment, so I may need to soon replace that.  Even with all the extra instrumentation, the battery&apos;s outlasted the first watch band.&lt;/p&gt;
&lt;p&gt;In the end, though, the watch isn&apos;t as refined as it should be.  It provides lots of data, but lacks a convenient interface to it.  When the day comes to replace this watch, I think I&apos;ll try the High Gear Axis again.  (I don&apos;t actually see any reason to replace the Timex, yet though.)  I&apos;ve read that my issues with the 2 High Gear watches I previously owned have been resolved in newer revisions.  The Axis has a great interface with graphs, a unique method to attempt to compensate for altitude drift, and just showed more data on the screen at a time.  The Timex watch shows you surprisingly little on any one screen.  I like the a good console mode which shows me everything it can at once, so I don&apos;t need to switch around so much.  The crown interface to the Timex makes switching through modes as easy as it could be, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Still Love My S710a
            </title>
            <link>
                https://www.hjsoft.com/blog/Still_Love_My_S710a.html
            </link>
            <pubDate>Thu, 22 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Still_Love_My_S710a.html
            </guid>
            <description>
                &lt;p&gt;My SonyEricsson S710a is still my favorite phone out there.  I thought I&apos;d want the W600 to replace it, but I&apos;ve seen that phone in person now, and I just don&apos;t find it to be as good of a fit for my needs.  It has more memory, but doesn&apos;t have a removable media card, and the screen is smaller.&lt;/p&gt;
&lt;p&gt;The S710a just feels like more of a data device than a music device, which meets my needs.  My only remaining complaint with my S710a is the voice quality when the signal is low (in my house, unfortunately).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Irresponsible Generation
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Irresponsible_Generation.html
            </link>
            <pubDate>Wed, 21 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Irresponsible_Generation.html
            </guid>
            <description>
                &lt;p&gt;MySpace is being &lt;a href = &quot;http://www.theregister.co.uk/2006/06/20/myspace_sued&quot;&gt;sued for the sexual assault of a 14-year-old&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At no point in this kid&apos;s life was it ever safe to talk to strangers or invite them over to play tea party, no matter what the communication medium.  Additionally, she seems to have a parent who&apos;s there when it&apos;s time to litigate, so where was Mom when the pedophiles were chatting up the kid?&lt;/p&gt;
&lt;p&gt;So who do you think is the &quot;irresponsible generation&quot;?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ryan Gordon on FLOSS Weekly
            </title>
            <link>
                https://www.hjsoft.com/blog/Ryan_Gordon_on_FLOSS_Weekly.html
            </link>
            <pubDate>Mon, 19 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ryan_Gordon_on_FLOSS_Weekly.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://twit.tv/floss8&quot;&gt;FLOSS Weekly has an interview with Ryan Gordon&lt;/a&gt;, who&apos;s had a hand in porting many games to other platforms.  Along the way, he lead quite a bit of development in SDL, and most recently ported Google Earth to Linux.  It&apos;s a great piece, and now I&apos;m off to code my own version of Tetris again. :)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Echoes Presents Ministry of Inside Things
            </title>
            <link>
                https://www.hjsoft.com/blog/Echoes_Presents_Ministry_of_Inside_Things.html
            </link>
            <pubDate>Thu, 15 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Echoes_Presents_Ministry_of_Inside_Things.html
            </guid>
            <description>
                &lt;p&gt;Claire and I managed to get out for a bit without the kids.  We ran to &lt;a href = &quot;http://www.whitakercenter.org/&quot;&gt;Whitaker Center&lt;/a&gt; to see &lt;a href = &quot;http://www.echoes.org/&quot;&gt;Echoes&lt;/a&gt; bring &lt;a href = &quot;http://members.bellatlantic.net/~chuckv/moit.html&quot;&gt;Ministry of Inside Things&lt;/a&gt; to the stage.  &lt;a href = &quot;http://www.geocities.com/SunsetStrip/Frontrow/4877/index.html&quot;&gt;Orbital Decay&lt;/a&gt; (please excuse the link to a terrible website) opened the show.&lt;/p&gt;
&lt;p&gt;Both bands were (almost equally) good, though the music was very mellow, and each had their &lt;em&gt;&lt;a href = &quot;http://www.pinkfloyd.co.uk/dsotm/content/setup.html&quot;&gt;Dark Side of the Moon&lt;/a&gt;&lt;/em&gt; moments, which is fine.  I enjoyed the show greatly, and we got to meet John Diliberto.&lt;/p&gt;
&lt;p&gt;Having previously accompanied me to several raves over the years, Claire expected the music to be a bit faster.  There were quite a few songs that would build slowly, and there&apos;d be a point where you expect the rest of a huge techno track to materialize (ala &lt;a href = &quot;http://www.loopz.co.uk/&quot;&gt;Orbital&lt;/a&gt;, which Claire and I have had the pleasure of experiencing a couple years ago), but then you realize that was the climax of the song and we&apos;re on our way back down.&lt;/p&gt;
&lt;p&gt;After the show, we wandered out onto 2nd Street of Harrisburg to find the place crawling with people.  It reminded me a bit of South Street in Philadelphia.  It was great.  We&apos;ll have to try to get to Harrisburg more often.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Daily GizWiz on Set
            </title>
            <link>
                https://www.hjsoft.com/blog/Daily_GizWiz_on_Set.html
            </link>
            <pubDate>Fri, 9 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Daily_GizWiz_on_Set.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.dailygizwiz.com/&quot;&gt;Dick DeBartolo&lt;/a&gt; and Leo Laporte have been on the set of &lt;a href = &quot;http://www.callforhelptv.com/&quot;&gt;Call For Help&lt;/a&gt; this past week, and they&apos;ve been doing their podcasts from the set and from local restaurants in Toronto.  They really seem to be having fun, especially now that they&apos;re in the same city.  It sounds like they&apos;ve been running around the show set like mischievous children.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Musical History: My Bloody Valentine
            </title>
            <link>
                https://www.hjsoft.com/blog/Musical_History_My_Bloody_Valentine.html
            </link>
            <pubDate>Thu, 8 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Musical_History_My_Bloody_Valentine.html
            </guid>
            <description>
                &lt;p&gt;A week or so ago, I added the little &lt;a href = &quot;http://www.last.fm&quot;&gt;last.fm&lt;/a&gt; playlist to my weblog here, and today it&apos;s become my new hero.  I finally got back to listening to music after exhausting my extensive list of podcasts.  Rhythmbox feeds my list of songs to last.fm as I play them.&lt;/p&gt;
&lt;p&gt;I saw it pop up a link to the current &lt;a href = &quot;http://www.last.fm/music/Lush&quot;&gt;Lush&lt;/a&gt; song to which I was listening.  Surprisingly it had a little &lt;em&gt;listen&lt;/em&gt; speaker icon, so I clicked it and it started playing a clip of the song right there on my site.  Then I clicked off to see what else it had for the song, and found that others had tagged the song as &lt;a href = &quot;http://www.last.fm/tag/shoegaze&quot;&gt;&lt;em&gt;shoegaze&lt;/em&gt;&lt;/a&gt; music.  It&apos;s filled with lots of my favorite bands from back in the early 90&apos;s!  I followed that and found a thorough history of a pioneer in this music (and another personal favorite of mine), &lt;a href = &quot;http://www.last.fm/music/My+Bloody+Valentine/+wiki&quot;&gt;My Bloody Valentine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I used to just reload my site through the day to watch referrers and comments, but now I&apos;ll probably be using the last.fm list as well to educate myself about my music and explore similar sounds.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Large-Scale Real-World Computer Gaming
            </title>
            <link>
                https://www.hjsoft.com/blog/Large-Scale_Real-World_Computer_Gaming.html
            </link>
            <pubDate>Fri, 2 Jun 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Large-Scale_Real-World_Computer_Gaming.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve said it previously: &lt;a href = &quot;http://www.itconversations.com/&quot;&gt;IT Conversations&lt;/a&gt; is an amazing source of some really informative and inspiring content.  The people who produce their gaming content must have been busy a couple days ago.  In addition to the &lt;a href = &quot;http://www.hjsoft.com/blog/link/Steven_Berlin_Johnson_at_PopTech_2005&quot;&gt;Steven Johnson talk&lt;/a&gt;, they had a talk about &lt;a href = &quot;http://www.itconversations.com/shows/detail815.html&quot;&gt;large-scale, real-word gaming&lt;/a&gt; with Kevin Slavin of &lt;a href = &quot;http://playareacode.com/&quot;&gt;area/code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As of the time of this talk, they were touring a city-sized treasure hunting game called &lt;a href = &quot;http://homepages.nyu.edu/~dc788/conqwest/&quot;&gt;ConQwest&lt;/a&gt;.  They roll into each scheduled city, set up all their huge inflatable animal markers, install &lt;a href = &quot;http://www.semacode.org/&quot;&gt;semacodes&lt;/a&gt; (the treasure) in all sorts of visible and hidden places, test it, then start up the game.  It sounds like an amazing feat.  Players are issued camera phones and a few clues.  As they find the semacodes, they take its picture, MMS it to the game server, and the game server sends the player an SMS with more clues.&lt;/p&gt;
&lt;p&gt;It sounds like it would be as much fun to design, setup, and run as it would be to play.  They had done other big games as well, but ConQwest seemed to be their most technologically advanced so far.  With my penchant for server-side programming, and more recently mobile programming, I could really get into developing projects like this.  Who wants a new project? (As if I could afford the time for yet another project.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Steven Berlin Johnson at PopTech 2005
            </title>
            <link>
                https://www.hjsoft.com/blog/Steven_Berlin_Johnson_at_PopTech_2005.html
            </link>
            <pubDate>Wed, 31 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Steven_Berlin_Johnson_at_PopTech_2005.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.itconversations.com/index.html&quot;&gt;IT Conversations&lt;/a&gt; just published has &lt;a href = &quot;http://www.itconversations.com/shows/detail774.html&quot;&gt;Steven Berlin Johnson&apos;s talk at PopTech 2005&lt;/a&gt;.  He wrote the book, &lt;em&gt;Everything Bad is Good for You&lt;/em&gt; about intelligence, learning, and video games, which I&apos;ve &lt;a href = &quot;http://www.hjsoft.com/blog/link/Everything_Bad_is_Good_For_You&quot;&gt;mentioned a year ago&lt;/a&gt;.  I never did get around to reading this book, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TrackBack Spam
            </title>
            <link>
                https://www.hjsoft.com/blog/TrackBack_Spam.html
            </link>
            <pubDate>Tue, 30 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TrackBack_Spam.html
            </guid>
            <description>
                &lt;p&gt;TrackBack spam has been unbelievable over the past week.  I think I need to repurpose my Referrer Blacklist to serve as a blacklist for any 3rd-party content on this site: referrers, comments, or trackbacks.  I guess I&apos;ll be back struggling to get XDoclet behaving under Eclipse again so I can actually write and deploy some new weblog code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (5:00pm):&lt;/strong&gt;
I&apos;ve poked around a bit and added the ability to run comments (which are the underlying representation of my trackbacks) through the existing Referrer Blacklist.  I don&apos;t do the callback, since I can&apos;t necessarily expect the URL to point to a page with a link back to me.  The callback works really well for referrers though.  Now we&apos;ll see how well this works.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Promising News from Struts Action
            </title>
            <link>
                https://www.hjsoft.com/blog/Promising_News_from_Struts_Action.html
            </link>
            <pubDate>Tue, 23 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Promising_News_from_Struts_Action.html
            </guid>
            <description>
                &lt;p&gt;I just stumbled upon some &lt;a href = &quot;http://jroller.com/page/mrdon?entry=unification_struts_action_and_jsf&quot;&gt;promising news about Struts Action having JSF support&lt;/a&gt; from Don Brown.  I love that the configuration snippets immediately looked familiar from my recent WebWork experience.  I expected that choosing to study WebWork recently would mean I&apos;d be ignoring JSF, but that doesn&apos;t seem to be the case now.&lt;/p&gt;
&lt;p&gt;I&apos;ll continue with WebWork now, and when this new stuff matures, I&apos;ll look at transitioning.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cingular Secrets
            </title>
            <link>
                https://www.hjsoft.com/blog/Cingular_Secrets.html
            </link>
            <pubDate>Wed, 17 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cingular_Secrets.html
            </guid>
            <description>
                &lt;p&gt;I just discovered that cingularme.com is not only a mail-to-sms gateway, but also an entire &lt;a href = &quot;http://www.cingularme.com/&quot;&gt;website&lt;/a&gt;.  It allows Cingular users to customize the gateway service including: creating aliases, blocking certain types of messages, configuring message chunking, and even spam filtering.  It also includes helpful tips like replying with &quot;block&quot; from the handset to block future messages from that sender.&lt;/p&gt;
&lt;p&gt;I don&apos;t know why I never found this previously. I wonder what other neat features they have out there that they&apos;ve not mentioned.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Athlon 64 X2 Server
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Athlon_64_X2_Server.html
            </link>
            <pubDate>Mon, 15 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Athlon_64_X2_Server.html
            </guid>
            <description>
                &lt;p&gt;I built my new server over a week ago, and did a Debian testing AMD64 install on it.  It took 3 tries and a couple days of screwing around, but I finally found that I had to tell the BIOS that I had a PNP-aware OS to get the Adaptec 19160 SCSI card to boot GRUB.&lt;/p&gt;
&lt;p&gt;It&apos;s an Asus A8N-SLI Premium board with an Athlon 64 X2 3800+ dual-core processor, 1G dual-channel RAM (400MHz), and a random cheap MSI Radeon X300 PCI Express x16 video card.  I just kept my old SCSI drives for now, but I&apos;ll probably try SATA drives for any new drives, since they&apos;re so cheap.  The oddest part of the machine is the new 620W OCZ power supply which has a shiny mirror-like finish and glows blue -- it&apos;s a shame I have a normal opaque case.&lt;/p&gt;
&lt;p&gt;It builds and fully-packaged a Debian kernel in 15 minutes, but it seems to only want to build 64-bit kernels right now.  I may need to build a 32-bit chroot to run kernel compiles for other machines, openoffice, and firefox with plugins.  Java 5.0 for Linux/AMD64 doesn&apos;t come with the Java plugin for some reason, and Flash is only available in 32-bit as well.  I haven&apos;t taken the time to figure that out yet.&lt;/p&gt;
&lt;p&gt;The motherboard and processor have interesting power-saving features like a notebook would, such as scalable CPU frequency and variable fan speeds.  The processor can often run at half speed (1000MHz), so every time I&apos;ve touched the CPU heatsink, it&apos;s been cold.&lt;/p&gt;
&lt;p&gt;I&apos;m slowly migrating files and services over to the new server.  My current task is to get my galleries restored to it.  Many of the other non-disk-instensive services will remain out at the VPS, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Pleased with Rhythmbox 0.9.4.1
            </title>
            <link>
                https://www.hjsoft.com/blog/Pleased_with_Rhythmbox_0941.html
            </link>
            <pubDate>Fri, 12 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Pleased_with_Rhythmbox_0941.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.gnome.org/projects/rhythmbox&quot;&gt;Rhythmbox 0.9.4.1&lt;/a&gt; recently hit &lt;a href = &quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; Sid, and I think it&apos;s addressed all my concerns.&lt;/p&gt;
&lt;p&gt;Manipulating the top of the Play Queue no longer loses tracks (and eventually &lt;a href = &quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=364733&quot;&gt;crashes&lt;/a&gt;).  Additionally, they&apos;ve added a criteria for building automatic playlists which evaluates the &lt;em&gt;path&lt;/em&gt;.  Since I&apos;ve already organized my audio files by directory, this allows me to much more simply build a playlist based on my previous organization.  Nice!  Now I just wish they&apos;d optionally show me the path in the list, so I can use that to identify files which lack proper tags.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Debian Testing Net Install on Acer Sempron 3100+
            </title>
            <link>
                https://www.hjsoft.com/blog/Debian_Testing_Net_Install_on_Acer_Sempron_3100.html
            </link>
            <pubDate>Wed, 10 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Debian_Testing_Net_Install_on_Acer_Sempron_3100.html
            </guid>
            <description>
                &lt;p&gt;I bought an Acer Sempron 3100+ from NewEgg for &lt;a href = &quot;http://www.k-prep.com/&quot;&gt;K-Prep&lt;/a&gt;, and they&apos;ll be using Debian Linux on it to save on software licensing.  Gnucash only runs on Linux as well.&lt;/p&gt;
&lt;p&gt;The Net Install CD from Debian Etch worked great!  I had it up and running within a couple hours.  Video, network card, sound, and even the SATA drive worked right out of the box.  I&apos;ve not tested the DVD burner yet, but I&apos;m confident it&apos;ll work just fine.  The machine has a multi-card reader in place of a floppy drive, and I was surprised to find that to work be working nicely out of the box as well.  Something in Gnome, maybe &lt;code&gt;hald&lt;/code&gt;, can see when I stick in a card and automatically puts it on the desktop and offers to import the photos -- pretty nice.  I have to figure out how to do that on my other machines, since it seems much slicker than autofs I had been using.&lt;/p&gt;
&lt;p&gt;It&apos;s been running &lt;em&gt;FAST&lt;/em&gt; too.  I compiled and packaged a custom kernel with Debian&apos;s kernel-package in about 25 minutes.  That&apos;s about how fast my old dual Athlon 1800+ did it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Book: Beginning J2ME
            </title>
            <link>
                https://www.hjsoft.com/blog/Book_Beginning_J2ME.html
            </link>
            <pubDate>Wed, 10 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Book_Beginning_J2ME.html
            </guid>
            <description>
                &lt;p&gt;A couple months ago, I bought an electronic copy of Sing Li&apos;s and Jonathan Knudsen&apos;s &lt;em&gt;&lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=426&quot;&gt;Beginning J2ME: From Novice to Professional&lt;/a&gt;&lt;/em&gt; from Apress.  I had already started learning this stuff from online documents, articles, and API JavaDocs, but now I really wanted examples of design and architecture of a Java ME application.  This book helped fill in those gaps for me and lead me down a more confident path with my current application.&lt;/p&gt;
&lt;p&gt;This was another one of those books that I almost skipped entire chapters.  I very quickly skimmed through most of the last half of the book: files, OBEX, bluetooth, Game API, 3D graphics, messaging, MMAPI, and encryption.  I&apos;ve just not needed these abilities yet, but I know just where to find them when I do.  Some of these APIs are also disabled on my phone until I pay for a certificate and start signing applications.&lt;/p&gt;
&lt;p&gt;To limit my scope even further, my current application that I&apos;m developing is only using MIDP 1.0, though I&apos;m pretty sure I&apos;ll be moving on to MIDP 2.0 next, since this book showed me how much easier it can be.  I&apos;m pretty sure this book will be useful to me for the next several applications I develop as I get into using these newer APIs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;*Apress ebooks are great -- I Paypalled my $20 to them and moments later downloaded it.  Instant gratification with no shipping and no searching book stores.  That&apos;s good, because &lt;a href = &quot;http://www.hjsoft.com/blog/link/No_Java_ME_Books_at_Borders&quot;&gt;Java ME books are hard to find&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Let the Battery Die and Lose Your Email Settings
            </title>
            <link>
                https://www.hjsoft.com/blog/Let_the_Battery_Die_and_Lose_Your_Email_Settings.html
            </link>
            <pubDate>Wed, 10 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Let_the_Battery_Die_and_Lose_Your_Email_Settings.html
            </guid>
            <description>
                &lt;p&gt;It seems that letting the battery die on my Sony Ericsson S710a is a bad idea.  It doesn&apos;t happen often, but when it does, it can be a problem.  I have the phone checking a POP3 account every 5 minutes.  I think it was probably actively checking when the battery gave up on 2 seperate occassions.&lt;/p&gt;
&lt;p&gt;When I power the phone back on, that primary email account is corrupted in that the settings are mostly blank, and I cannot get it to save the settings back.  I end up needing to delete the account and completely recreating it from scratch.  I think I&apos;ll be more careful about the battery, since tapping out all those settings on the keypad is time-consuming, and it sometimes takes me a day to realize that the email hasn&apos;t been checking.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Opera Mini 2.0
            </title>
            <link>
                https://www.hjsoft.com/blog/Opera_Mini_20.html
            </link>
            <pubDate>Mon, 8 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Opera_Mini_20.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://mini.opera.com&quot;&gt;Opera Mini 2.0&lt;/a&gt; is out, and it works pretty nicely on my S710a.  It looked good on Doug&apos;s T616 as well.  It&apos;s contending with Google Local for Mobile as my favorite application on my phone.&lt;/p&gt;
&lt;p&gt;The user interface has improved a bit -- the scrolling page history thing is just interesting, but the ability to fire off the platform web browser to download and save files is very welcome.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Replacement Server Specs
            </title>
            <link>
                https://www.hjsoft.com/blog/Replacement_Server_Specs.html
            </link>
            <pubDate>Wed, 3 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Replacement_Server_Specs.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve put together a &lt;a href = &quot;http://del.icio.us/jflinchbaugh/NewComputer&quot;&gt;shopping list&lt;/a&gt; for the new server.  I think it&apos;s conservative, but should serve my purposes for years.  In addition to the stuff on my list, I have an old Adaptec U160/Fast SCSI card on the way.  I&apos;ll be reusing the old case, SCSI drives, a NIC, and the DVD drive.  That should about do it.  Now I just need to convince myself to spend the money.  I thank Erik for helping bring me up to speed on today&apos;s tech and helping me spec what should be a very solid machine (because I never want to build another computer).&lt;/p&gt;
&lt;p&gt;It&apos;ll mostly be a firewall, remote Gnome desktop, print server, Gallery server, video editing workstation, file server, and maybe my beta Java application server.  I think I&apos;ll leave most my real services running out at the VPS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (3 May 2006):&lt;/strong&gt;
Well, the new server pieces are ordered along with an Acer Sempron 3100 workstation for the &lt;a href = &quot;http://www.k-prep.com/&quot;&gt;K-Prep Learning Center&lt;/a&gt; office.&lt;/p&gt;
&lt;p&gt;I had hoped to test the Adaptec 19160 SCSI card tonight in the old Pentium 200 which I&apos;m currently using as a firewall, but it&apos;s taking forever and a day to build a new kernel with support for the card.  Migrating the old server install from i386 to amd64 should be interesting.  I&apos;m still not sure how I&apos;m going to do that.  I fear it may take a reinstall.  Fortunately, I don&apos;t need to hurry with it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Dead Server
            </title>
            <link>
                https://www.hjsoft.com/blog/Dead_Server.html
            </link>
            <pubDate>Mon, 1 May 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Dead_Server.html
            </guid>
            <description>
                &lt;p&gt;My home server which hosted most of my Java sites crashed a couple times last week then just decided to stop booting after a while.  My theory is that it&apos;s a victim of nearly 4 years of thermal abuse -- a dual athlon in a room that could sometimes reach 80 degrees fahrenheit or above in these transitional months between winter and air-conditioned summer.&lt;/p&gt;
&lt;p&gt;I emailed &lt;a href = &quot;http://www.rimuhosting.com&quot;&gt;Rimu Hosting&lt;/a&gt; and had them beef up my VPS I have with them, and I moved most everything out there over the couple days that followed.  Everything seems to be running nicely out there, so now I must question how much of a server I really need here in the house.  While planning my next server, I&apos;ve had to drop back to the trusty 10-year-old p5-200 to serve as the firewall.&lt;/p&gt;
&lt;p&gt;All in all, crashing servers and emergency migrations are quite stressful and distracting from the normal daily activities, but it&apos;s affording me the opportunity to do some things I should have done a while ago.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (26 April 2006):&lt;/strong&gt;
I may miss my old serve a bit.&lt;/p&gt;
&lt;table style = &quot;background: white;&quot;&gt;
&lt;caption&gt;Times to build kernel packages for Debian&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Dead Server&lt;/th&gt;
&lt;td&gt;25 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;ThinkPad R40&lt;/th&gt;
&lt;td&gt;50 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;VPS&lt;/th&gt;
&lt;td&gt;120 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

            </description>
            
        </item>
        <item>
            <title>
                Trusting Web 2.0
            </title>
            <link>
                https://www.hjsoft.com/blog/Trusting_Web_20.html
            </link>
            <pubDate>Wed, 12 Apr 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Trusting_Web_20.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been watching lots of news about Web 2.0 -- integrated, online, social services.  There are so many interesting new services out there for shared calendaring, photo storage, bookmarking, whatever.&lt;/p&gt;
&lt;p&gt;I love the idea of being able to share some of my data, but I don&apos;t love the idea of having that data only exist out on someone else&apos;s centralized server.  I&apos;ve reluctantly been using &lt;a href = &quot;http://del.icio.us/&quot;&gt;del.icio.us&lt;/a&gt; to share my bookmarks between workstations, notebooks, and my phone, but I have no backup plan when del.icio.us goes down.  If these services go away, I&apos;ve lost all my data, and that&apos;s the concern I have with all of these services.  I could have my calendar at one of these cool new services, and Claire ad I could use it to synchronize schedules, but what if I don&apos;t have internet access or the service provider just goes away or closes up shop?&lt;/p&gt;
&lt;p&gt;I&apos;d be much more comfortable with a more distributed approach where I can run the components on my own server, house my own data, and have it communicate with other nodes.  Large-scale providers could still run these services for all the normal people, while other organizations or individuals could run their own -- big weblog hosting services and individuals running Blojsom can still communicate.&lt;/p&gt;
&lt;p&gt;Distribution also allows for better scalability and isolation of failure.  That&apos;s why I run my own web servers, mail servers, weblogs, photo galleries, jabber server, etc, and they all inter-connect with the rest of the world&apos;s servers -- I am on a well-connected island and master of my own data!  If del.icio.us could distribute to personal servers, I&apos;d definitely be running a node.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://www.riya.com/&quot;&gt;Riya&lt;/a&gt; is the latest Web 2.0 application to pique my interests.  They apply face recognition to photos to help you automatically tag images with people&apos;s names as you upload the image.  That would be amazingly useful, and I want it as a component to integrate into my photo gallery.  I guess the key to winning my approval is publishing an API and making your service available statelessly to operate on data anywhere on the web.  Google Maps is a good example of this -- I can provide the location data, and they just map it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                IT Conversations Podcasts
            </title>
            <link>
                https://www.hjsoft.com/blog/IT_Conversations_Podcasts.html
            </link>
            <pubDate>Wed, 5 Apr 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/IT_Conversations_Podcasts.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently discovered the &lt;a href = &quot;http://www.itconversations.com/index.html&quot;&gt;IT Conversations&lt;/a&gt; podcast feed.  It&apos;s a network of podcasts on various topics. It includes some news, but the most interesting parts I&apos;ve found so far have been lectures and keynotes from conferences.  The content is amazing!  It&apos;s almost as good as being able to attend these speeches.&lt;/p&gt;
&lt;p&gt;I&apos;m currently listening to an excellent lecture with &lt;a href = &quot;http://www.itconversations.com/shows/detail770.html&quot;&gt;Oded Shenkar&lt;/a&gt; speaking about the growth of the Chinese economy.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Starting with WebWork
            </title>
            <link>
                https://www.hjsoft.com/blog/Starting_with_WebWork.html
            </link>
            <pubDate>Mon, 3 Apr 2006 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Starting_with_WebWork.html
            </guid>
            <description>
                &lt;p&gt;I started looking over &lt;a href = &quot;http://struts.apache.org/struts-shale/index.html&quot;&gt;Struts Shale&lt;/a&gt;, but something about &lt;a href = &quot;http://www.opensymphony.com/webwork/&quot;&gt;WebWork&lt;/a&gt; is instead attracting my attention.  I think the promise of Struts Action 2 being based on WebWork and its familiarity over the new JSF paradigm is what&apos;s making me swing that direction.&lt;/p&gt;
&lt;p&gt;I admit that it may be more progressive to look toward JSF, but I&apos;m just putting it off at this point.  Maybe a few stumbles with WebWork will send me back to explore JSF.&lt;/p&gt;
&lt;p&gt;Only one conclusion can be derived at this point:  I&apos;ll eternally spend more time studying a framework than productively coding on an older familiar framework.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Abandon Struts for Something (Anything?) Else?
            </title>
            <link>
                https://www.hjsoft.com/blog/Abandon_Struts_for_Something_Anything_Else.html
            </link>
            <pubDate>Thu, 30 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Abandon_Struts_for_Something_Anything_Else.html
            </guid>
            <description>
                &lt;p&gt;Quite some time ago, I &lt;a href = &quot;http://www.hjsoft.com/blog/link/5_Months_of_Blog_Code_Development&quot;&gt;reimplemented all the code in this blog as chains of actions on top of Apache Struts&lt;/a&gt;.  I did this anticipating new capabilities of Struts 1.3 based on commons-chain -- I figured my architecture would be close, and I could adjust easily.&lt;/p&gt;
&lt;p&gt;My application became one big Struts Action class which served as the reused implementation for each configured action, and it just chooses and runs a chain based on the name.  I figured my stand-alone chain catalog would be merged into the 1.3 version of the &lt;code&gt;struts-config.xml&lt;/code&gt; when that came along, so the duplication of the chain name as a Struts action and a chain name didn&apos;t bother me too much at the time. Struts is left parsing my form input and usually mapping my JSP destinations after an execution chain has completed.  It also does some UI work rendering forms and building real URLs from logical action names.  I use Tiles to template the layout, but that can be had as a separate component these days, so I don&apos;t think I can attribute that to Struts anymore.  It doesn&apos;t sound like my current version of Struts is doing all that much for me anymore, and I have a suspicion that I could find or code these little bits on their own and drop the Struts dependency entirely.&lt;/p&gt;

&lt;p&gt;Dropping Struts (and web frameworks entirely) for my next project sounds like a rash decision, so let&apos;s look where I could go from here:&lt;/p&gt;
&lt;p&gt;The Struts 1.2.x series seems to have stagnated with just minor bug fixes, but still no built-in chaining, so my next project would need to retain much of my existing custom architecture and the duplication of configurations -- that just doesn&apos;t feel like progress.&lt;/p&gt;
&lt;p&gt;At this point, the Struts development path shatters into lots of confusing little incubating subprojects, none of which ready for any release   more official than a nightly build.  I&apos;ve not really been able to wrap my head around any of them, so my following synopses will probably just serve to demonstrate my confusion.&lt;/p&gt;
&lt;p&gt;My coding style had led me to chaining actions, and the promise of Struts 1.3 with commons-chain integrated made that look like a straight-forward step.  &lt;em&gt;BUT....&lt;/em&gt; Last I&apos;ve heard, Struts 1.3 will never see a release, so I&apos;ll never see the &quot;just Struts plus chaining&quot; version for which I coded.  I expect the chaining paradigm will still be incorporated somewhere in newer versions of Struts.&lt;/p&gt;
&lt;p&gt;The Struts Shale project mainly integrates &lt;abbr title = &quot;Java Server Faces&quot;&gt;JSF&lt;/abbr&gt; with Struts.  What incarnation of Struts? I don&apos;t know.  I&apos;ve only recently downloaded a nightly build to evaluate it, and I have a lot to learn to grasp the JSF side of the project.  JSF has a reputation of ugliness when done by hand outside  of the NetBeans IDE and the Matisse GUI builder, and I&apos;m just not ready to enslave myself to any one set of tools yet.  Considering that I&apos;ve actually downloaded and installed some Shale test applications and framework, I must be strongly considering this approach.  I think I&apos;d like to make this my opportunity to study JSF.&lt;/p&gt;
&lt;p&gt;In another direction, there are reportedly efforts underway to &lt;a href = &quot;http://www.indicthreads.com/interviews/415/struts_action_framework_2_webwork.html&quot;&gt;integrate WebWork into Struts&lt;/a&gt; -- Struts Action Framework 2.0.  It sounds like WebWork has been a popular alternative to Struts.  Months and months ago, I had always heard it touted as the solution to my Struts frustrations (like no built-in chaining).  This sounds like it could be worth exploring and closer to that which I&apos;m already accustomed, but I don&apos;t expect to see this code released any time soon!  I&apos;m tempted to just jump to WebWork alone, since I&apos;ll need to pretty much relearn everything anyway, but its impending integration into Struts quickly puts it onto the list of &lt;em&gt;dying projects&lt;/em&gt;.  Will WebWork experience benefit me if the Struts world actually solidifies again?&lt;/p&gt;
&lt;p&gt;It feels to me that the Struts world has ripped itself into too many directions and plunged off the progressive scene while several people try to reinvent it.  What is &lt;em&gt;&quot;Struts&quot;&lt;/em&gt; going to mean on job descriptions and resumes?  It would have been better if &lt;em&gt;any&lt;/em&gt; of these subprojects had been finished and released (maybe Struts 1.3) to hold our attention before everyone disappeared underground.  The only thing they left us was a very stale-tasting Struts 1.2.x tree.&lt;/p&gt;
&lt;p&gt;If these subprojects do manage to successfully reemerge from incubation (which gives me a bit of doubt), they&apos;ll all end up battling each other for mind share of developers.  They may also find that another framework has already eaten their lunch.&lt;/p&gt;
&lt;p&gt;So now I ask: what frameworks are thriving in Struts&apos; absence?  I&apos;d like to know what to study.  Is it plain old JSF?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                MIDP 1.0 in EclipseME 1.5.0
            </title>
            <link>
                https://www.hjsoft.com/blog/MIDP_10_in_EclipseME_150.html
            </link>
            <pubDate>Thu, 23 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/MIDP_10_in_EclipseME_150.html
            </guid>
            <description>
                &lt;p&gt;Yesterday, I was having &lt;a href = &quot;http://www.hjsoft.com/blog/link/Difficulty_with_EclipseME_150__WTK_22&quot;&gt;trouble getting MIDP 1.0 going on EclipseME&lt;/a&gt;.  My steps to getting it working were pretty rough, but Craig Setera responded to my mailing list inquiries with a more straight-forward approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;em&gt;J2ME Device Management Preferences&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Duplicate the device which most closely matches what you want, such as &lt;em&gt;DefaultColorPhone&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Edit the new device&lt;/li&gt;
&lt;li&gt;Edit the Device Name to something more recognizable, like &lt;em&gt;DefaultColorPhone MIDP1.0/CLDC1.0&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Edit the &lt;em&gt;Launch Command Template&lt;/em&gt; to hardcode a device name that the WTK will accept, instead of the new device name: &lt;code&gt;-Xdevice:%device%&lt;/code&gt; becomes &lt;code&gt;-Xdevice:DefaultColorPhone&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Switch to the &lt;em&gt;Libraries&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Add the jars for the older specs:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cldcapi10.jar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;midpapi10.jar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wma11.jar&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Remove the jars for the newer specs:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cldcapi11.jar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;midpapi20.jar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wma20.jar&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Save the changes to the preferences.&lt;/li&gt;
&lt;li&gt;Restart Eclipse. This seemed necessary to get the Launch Command reloaded.&lt;/li&gt;
&lt;li&gt;Edit your project properties, and switch to the new device profile.&lt;/li&gt;
&lt;li&gt;Rebuild project.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, I was happily up and running again.&lt;/p&gt;
&lt;p&gt;On a side note: I was working in a new workspace to test this, so I had to do a fresh checkout of my project from SVN and create a J2ME Midlet Suite project from it.  This process had been very painful in much older versions of EclipseME and Subclipse.  I was never sure which package was causing the errors, but today, it works just fine.  I&apos;m pleased, because getting another person&apos;s enviroment setup won&apos;t take the hand-holding and black magic it once did.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Difficulty with EclipseME 1.5.0 / WTK 2.2
            </title>
            <link>
                https://www.hjsoft.com/blog/Difficulty_with_EclipseME_150__WTK_22.html
            </link>
            <pubDate>Wed, 22 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Difficulty_with_EclipseME_150__WTK_22.html
            </guid>
            <description>
                &lt;p&gt;As I&apos;m learning Java ME, I&apos;m currently sticking with MIDP 1.0/CLDC 1.0 -- it&apos;s a bit for the challenge, and more for wider compatibility with older hardware.
&lt;a href = &quot;http://eclipseme.org/blog/2006/03/18/version-150-released/&quot;&gt;EclipseME 1.5.0&lt;/a&gt; was recently released, and upon upgrading, I found that it did away with the old way of picking your profile and configuration, and now you pick it by device profile provided by your Wireless Toolkit.  I&apos;m using Sun&apos;s WTK 2.2, so it provides 4 device profiles, but they&apos;re all MIDP 2.0/CLDC 1.1, so my code won&apos;t preverify, because it can&apos;t seem to figure out to switch back to the older spec.&lt;/p&gt;
&lt;p&gt;I ended up needing to manually create a new device profile to support the older specifications.  I duplicated the &lt;em&gt;DefaultColorPhone&lt;/em&gt; and called it &lt;em&gt;DefaultColorPhone MIDP1.0/CLDC1.0&lt;/em&gt;, and then found that I couldn&apos;t really edit all the propertios of the profile through the user interface, so I closed down Eclipse, and edited the &lt;code&gt;workspace/.metadata/.plugins/eclipseme.core/devices.xml&lt;/code&gt; by hand.  I reverted the MIDP and CLDC versions, adjusted classpaths, and changed the launch command to hardcode &lt;em&gt;DefaultColorPhone&lt;/em&gt; as the device, since my new name caused the emulator to not  start.  &lt;span style = &quot;text-decoration: line-through&quot;&gt;Here&apos;s the &lt;a href = &quot;http://www.hjsoft.com/~glynis/devices.patch.txt&quot;&gt;patch&lt;/a&gt; representing the changes I made.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now I seem to be up and running.  I hope they can make this easier in the future versions of EclipseME.  There&apos;s also a distinct chance that someone on the mailing list can point me in the right direction, and I just did it the hard way.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                E-Card from Above
            </title>
            <link>
                https://www.hjsoft.com/blog/E-Card_from_Above.html
            </link>
            <pubDate>Tue, 21 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/E-Card_from_Above.html
            </guid>
            <description>
                &lt;p&gt;I got an email from the person who&apos;s quite near (if not) the top of our organization with an e-card AVI file attached.  Being a cynic, I had just assumed it was the latest email virus, and it managed to actually get through the filters, so I didn&apos;t dare open it, and just forwarded it along to our email administrators.  It turns out it was a real birthday card.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Hot and Spicy Good for You
            </title>
            <link>
                https://www.hjsoft.com/blog/Hot_and_Spicy_Good_for_You.html
            </link>
            <pubDate>Mon, 20 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Hot_and_Spicy_Good_for_You.html
            </guid>
            <description>
                &lt;p&gt;My spicy diet &lt;a href = &quot;http://www.sciencedaily.com/releases/2006/03/060319150754.htm&quot;&gt;may keep me healthier&lt;/a&gt;!  I always thought it had to be good for something.  I was more thinking of sweating off weight, but I&apos;ll take cancer fighting too.&lt;/p&gt;
&lt;p&gt;Sean recently helped feed my need for spicy food with some &lt;a href = &quot;http://extremefood.com/product.php?id=20&quot;&gt;Blair&apos;s Death Rain Habanero XXX Hot Potato Chips&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Choose POP3 over IMAP4 on S710a
            </title>
            <link>
                https://www.hjsoft.com/blog/Choose_POP3_over_IMAP4_on_S710a.html
            </link>
            <pubDate>Thu, 9 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Choose_POP3_over_IMAP4_on_S710a.html
            </guid>
            <description>
                &lt;p&gt;I had configured my phone to check email every 30 minutes or so via IMAP4.  I didn&apos;t have anything time-sensitive going there, but sometimes it would get hung up and I wouldn&apos;t get mail for hours.  The phone&apos;s email client seemed to get blocked trying to connect to the server.  The little GPRS world icon would just be stuck enabled.&lt;/p&gt;
&lt;p&gt;It sort of felt like a memory-leak kind of error where I could hit the &lt;em&gt;Back&lt;/em&gt; button to close the connection, but next time it would just get stuck again.  If I tried to &lt;em&gt;Send &amp;amp; Receive&lt;/em&gt; manually, it would get confused thinking it had a connection when it didn&apos;t and other odd behaviors.  At first, I had just resolved to cycle power, which sucked, obviously, but after a while, I found a few steps to get it sort of cleared up for a while: close connection, open browser or something else that could still use the connection properly, close that, check manually again, then it would work for a bit.  It would inevitably get blocked up again, though.  I ended up continually having to check it to ensure it was working.&lt;/p&gt;
&lt;p&gt;For kicks, I just switched it over to use POP3 instead, and it seems to be behaving much better now.  I bumped the interval to every 5 minutes, and I have yet to catch it stuck.  I guess it&apos;s just a simpler and more reliable part of the mail client.&lt;/p&gt;
&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; sort of strange to be stuck with a certain set of software like this.  On my computer, I&apos;d just go try another piece of software, but this can&apos;t be upgraded or replaced.  I&apos;d go try some Java mail clients, but the security model won&apos;t let me choose to allow a MIDlet to make socket connections.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                EJB 3.0 in JBoss
            </title>
            <link>
                https://www.hjsoft.com/blog/EJB_30_in_JBoss.html
            </link>
            <pubDate>Thu, 9 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/EJB_30_in_JBoss.html
            </guid>
            <description>
                &lt;p&gt;Since I&apos;m starting the Java EE side of a new personal project, I figured I&apos;d catch up on technology a bit and have a look at EJB 3.  I installed JBoss 4.0.4RC1 using the installer to get EJB 3 support installed.  The installer was all messed up on my Linux desktop -- mostly failing to repainting itself, but whatever.&lt;/p&gt;
&lt;p&gt;So far, I like using the new annotations to hook everything together, since I had been using xDoclet for everything previously.  Now I have much less to setup in my build environment to make it work.  I&apos;m using &lt;a href = &quot;http://del.icio.us/jflinchbaugh/j2ee&quot;&gt;some of these links&lt;/a&gt; to get started.  I really like the new persistence API so far, though manipulating collections seems a bit tricky.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Tom DeLay, Republican
            </title>
            <link>
                https://www.hjsoft.com/blog/Tom_DeLay_Republican.html
            </link>
            <pubDate>Wed, 8 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Tom_DeLay_Republican.html
            </guid>
            <description>
                &lt;p&gt;Tom DeLay will go on trial for a huge money laundering and campaign finance scandals related to Jack Abramoff, but he&apos;s still &lt;a href = &quot;http://www.washingtonpost.com/wp-dyn/content/article/2006/03/08/AR2006030800288.html&quot;&gt;the best Republican that Texas can dig up&lt;/a&gt;.  Nice.&lt;/p&gt;
&lt;p&gt;In other news, our beloved Senator Santorum &lt;a href = &quot;http://www.macon.com/mld/inquirer/news/local/states/pennsylvania/counties/montgomery_county/14042885.htm?source=rss&amp;amp;channel=inquirer_montgomery_county&quot;&gt;wrote the foreword&lt;/a&gt; for a book celebrating Phillip Johnson, the law professor (not a scientist?) considered to be the founder of Intelligent Design.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Protesting Military Recruitment
            </title>
            <link>
                https://www.hjsoft.com/blog/Protesting_Military_Recruitment.html
            </link>
            <pubDate>Wed, 8 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Protesting_Military_Recruitment.html
            </guid>
            <description>
                &lt;p&gt;The US Supreme Court ruled that &lt;a href = &quot;http://www.nytimes.com/2006/03/07/politics/politicsspecial1/07scotus.html?hp&amp;amp;ex=1141707600&amp;amp;en=f7cad6649f6d188d&amp;amp;ei=5094&amp;amp;partner=homepage&quot;&gt;law schools receiving federal money cannot deny military recruiters access and services on campus&lt;/a&gt;.  This includes services such as scheduling, email, and other communications.  Chief Justice Roberts went on to say that this only regulates conduct, not speech, so a school is still free to voice opposition to the military&apos;s discriminatory policies and even help students organize demonstrations.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=5248958&quot;&gt;NPR report&lt;/a&gt; I heard gave the example of posting protest signs right outside the room that they gave the recruiter. If they &lt;em&gt;are&lt;/em&gt; sending emails and posting flyers for the recruiters, I think they should be free to include their own footers on all communications disclaiming their endorsement of this organization&apos;s discriminatory nature as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Overcoming NFS Trouble with Mobility
            </title>
            <link>
                https://www.hjsoft.com/blog/Overcoming_NFS_Trouble_with_Mobility.html
            </link>
            <pubDate>Wed, 8 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Overcoming_NFS_Trouble_with_Mobility.html
            </guid>
            <description>
                &lt;p&gt;I have autofs setup to mount my backup server at home via NFS when requested, and an overnight cron job does just that to dump files while I&apos;m sleeping.  In the morning, it&apos;s done, but for some reason the automount doesn&apos;t timeout properly and unmount everything.  It just leaves the active NFS mounts.&lt;/p&gt;
&lt;p&gt;To work around this, I have a hibernate scriptlet which sends a SIGUSR to the automount process (a couple of times actually), and that should convince it to expire and unmount, but it doesn&apos;t always.  When the machine wakes up, the NFS mounts are still registered, but I&apos;m on a different network, and that backup server is far from accessible.  Attempts to unmount the shares just fail, &lt;code&gt;df&lt;/code&gt; blocks, and other tools, like &lt;code&gt;gnome-system-monitor&lt;/code&gt; (or whatever) block as well.  This usually left me stuck rebooting to make the mounts go away -- even trying to force an unmount didn&apos;t work.&lt;/p&gt;
&lt;p&gt;I found some maneuvers which do work to kill off these estranged mounts, though.  I convince the machine that the backup server is denying connections using &lt;code&gt;iptables&lt;/code&gt;, then a subsequent unmount request gives up trying to contact the server and removes the mounts:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;code&gt;
iptables -A OUTPUT -d 192.168.1.3 -j REJECT&lt;br/&gt;
umount -t nfs -a&lt;br/&gt;
umount -t nfs -a #twice for good measure&lt;br/&gt;
iptables -D OUTPUT -d 192.168.1.3 -j REJECT
&lt;/code&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have to do this too often, so I just made myself a little script I can run when the need arises.  Really, I wish I could get automount to behave properly and expire its mounts at timeout, so I don&apos;t have to hack around it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sony Wins
            </title>
            <link>
                https://www.hjsoft.com/blog/Sony_Wins.html
            </link>
            <pubDate>Mon, 6 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Sony_Wins.html
            </guid>
            <description>
                &lt;p&gt;Nearly a month ago, my Sony DRU-710A DVD burner started throwing media errors for any DVD I put into it, so the drive is obviously having issues.  It had been fine for over 6 months previously.  I hadn&apos;t changed anything in its host computer, but I still went and tried it in the big computer to see the same behavior.&lt;/p&gt;
&lt;p&gt;Sony tech support wouldn&apos;t entertain my complaints until I found a friend with a Windows 2000/XP computer and demonstrated the error there.  They suggested trying &lt;em&gt;approved&lt;/em&gt; media, which didn&apos;t work, but I was just hoping to make it work -- I thought maybe it had just started to slip out of tight spec, so better media might actually make a difference.&lt;/p&gt;
&lt;p&gt;It took 3 weeks and 3 times in friends&apos; computers conducting one small test after another to finally get them to admit that the drive may be broken.  I&apos;m not sure what I expected not having a Windows box to test, but it just felt terribly obstructed at every turn. I guess it&apos;s the cost of not paying the Microsoft tax (in license fee and disk space) on a computer I actually want to use.&lt;/p&gt;
&lt;p&gt;Further more, they now want me to fax a copy of the receipt, which I don&apos;t have anymore, since I deleted the scan I had when the rebate check came in the mail.  Even If I could find the receipt, when they see that the poorly-placed warranty seal sticker was ripped by my computer case during installation, they&apos;ll try to charge me for repair.  &lt;em&gt;I quit!&lt;/em&gt;  It&apos;s not worth my time anymore!&lt;/p&gt;
&lt;p&gt;I would have titled this article &lt;strong&gt;Sony Loses&lt;/strong&gt;, as in a customer, but really, I don&apos;t buy much of anything to matter.  I can&apos;t imagine they care.  It&apos;s apparently not really all that important to impress me -- It&apos;s more econimical to defend againsnt and deflect the user.&lt;/p&gt;
&lt;p&gt;Historically, I&apos;ve kept a pretty compartmentalized view of Sony.  As a long-time fan of Ericsson and Sony Ericsson phones, I&apos;ve ignored the antics of their media division (rootkits and DRM), and I didn&apos;t think I had reason to avoid their computer hardware.  Taking into account the difficulty of their storage tech support, the antics of their media division, and my &lt;a href = &quot;http://www.hjsoft.com/blog/link/S710a__Unsigned_Java_Midlets__Frustration&quot;&gt;dissatisfaction with trying to develop for my mobile phone&lt;/a&gt;, I may just need to stop buying Sony products completely.  I hate not being able to use my devices as I want, whether it&apos;s with my OS of choice or deciding what code to trust on my phone.&lt;/p&gt;
&lt;p&gt;Now I&apos;ll probably just rip the drive apart (since the warranty sticker&apos;s already broken) and see  if I can clean it and make it work. If not, I&apos;ll just go buy a new NEC for $50 found on Pricewatch.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Seiko Bluetooth Watch
            </title>
            <link>
                https://www.hjsoft.com/blog/Seiko_Bluetooth_Watch.html
            </link>
            <pubDate>Fri, 3 Mar 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Seiko_Bluetooth_Watch.html
            </guid>
            <description>
                &lt;p&gt;What&apos;s a &lt;a href = &quot;http://www.i4u.com/article5207.html&quot;&gt;bluetooth watch&lt;/a&gt; do?  It displays incoming phone calls and that sort of thing, but even more usefully, it warns you when you&apos;ve forgotten your phone.  That&apos;s great!  I could have used that today.  Of course, it probably also goes nuts when your phone dies, or you turn it off, but who does that?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ABC on my Drive to Work
            </title>
            <link>
                https://www.hjsoft.com/blog/ABC_on_my_Drive_to_Work.html
            </link>
            <pubDate>Thu, 16 Feb 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ABC_on_my_Drive_to_Work.html
            </guid>
            <description>
                &lt;p&gt;Everyday I drive past the Association of Builders and Contractors office near the highway, and my eye wanders to it as I remember how much &lt;a href = &quot;http://www.hjsoft.com/gallery/2005_ABC_Rodeo/DSC00284&quot;&gt;fun we had at their construction rodeo&lt;/a&gt; with my parents.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Batteries Plus
            </title>
            <link>
                https://www.hjsoft.com/blog/Batteries_Plus.html
            </link>
            <pubDate>Wed, 15 Feb 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Batteries_Plus.html
            </guid>
            <description>
                &lt;p&gt;If you have a &lt;a href = &quot;http://www.google.com/maps?f=l&amp;amp;hl=en&amp;amp;q=%22batteries+plus%22&amp;amp;near=york,+pa&quot;&gt;Batteries Plus&lt;/a&gt; near you, it&apos;s a good place to look for a variety of batteries you&apos;d usually assume could only be found at Radio Shack.  I was surprised to see lots of the little button cells which I need for a variety of devices, like Photon Lights.  I believe many cost less than the &quot;one price for any cell (whether you usually need 1 or 4 at a time)&quot; garbage Radio Shack has been pulling.&lt;/p&gt;
&lt;p&gt;Additionally, they conveniently repacked an odd cordless phone battery for me when no Radio Shack could find a replacement to order from their catalog.  That&apos;s a pretty useful service, and it cost me about the same as a replacement battery, had I been able to find one.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Firefox Crashing on File Dialog
            </title>
            <link>
                https://www.hjsoft.com/blog/Firefox_Crashing_on_File_Dialog.html
            </link>
            <pubDate>Wed, 8 Feb 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Firefox_Crashing_on_File_Dialog.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been seeing Firefox of various 1.5 versions in Debian unstable crashing upon trying to open any file dialog.  Per &lt;a href = &quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=348470&quot;&gt;a bug report&lt;/a&gt;, I tried switching themes GTK/Gnome themes from my normal SphereCrystal to another, Glider, and now it&apos;s fixed.  You can imagine how  frustrating it&apos;s been to have Firefox unable to save any downloads for the past month or so.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Automatic Eclipse Updates
            </title>
            <link>
                https://www.hjsoft.com/blog/Automatic_Eclipse_Updates.html
            </link>
            <pubDate>Wed, 8 Feb 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Automatic_Eclipse_Updates.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve just now gotten a spare moment to go downloading the Eclipse 3.1.2 to update my current 3.1.1.  Upgrading is time-consuming, so I&apos;ve delayed it.  While getting to the download, I stumbled upon this a link explaining how to &lt;a href = &quot;http://www.eclipse.org/eclipse/platform-releng/updatesfor3.1.1.html&quot;&gt;upgrade using the automatic updates&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;thought&lt;/em&gt; the automatic update should have been able to get it, but it just never showed up, so I figured I needed to do the install by hand.  The update is much nicer.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Crazy Extended Attributes
            </title>
            <link>
                https://www.hjsoft.com/blog/Crazy_Extended_Attributes.html
            </link>
            <pubDate>Mon, 6 Feb 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Crazy_Extended_Attributes.html
            </guid>
            <description>
                &lt;p&gt;Linux 2.6.15.2 came out, so I rebooted butterfly last night at midnight expecting only the normal reboot issues with that server.  I got much more exciting issues!  For some reason, large numbers of files and directories all over the machine had interesting combinations of extended attributes (most notably &lt;em&gt;immutable&lt;/em&gt; flags), which caused lots of noise at boot as files couldn&apos;t be updated.&lt;/p&gt;
&lt;p&gt;I recursively cleared all the attributes to get moving again, but I still have a few straggler files which refuse to be removed, moved, or replaced even though their attributes appear to be clear.  I guess I&apos;ll be doing a reiserfsck on the whole system tonight.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (6 February 2006):&lt;/b&gt; I ended up going back to 2.6.15.1.  Apparently extended attributes weren&apos;t working there anyway, so I don&apos;t see this issue.  My notebook has no trouble, and it &lt;em&gt;can&lt;/em&gt; use the extended attributes.  The filesystems checked out fine, so I wonder if I&apos;ll end up just rebuilding the filesystems completely someday, just to get past kernel 2.6.15.1.&lt;/p&gt;
&lt;p&gt;I&apos;m not confident enough that I know what is happening to try to report it to the kernel mailing list.  Additionally, I can&apos;t afford much down time on the server to test patches.&lt;/p&gt;
&lt;p&gt;I&apos;m hoping it may just go away with a newer kernel, since there may have been other odd interactions with SCSI, since some kernels through SCSI parity errors while trying to rebuild the reiser tree, and others behaved fine.  I was using the new 2.6.15.2, and Knoppix&apos; 2.6.12, I believe.  I forget which displayed which errors.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Debian Linux and Motorola V551
            </title>
            <link>
                https://www.hjsoft.com/blog/Debian_Linux_and_Motorola_V551.html
            </link>
            <pubDate>Tue, 31 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Debian_Linux_and_Motorola_V551.html
            </guid>
            <description>
                &lt;p&gt;I had reported in previous months that &lt;a href = &quot;http://www.hjsoft.com/blog/link/ObexFTP_and_Motorola_V551&quot;&gt;I had trouble getting my Debian Linux machine to talk to a Motorola V551 over bluetooth&lt;/a&gt;.  Finally, a newer &lt;code&gt;bluez-utils&lt;/code&gt; (2.24-1) has hit Debian unstable, and now I&apos;ve found that &lt;code&gt;obexftp&lt;/code&gt; seems to work reliably.  It&apos;ll keep the pairing and allow subsequent accesses, including listing and downloading files.  I&apos;ve not yet tested pushing anything to the phone or dialup networking, but it&apos;s a very welcome start.&lt;/p&gt;
&lt;p&gt;Now I&apos;ll be able to regularly and conveniently download the camera phone pictures.  Next I&apos;ll have to see if Claire will let me load some MIDlets on her phone.  I&apos;d like to try to find (or write) a few slick tools for her, then she&apos;ll keep believing that my playing can be useful.  She&apos;s already admitted that &lt;a href = &quot;http://www.google.com/glm/&quot;&gt;Google Local Mobile&lt;/a&gt; is pretty cool.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (31 January 2006):&lt;/b&gt; I found out over the weekend that I can&apos;t push Java MIDlet jar files to Motorola phones (V551 or RAZR v3).  I&apos;m not sure why.  I could push images and browse just fine.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Google Local Mobile vs WAP
            </title>
            <link>
                https://www.hjsoft.com/blog/Google_Local_Mobile_vs_WAP.html
            </link>
            <pubDate>Fri, 27 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Google_Local_Mobile_vs_WAP.html
            </guid>
            <description>
                &lt;p&gt;The day I first played with &lt;a href = &quot;http://www.google.com/glm&quot;&gt;Google Local Mobile Java Midlet&lt;/a&gt;, I immediately recognized that it was going to be a killer application for my phone.  Previously, I had to use WAP to lookup phone numbers, addresses, and directions.&lt;/p&gt;

&lt;p&gt;Here&apos;s a little real-life test scenario and the times it took me to accomplish it (including starting the application or browser):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My wife called me for the name and number of the local bike shop.  I knew the name of the place, and I was sitting at my computer, so I typed it into Firefox&apos; Google Search bar really quickly, and found the number from their  Local service.  Then I proceeded to look up this information in other ways on my phone through Google&apos;s MIDlet, Google Local via WAP, and YellowPages.com via WAP.&lt;/p&gt;
&lt;table style = &quot;background: white;&quot;&gt;
&lt;caption&gt;Timings per search method.&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Local (PC)&lt;/td&gt;
&lt;td&gt;0:20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Local Mobile MIDLet&lt;/td&gt;
&lt;td&gt;0:40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Local WAP&lt;/td&gt;
&lt;td&gt;1:40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YellowPages.com WAP&lt;/td&gt;
&lt;td&gt;2:30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;YellowPages.com was the old-style WAP application which requires you to select through a hierarchy of options, which reduces dreaded typing on a mobile device, but greatly increases the number of round-trips over the high-latency EDGE/GPRS network.  This is the sort of thing I&apos;d do in years past on older phones.  I&apos;d say, &quot;Yeah, I can look that up,&quot; then struggle embarassingly for a few minutes.  It&apos;s much worse when you don&apos;t know the name of a place.&lt;/p&gt;
&lt;p&gt;Google Local Mobile remembers my location, so it saved me some keystrokes, and the interface is richer, so I don&apos;t incur the latencies of paging around the interface.&lt;/p&gt;
&lt;p&gt;In addition to getting the phone number in record time, I had the extra information of the map at almost no extra cost in time -- it was filling in the map in the background while I looked at the little balloon of data.&lt;/p&gt;
&lt;p&gt;I like having generic WAP interfaces to data, but some things are just much better served by a full application.  I&apos;d like to next see my bank offer a MIDlet interface in addition to their already useful (but sluggish) WAP interface.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Better Font Rendering
            </title>
            <link>
                https://www.hjsoft.com/blog/Better_Font_Rendering.html
            </link>
            <pubDate>Mon, 23 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Better_Font_Rendering.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.lifehacker.com&quot;&gt;LifeHacker&lt;/a&gt; had a quick little &lt;a href = &quot;http://www.lifehacker.com/software/monitors/avoid-computer-eye-strain-149003.php&quot;&gt;link to techniques to reduce eye strain&lt;/a&gt;.  The tip that caught my eye was enabling ClearType on Windows XP.  It&apos;s just subpixel rendering, but I hadn&apos;t realized that it made such a difference on CRTs -- I thought it was only good for LCD displays. &lt;/p&gt;
&lt;p&gt;Seeing this improvement on my workstation prompted me to just go compare settings on my Linux notebook, and I found that I had actually lost my subpixel rendering settings a while back when I blew away my configurations.  I enabled it and was again quite pleased.  The settings are accessible in Gnome through the Desktop-&gt;Preferences-&gt;Font menu option, or by just running &lt;code&gt;gnome-font-properties&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (4:50pm):&lt;/b&gt; Sub-pixel and even normal antialiasing seem to not work very well for white on black terminals.  The white text looks shadowy, but black text on a white terminal looks very nice.  I&apos;ve had to keep a blocky looking &quot;Fixed&quot; font for my terminals, since I use white on black.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Audio Tag Tool
            </title>
            <link>
                https://www.hjsoft.com/blog/Audio_Tag_Tool.html
            </link>
            <pubDate>Thu, 19 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Audio_Tag_Tool.html
            </guid>
            <description>
                &lt;p&gt;I rip the Subtext and SoundCore shows from &lt;a href = &quot;http://www.bassdrive.com/&quot;&gt;BassDrive&lt;/a&gt; stream on Sunday and Monday afternoons, but their id3v2 only have the show the names and descriptions, but never the date.  I rename the files with the date, but I still can&apos;t see those file names in rhythmbox.&lt;/p&gt;
&lt;p&gt;Fortunately, I found &lt;a href = &quot;http://pwp.netcabo.pt/paol/tagtool/&quot;&gt;Audio Tag Tool&lt;/a&gt; and its mass tagging feature based on patterns from the filename.  I sent it running through retagging my ripped streams to include the dates from their filenames.  That&apos;s much nicer now.  I may have to run more of my files through there to get proper genres on them.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Catching Up On Comics
            </title>
            <link>
                https://www.hjsoft.com/blog/Catching_Up_On_Comics.html
            </link>
            <pubDate>Thu, 19 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Catching_Up_On_Comics.html
            </guid>
            <description>
                &lt;p&gt;I have that handy list of comics over in the navbar, but I&apos;ve not had time to visit in the past month.  I&apos;ve finally gotten back to them save one -- &lt;a href = &quot;http://www.megatokyo.com/&quot;&gt;MegaTokyo&lt;/a&gt;.  It&apos;s a bit more involved with more to read and absorb, so I&apos;ve saved it for last.  The funny thing is that even though I know I&apos;ve been away for a month or so, I&apos;m pretty sure I&apos;ll find only 2 hours or so have passed in MegaTime, maybe a whole day.&lt;/p&gt;
&lt;p&gt;The artwork is amazing, so it&apos;s worth the wait, but I&apos;m starting to think this may be a better one to read in comic book format where I can rip through a bit quicker.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bitten By Java DNS Cache
            </title>
            <link>
                https://www.hjsoft.com/blog/Bitten_By_Java_DNS_Cache.html
            </link>
            <pubDate>Tue, 17 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bitten_By_Java_DNS_Cache.html
            </guid>
            <description>
                &lt;p&gt;Today I realized that my &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/john/&quot;&gt;moblog&lt;/a&gt; no longer received updates and immediately recognized from the connection exceptions in the logs that the &lt;a href = &quot;http://www.hjsoft.com/blog/link/Javas_DNS_Cache&quot;&gt;DNS cache in Java&lt;/a&gt; was responsible.&lt;/p&gt;
&lt;p&gt;I moved my mail server to a new IP several days ago, but Tomcat never picked up on it, because the JVM maintained its own cache which ignored my defined DNS TTL.&lt;/p&gt;
&lt;p&gt;I restarted Tomcat to get it to forget the old IP, and this time I configured away the DNS cache (&lt;code&gt;-Dsun.net.inetaddr.ttl=0&lt;/code&gt;).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Server Trouble: Lost a Fast 18G SCSI Drive
            </title>
            <link>
                https://www.hjsoft.com/blog/Server_Trouble_Lost_a_Fast_18G_SCSI_Drive.html
            </link>
            <pubDate>Mon, 16 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Server_Trouble_Lost_a_Fast_18G_SCSI_Drive.html
            </guid>
            <description>
                &lt;p&gt;Ugh!  Things were running slowly yesterday, and last night I found the reason -- one of my 2 fast U160 SCSI drives started showing bad sectors.  All of &lt;code&gt;/usr&lt;/code&gt; was on there, which included the entire photo gallery.  Only a few blocks were going bad at this point, so I had a short list of files which I knew would be corrupt.&lt;/p&gt;
&lt;p&gt;I needed to replace the drive quickly with one of my slower 7200RPM Fujitsu&apos;s I have on hand.  Good old &lt;code&gt;scu&lt;/code&gt; (SCSI Command Utility)  is next to impossible to find on the web, closed-source, and just broken in the later versions of Debian and Gentoo that I&apos;m running, so I was left stranded at 3am looking for a new tool which is capable of reformatting a SCSI drive with the correct blocksize of 512.  I found &lt;a href = &quot;http://micha.freeshell.org/scsi/&quot;&gt;setblocksize&lt;/a&gt;.  It&apos;s only purpose is to fix this sort of issue.  Unfortunately, it&apos;s no more reassuring and informative than a BIOS format, which means it tells you absolutely nothing and you sit there wondering if it&apos;s working.  I have myself convinced that it does stop working after a while, requires an interruption, reboot, and restart at times.  It tells you not to do that, but I don&apos;t trust it to tell me that it&apos;s broken either.&lt;/p&gt;
&lt;p&gt;I did eventually get it migrated over, and proved that it&apos;s going to suck -- The old drive did 29MB/s transfer, and this replacement only does 8MB/s.  I have to get shopping for a new disk or 2.  At this point, I&apos;m afraid to  have larger disks, because it just means more lost and longer backups.  This&apos;ll put me back into the mood to run lots of smaller disks in smaller partitions.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (17 January 2006):&lt;/b&gt;
After I got everything over to the new drive, and it seemed to be working, I did a Debian update to ensure all the major files (from a pending glibc update, especially) were intact.  Then I went about low-level formatting the bad drive just for kicks.  It low-leveled fine, and badblocks proved the drive was looking OK again, so I tortured it a bit, and put it back into service.  The slow drive was going to be too painful.&lt;/p&gt;
&lt;p&gt;Upon rebooting all hell broke loose with /boot on the unaffected drive not fsck-ing and other mass confusion.  After lots more debugging, I saw that my &lt;code&gt;/dev/scsi&lt;/code&gt; tree as assembled by &lt;code&gt;udev&lt;/code&gt; was all misaligned due to the latest udev update (0.80-1, I believe).  After rolling back udev, things got better, but it wasted a couple &lt;em&gt;hours&lt;/em&gt; for me.&lt;/p&gt;
&lt;p&gt;Once things calmed, I proceeded to run my new favorite tool, &lt;code&gt;setblocksize&lt;/code&gt;, on the rest of my unused SCSI drives.  Now I&apos;ll not have to remember how to do this again, until I buy another batch of drives pulled from RAID arrays.  It turns out that &lt;code&gt;setblocksize&lt;/code&gt; will complete the format on its own on the first try -- it just takes a long time (an hour or so with my 18G drive on an old BusLogic Flashpoint controller).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                No Java ME Books at Borders
            </title>
            <link>
                https://www.hjsoft.com/blog/No_Java_ME_Books_at_Borders.html
            </link>
            <pubDate>Fri, 13 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/No_Java_ME_Books_at_Borders.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been programming a MIDlet for my phone, and I wanted to make sure I&apos;m following some sort of design standard beyond just cobbling it together from the API docs, so I wandered out to my local Borders Book Store last night.  I found &lt;em&gt;no&lt;/em&gt; Java ME (J2ME) books anywhere.  In fact, their computer section has been shrinking for a while.&lt;/p&gt;
&lt;p&gt;I find this hard to believe when I&apos;ve seen a few of these books coming up on publishers&apos; new release lists.  I also take Google&apos;s own &lt;a href = &quot;http://www.google.com/glm/&quot;&gt;Google Local Mobile&lt;/a&gt; MIDlet to be a sign that Java ME really is about to come of age.&lt;/p&gt;
&lt;p&gt;Since I was mostly searching for an impulse buy, I&apos;m not going to bother ordering anything online or running out to Ollie&apos;s Outlet to buy old bargain-bin books about MIDP 1.0 just yet.  It looks like Sun and others have a pretty good set of &lt;a href = &quot;http://developers.sun.com/techtopics/mobility/midp/reference/techart/index.html&quot;&gt;Java ME articles&lt;/a&gt; which should get me to the next level nicely.  The &lt;a href = &quot;http://java.sun.com/blueprints/wireless/&quot;&gt;wireless blueprint program&lt;/a&gt; looks like it may be exactly what I need at this point.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gnome 2.12 Coming to Debian
            </title>
            <link>
                https://www.hjsoft.com/blog/Gnome_212_Coming_to_Debian.html
            </link>
            <pubDate>Thu, 12 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gnome_212_Coming_to_Debian.html
            </guid>
            <description>
                &lt;p&gt;Debian Sid automatically upgrades Gnome as they become available, and I guess all the programs are supposed to be able to migrate their configurations from older versions.  Regardless, I slowly accrued odd little errors over time (like panel complaining another was already running, or panels complaining of crashes on logout).&lt;/p&gt;
&lt;p&gt;Last week or so, I finally bit the bullet, and blew away all the configuration files I could find and reinitialized a fresh session with Gnome 2.10.  After an hour or so of trying to remember all the  buttons and little applets I had, I was back up and running pretty cleanly.&lt;/p&gt;
&lt;p&gt;Only a few days after putting in that work, Gnome 2.12 has started filtering into Debian Sid, and problems are cropping up again.  As I worked and tuned, somehow I&apos;ve managed to make the Gnome startup splash screen hang waiting for &lt;em&gt;something&lt;/em&gt; to start, but I don&apos;t know what.  I sort of remember encountering this a long time ago in very old versions of Gnome, but I didn&apos;t note what caused it and how I fixed it.&lt;/p&gt;

&lt;p&gt;I&apos;ve read and experienced that ESD can be problematic, so maybe I&apos;ll go experimenting around there.  I&apos;ve recently done some work to try to get ESD to talk directly to ALSA, but that had initially made things better for blocking sound applications, not worse.  Maybe when the rest of Gnome 2.12 gets into Debian, I&apos;ll have to blow away my configurations again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Book Review: Java Puzzlers
            </title>
            <link>
                https://www.hjsoft.com/blog/Book_Review_Java_Puzzlers.html
            </link>
            <pubDate>Thu, 12 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Book_Review_Java_Puzzlers.html
            </guid>
            <description>
                &lt;p&gt;I recently read &lt;a href = &quot;http://www.amazon.com/gp/product/032133678X/002-0258672-8579272?v=glance&amp;amp;n=283155&quot;&gt;Java Puzzlers&lt;/a&gt; by Joshua Bloch and Neal Gafter.  I borrowed it from a coworker for a bit of leisure reading.  I expected good things, since Bloch&apos;s &lt;a href = &quot;http://www.hjsoft.com/blog/link/Recent_Reading_Technical_and_Not&quot;&gt;Effective Java&lt;/a&gt; was excellent.&lt;/p&gt;
&lt;p&gt;The Java content felt much more relevant and accessible than my very old printing of the C Puzzle Book.  The puzzles progressively got more complex, but few really exceeded a page of code in length.  A few puzzlers revolve around boring &lt;em&gt;punctuation&lt;/em&gt; mistakes, some are misconceptions about library routines, and toward the end he&apos;s discussing more complex thread interactions.  In the beginning, I was fanatically thinking through the puzzle before reading the solution, but toward the end I just didn&apos;t care anymore and proceeded right to the solution.&lt;/p&gt;
&lt;p&gt;Since all the code samples were relatively short, they looked disturbingly like something I could write and expect I&apos;d know how it will behave.  Now I fear that I may actually have some of these puzzles represented in my own code!  I&apos;ll never trust myself again.  The section on arithmetic and common overflows haunts me the most -- the errors are just so silent.  I think I&apos;m smart enough to be cautious of the more complex examples when encountered in the real world.&lt;/p&gt;
&lt;p&gt;In the end, it&apos;s an entertaining book and a quick read, and there are lessons to be learned.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ALSA Dmix
            </title>
            <link>
                https://www.hjsoft.com/blog/ALSA_Dmix.html
            </link>
            <pubDate>Thu, 12 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ALSA_Dmix.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been using esd for years to mix multiple sound streams from various clients.  Occassionally, it gets blocked up and stops functioning, and sometimes, your programs just don&apos;t know how to talk to the daemon, so I wanted to look into the rumored mixing support in ALSA.&lt;/p&gt;
&lt;p&gt;While looking for the necessary configuration steps, I happily found that this was supposedly &lt;a href = &quot;http://alsa.opensrc.org/index.php?page=DmixPlugin&quot;&gt;already enabled&lt;/a&gt; in later versions of ALSA.  I switched esd and my music players (beep and rhythmbox) to all talk to ALSA directly, and it seems to be working!  If anything starts talking to the OSS emulation layer it still blocks all the native ALSA clients.&lt;/p&gt;
&lt;p&gt;Maybe now I&apos;ll get sharpmusique, esd, and rhythmbox to all work together smoothly.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (12 January 2006):&lt;/b&gt;  Rhythmbox talking through gstreamer directly to ALSA (instead of ESD) seems to get choppier quicker during high (disk?) loads, such as Debian updates.  Maybe I&apos;ll switch gstreamer over to piping through ESD to ALSA, similarly to what it was doing previously.  Maybe this&apos;ll introduce some buffering to alleviate the stutter.  I suppose I could also tune IO scheduling in Linux to address this as well, but I&apos;m unfamiliar with that.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                3GP in Linux
            </title>
            <link>
                https://www.hjsoft.com/blog/3GP_in_Linux.html
            </link>
            <pubDate>Tue, 10 Jan 2006 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/3GP_in_Linux.html
            </guid>
            <description>
                &lt;p&gt;I was pleased to see the other day that my current version of mplayer (from &lt;a href = &quot;ftp://ftp.nerim.net/debian-marillat/&quot;&gt;Marillat&apos;s Debian Archive&lt;/a&gt;) now supports 3gp video &lt;em&gt;with&lt;/em&gt; audio.  Previously, I could see the video, but not here any audio.  This is the video format recorded by our camera phones.&lt;/p&gt;
&lt;p&gt;This renewed my interest in getting the little videos off of our phones and published to the &lt;a href = &quot;http://www.hjsoft.com/gallery/&quot;&gt;gallery&lt;/a&gt;.  I had to patch gallery&apos;s &lt;code&gt;util.php&lt;/code&gt; to teach it that 3gp is indeed a valid video format.  After patching, it immediately recognized the videos for upload.&lt;/p&gt;
&lt;p&gt;My next step will be figuring out how to transcode the 3gp files into something a bit more common, like mpeg.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Christmas is Coming
            </title>
            <link>
                https://www.hjsoft.com/blog/Christmas_is_Coming.html
            </link>
            <pubDate>Thu, 22 Dec 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Christmas_is_Coming.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m more excited for Christmas this year than I&apos;ve been in a long time.  I can&apos;t wait to sit down and play with Paige on Christmas morning.  She&apos;s going to be so excited.  Ben won&apos;t know what&apos;s going on, but he&apos;ll like the wrapping paper.&lt;/p&gt;
&lt;p&gt;Paige had &lt;a href = &quot;http://www.hjsoft.com/gallery/Family_Christmas_2003/pc240066&quot;&gt;fun with paper&lt;/a&gt; about this time 2 years ago.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Redemption
            </title>
            <link>
                https://www.hjsoft.com/blog/Redemption.html
            </link>
            <pubDate>Tue, 13 Dec 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Redemption.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=5050214&quot;&gt;Stanley Tookie Williams was put to death&lt;/a&gt; this morning by the state of California.  He was convicted of his crimes and was doing his time, but never admitted guilt.&lt;/p&gt;
&lt;p&gt;Disregarding the question of his innocence or guilt, we still see that he was making the best of his confined life writing and educating against gang violence.  He was doing good work, and I weep for a society that couldn&apos;t afford a redeemed man more time to spread his message.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Snow Day
            </title>
            <link>
                https://www.hjsoft.com/blog/Snow_Day.html
            </link>
            <pubDate>Fri, 9 Dec 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Snow_Day.html
            </guid>
            <description>
                &lt;p&gt;I shoveled my way out this morning -- got some exercise.  Paige eventually came out to play in the new snow.  We played a bit, and I dug a few paths for her and cleared a spot in the side of a  snow pile.  As soon as she saw the the little &quot;snow house&quot; she said, &quot;I want to go in here.&quot;&lt;/p&gt;
&lt;p&gt;I ended up even later for work, which was just fine with me.  I turned a 2-hour delay into a 3.5-hour delay.&lt;/p&gt;
&lt;p&gt;By the time I was leaving, our neighborhood looked pretty clear, but roads to get to the highways looked nearly unplowed, just tire-packed.  Even the highway had more scary spots of snow than I had expected.&lt;/p&gt;
&lt;p&gt;I saw a couple cars and trucks sitting along the road facing the wrong directions.  Nearer to work, I got to appreciate the little wall between the eastbound and westbound lanes, as a minivan caught my eye spinning a full 90-degrees left and veering across the eastbound lanes to smash into the wall.  Good wall.  Traffic wasn&apos;t as lucky on the other side as they piled up into the driver&apos;s side of the van.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Frustrated Enough to Maybe Contribute
            </title>
            <link>
                https://www.hjsoft.com/blog/Frustrated_Enough_to_Maybe_Contribute.html
            </link>
            <pubDate>Fri, 9 Dec 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Frustrated_Enough_to_Maybe_Contribute.html
            </guid>
            <description>
                &lt;p&gt;I have a few severe irritations with the state of my computer right now:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;swsusp still causes occassional lockups on my ThinkPad R40.  I&apos;ve already rebuilt 2.6.14.3 8 times trying to find the configuration that causes the problem.&lt;/li&gt;
&lt;li&gt;Rhythmbox interacts poorly with esound and causes Rhythmbox to become unresponsive.&lt;/li&gt;
&lt;li&gt;Rhythmbox has a good music library interface, but I want an option to show the file name, so I can differentiate podcasts and ripped streams that don&apos;t embed that info into their metadata.&lt;/li&gt;
&lt;li&gt;Automount on my notebook refuses to expire the NFS mounts it used to do backups overnight.  The server does it just fine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&apos;m frustrated enough with these things that I may soon be motivated to dig in, focus, and try to debug and fix them myself.  Then I can contribute the patches back to the projects or at least document my configuration problems and how I fixed it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Hibernate Script
            </title>
            <link>
                https://www.hjsoft.com/blog/Hibernate_Script.html
            </link>
            <pubDate>Fri, 2 Dec 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Hibernate_Script.html
            </guid>
            <description>
                &lt;p&gt;In my experiments with swsusp on my ThinkPad, I initially had been using a homegrown script to do lots of things before and after suspend.  I eventually learned that most of that (resetting the clock, unloading lots of modules, etc) wasn&apos;t actually necessary, so I trimmed it aggressively.  All along, my only issue with swsusp has been occassional lockups within 10 minutes of resuming, so I knew I still had some work to do.&lt;/p&gt;
&lt;p&gt;Debian packages the hibernate script, and it has switchable modes for swsusp, acpi sleep, and suspend2, so I thought I&apos;d give it a try and see if it did anything wiser than I did.  I also had hoped to someday give suspend2 a try, so this seemed like an easy way to transition.&lt;/p&gt;
&lt;p&gt;It seemed to work nicely enough, and even ran for a while.  It eventually did crash after a resume, but that has always been so hit and miss -- I&apos;ve gone 2 weeks without a crash to have it happen 3 resumes in a row.  I&apos;m not sure when I&apos;d be able to declare it fixed.&lt;/p&gt;
&lt;p&gt;Then I noticed that my sound was getting blocked up and only an unload and reload of &lt;em&gt;all&lt;/em&gt; all the ALSA-related modules would fix it.  That&apos;s no fun.   Assuming it came with a kernel upgrade, I spent lots of time rebuilding every stable release kernel from 2.6.14.3 back to 2.6.13.  I also switched in and out suspend2 (which &lt;em&gt;doesn&apos;t&lt;/em&gt; seem to leave swsusp in working order after patching).  All the different kernels exhibitted this error, and I knew I hadn&apos;t been seeing this issue for that long.&lt;/p&gt;
&lt;p&gt;I finally casted a suspecting eye back upon the hibernate script.  I disabled module blacklist which unloads a whole list of modules before suspending.  This fixed the issue, and sound continued to work nicely after a resume.  I&apos;ve not had time to go back and figure out exactly which module was doing it.  I&apos;ve also not had time to go back to see if suspend2 still works with no modules being reloaded.  The script seems to have been primarily written by suspend2 people, so I&apos;m guessing the blacklist may be more important to getting suspend2 to behave.  Maybe after I see a few lockups using swsusp, I&apos;ll give suspend2 a shot again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Answering Searches: High Load after Resume
            </title>
            <link>
                https://www.hjsoft.com/blog/Answering_Searches_High_Load_after_Resume.html
            </link>
            <pubDate>Fri, 2 Dec 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Answering_Searches_High_Load_after_Resume.html
            </guid>
            <description>
                &lt;p&gt;I saw this search referrer to my weblog today: &quot;&lt;a href = &quot;http://www.google.com/search?hl=en&amp;amp;lr=&amp;amp;safe=off&amp;amp;q=swsusp2+thinkpad+high+load+resume&amp;amp;btnG=Search&quot;&gt;google:swsups2 thinkpad high load resume&lt;/a&gt;&quot;.&lt;/p&gt;
&lt;p&gt;Answer:  The load average will always appear high after a suspend/resume cycle.  To the Linux kernel, it appears that it&apos;s had most of the processes in the system waiting to execute for a very long time.  That&apos;s what load average is, the average number of processes waiting to execute.  Add to that the running time it takes to actually get processes swapped back into memory you can see why you&apos;d expect crazy load averages.  Of course, it recovers pretty quickly, so there&apos;s no reason to worry.&lt;/p&gt;
&lt;p&gt;Unrelatedly, lots of people seem to be searching for information about the High Gear Axis wristwatch.  As these people have read, I had 2 that were complete junk.  2 years later, I&apos;d hope that they&apos;ve improved this watch if they&apos;ve continued to sell it.  If you have had good experiences with the High Gear Axis, please drop me an email or a comment here.  I&apos;d love to know -- maybe I&apos;ll reconsider it when the time comes to shop for a new watch again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Firefox 1.5
            </title>
            <link>
                https://www.hjsoft.com/blog/Firefox_15.html
            </link>
            <pubDate>Tue, 29 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Firefox_15.html
            </guid>
            <description>
                &lt;p&gt;I grabbed Firefox 1.5 from the &lt;a href = &quot;ftp://ftp.mozilla.org/&quot;&gt;FTP site&lt;/a&gt; and found that it chewed up my weblog a bit.  The CSS tunings have been deployed, so it should look OK now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Weblogs Running on Tomcat
            </title>
            <link>
                https://www.hjsoft.com/blog/Weblogs_Running_on_Tomcat.html
            </link>
            <pubDate>Mon, 28 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Weblogs_Running_on_Tomcat.html
            </guid>
            <description>
                &lt;p&gt;I have &lt;a href = &quot;http://weblogs.hjsoft.com/&quot;&gt;weblogs.hjsoft.com&lt;/a&gt; running out on a small (too small) virtual private server at &lt;a href = &quot;http://www.rimuhosting.com/&quot;&gt;Rimu Hosting&lt;/a&gt;.  For a very long time, I&apos;ve been trying to run the Blojsom instance within a slimmed JBoss 4.0.x server on Java 5.  The site was running &lt;em&gt;tolerably&lt;/em&gt; with a very light load, but a GoogleBot hit would easily overwhelm the whole server.  The server only had 128M of real RAM, which Rimu doesn&apos;t even admit will run JBoss, and they have good reason.&lt;/p&gt;
&lt;p&gt;I&apos;ve been contemplating upgrading the server, but in interest of saving money, I dropped back to a stand-alone Tomcat instance instead.  Initially, it seems to be behaving much better.  Unfortunately, I&apos;ll still need to upgrade the server when it comes time to put real J2EE apps out there.  Hopefully, I&apos;ll have some real paid hosting to subsidize the cost by the time I have to upgrade.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Server Maintenance with a Hacksaw
            </title>
            <link>
                https://www.hjsoft.com/blog/Server_Maintenance_with_a_Hacksaw.html
            </link>
            <pubDate>Wed, 23 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Server_Maintenance_with_a_Hacksaw.html
            </guid>
            <description>
                &lt;p&gt;A sysadmin or programmer with a soldering iron conjures certain scary images, but how about a hacksaw?&lt;/p&gt;
&lt;p&gt;My dual Athlon server started roaring as a CPU fan began to wear, so I closed the office door for the night, and rushed out to buy a new set of coolers for it the next day.  I got some nice round tornado heatsinks and fans.  Of course, Tyan has the capacitors mounted awfully close to the CPUs.&lt;/p&gt;
&lt;p&gt;When all was said and done, I ended up notching out a  couple fins on each heatsink to make room for the capacitors.  (That seemed like a better idea than notching the caps.)&lt;/p&gt;
&lt;p&gt;That modification, some badly-seated RAM, an accidentally unplugged SCSI drive, and some research into some existing APIC errors extended my maintenance window to about 3 hours.  I had hoped to do it all in 30 minutes.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Buying Music is Complicated
            </title>
            <link>
                https://www.hjsoft.com/blog/Buying_Music_is_Complicated.html
            </link>
            <pubDate>Mon, 21 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Buying_Music_is_Complicated.html
            </guid>
            <description>
                &lt;p&gt;Here&apos;s an interesting explanation of the possibly upcoming &lt;a href = &quot;http://www.joelonsoftware.com/items/2005/11/18.html&quot;&gt;multiple price points in iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;ve thought to myself that iTunes does seem like a pretty reasonable delivery model.  I&apos;ve even sort of accepted the DRM (as a small hurdle to overcome to be able to listen on my Linux box).  This little article just makes it feel dirty and manipulative now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Best Life I Will Ever Have
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Best_Life_I_Will_Ever_Have.html
            </link>
            <pubDate>Mon, 21 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Best_Life_I_Will_Ever_Have.html
            </guid>
            <description>
                &lt;p&gt;Penn Jillette &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=5015557&quot;&gt;believes there is no God&lt;/a&gt; (which is different from &lt;em&gt;not believing in God&lt;/em&gt;).  It&apos;s a funny, but well-thought little essay for NPR&apos;s &lt;em&gt;This I Believe&lt;/em&gt; series.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Recent Reading, Technical and Not
            </title>
            <link>
                https://www.hjsoft.com/blog/Recent_Reading_Technical_and_Not.html
            </link>
            <pubDate>Sat, 12 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Recent_Reading_Technical_and_Not.html
            </guid>
            <description>
                &lt;p&gt;Somehow, I managed to do most my modern technical reading out of order.  I started reading &lt;em&gt;Core J2EE Patterns&lt;/em&gt; and other J2EE books, then I dropped I went back to fill in the blanks with GoF Patterns.  Stepping back to even simpler concepts, I recently read Fowler&apos;s &lt;em&gt;Refactoring&lt;/em&gt;, and I&apos;ve finally discovered and read Bloch&apos;s &lt;em&gt;Effective Java&lt;/em&gt;.  I fortunately got to borrow it from a coworker.&lt;/p&gt;
&lt;p&gt;I found reinforcement for many of my current good practices (which is nice when you&apos;re in a training/architecture-type position).  I also picked up some tips which I knew needed attention, but just never quite found, such as properly dealing with synchronization or serialization.&lt;/p&gt;
&lt;p&gt;Concurrently, I had been reading William Gibson&apos;s &lt;em&gt;Pattern Recognition&lt;/em&gt;.  Quite unlike all his previous books, this one has only 1 storyline instead of 3.  This made it feel like a much quicker read, and I managed to put it down and pick it up often without confusion.  It was one of the more satisfying of his books set in the present or very near future.&lt;/p&gt;
&lt;p&gt;To hold my attention for a couple weeks, I just picked up a relatively cheap book about digital photo retouching called &lt;em&gt;40 Digital Photo Retouching Techniques&lt;/em&gt;.  It&apos;s based on Photoshop Elements, but it seems to have lots of good ideas, and most of it seems to translate to Gimp easily for me.&lt;/p&gt;
&lt;p&gt;After that, I&apos;ll probably borrow &lt;em&gt;Java Puzzlers&lt;/em&gt; from the same guy who lent me &lt;em&gt;Effective Java&lt;/em&gt; -- He has quite the library.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ObexFTP and Motorola V551
            </title>
            <link>
                https://www.hjsoft.com/blog/ObexFTP_and_Motorola_V551.html
            </link>
            <pubDate>Thu, 10 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ObexFTP_and_Motorola_V551.html
            </guid>
            <description>
                &lt;p&gt;Claire&apos;s &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=591&quot;&gt;Motorola V551&lt;/a&gt; is frustrating me terribly these days.  I can browse and pull its files from my SE S710a, but &lt;a href = &quot;http://triq.net/obexftp.html&quot;&gt;&lt;code&gt;obexftp&lt;/code&gt;&lt;/a&gt; on my Debian notebook just fails to connect to it.  I can&apos;t push files to it either from the notebook.  I &lt;em&gt;can&lt;/em&gt; push files from the phone to the notebook though.&lt;/p&gt;
&lt;p&gt;I think I had read on a mailing list somewhere that obexftp or openobex may be missing some headers in the bluetooth communication, and this is what causes some other Motorola phones so unhappy, but I can&apos;t find that information these days.  There was rumor of a patch, but it&apos;s still not working with the latest version from Debian unstable (0.10.7+0.10.8pre9-1).&lt;/p&gt;
&lt;p&gt;I&apos;m positive this should work, and the fault probably lies with my Linux software, but I just want to see a fix.  I can&apos;t believe no one else has ever tried this phone with Linux, but that&apos;s what Google would have me believe.  It seems to be a super-slick phone otherwise.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (9 November 2005):&lt;/b&gt;
I&apos;ve found that plain old minicom talking to an rfcomm device doesn&apos;t work with this phone either.  Maybe it&apos;s my Linux kernel bluetooth stack?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (10 November 2005):&lt;/b&gt;
I&apos;ve found that obexftp and even minicom (after a &lt;code&gt;cat /dev/rfcomm2&lt;/code&gt;) work if it&apos;s the first time the devices are pairing.  After that, the phone keeps disconnecting.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                S710a + Unsigned Java Midlets = Frustration
            </title>
            <link>
                https://www.hjsoft.com/blog/S710a__Unsigned_Java_Midlets__Frustration.html
            </link>
            <pubDate>Mon, 7 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/S710a__Unsigned_Java_Midlets__Frustration.html
            </guid>
            <description>
                &lt;p&gt;I posted &lt;a href = &quot;http://forums.cingular.com/cng/board/message?board.id=sonyericsson&amp;amp;message.id=15589&quot;&gt;this message&lt;/a&gt; to the SonyEricsson forum at Cingular:&lt;/p&gt;
&lt;blockquote cite = &quot;http://forums.cingular.com/cng/board/message?board.id=sonyericsson&amp;amp;message.id=15589&quot;&gt;
&lt;p&gt;I&apos;m in the process of writing a Java app for my phone, and I&apos;ve also been trying to run a few free programs, such as midpSSH and GooglME. My S710a is giving me SecurityExceptions when these programs try to access network sockets or even send SMS.&lt;/p&gt;
&lt;p&gt;I&apos;ve come to understand that Cingular may have disabled access to these capabilities for unsigned java apps.&lt;/p&gt;
&lt;p&gt;How can I bypass this security, so I can run my programs?&lt;/p&gt;
&lt;p&gt;How can I install my own certificate authority, so I can sign my own midlets?&lt;/p&gt;
&lt;p&gt;Or what&apos;s the cheapest way to get my apps signed? What about these other 3rd-party apps I&apos;d like to use?&lt;/p&gt;
&lt;p&gt;I upgraded from my T616 to get a socket implementation in J2ME, and in the process, I still can&apos;t access sockets and I&apos;ve LOST access to SMS (for GooglME). I find this HIGHLY disappointing, and I&apos;m really beginning to regret the purchase of this otherwise great phone.&lt;/p&gt;
&lt;p&gt;I&apos;m tempted to try getting it unlocked and unbranded just to see if it&apos;ll make those security restrictions go away.&lt;/p&gt;
&lt;p&gt;Does anyone have any experiences, ideas, or leads on how to overcome this issue? Thanks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hopefully, someone will be able to help me out and make me happier to own this phone.&lt;/p&gt;
&lt;p&gt;I&apos;ve been reading &lt;a href = &quot;http://www.spindriftpages.net/pebble/dave/2005/06/20/1119275880301.html&quot;&gt;elsewhere about signing MIDlets&lt;/a&gt;, and there seems to be many people who need to be able to do this.  Are these security configurations really the norm these days?  I&apos;ll have to go poking around &lt;a href = &quot;http://developer.cingular.com/developer/index.jhtml&quot;&gt;Cingular&apos;s Developer site&lt;/a&gt; to see if I can learn an acceptable way to code and deploy fully functional J2ME applications.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                No, Me First!
            </title>
            <link>
                https://www.hjsoft.com/blog/No_Me_First.html
            </link>
            <pubDate>Thu, 3 Nov 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/No_Me_First.html
            </guid>
            <description>
                &lt;p&gt;I go as long as possible between reboots of servers and even my notebook.  I&apos;ve seen various configurations of hotplug and udev cross my Debian machines between reboots, so when I recently rebooted the server, I found my 3 network cards reordered, and hence mostly dysfunctional -- The network configs were trying to serve DHCP to the outside, find the cablemodem on the LAN, and the firewall was just completely backwards.  I had seen the same thing happen occassoinally on my notebook, but the stakes aren&apos;t as high there.&lt;/p&gt;
&lt;p&gt;The modules for my NICs were automatically being loaded in varying orders by hotplug or udev, and that ordering directly affected the interface names they were assigned, so I needed to disable the automatic load of these modules.  Old hotplug allowed me to list them in &lt;code&gt;/etc/hotplug/blacklist.d/&lt;/code&gt;, but that&apos;s no longer used by udev when it replaced hotplug in Debian.&lt;/p&gt;
&lt;p&gt;After some reading in debian-user archives around the time they made this switch, I figured out that I could blacklist the modules in &lt;code&gt;/etc/modprobe.d/&lt;/code&gt;.  At first glance, this seemed like a bad idea, because it could keep me from ever loading these modules.  In reality, the blacklist only disables loading the modules by an alias name.  If I load them with &lt;code&gt;modprobe&lt;/code&gt; explicitly the blacklist is not applied and I will still be able to load the driver.  Listing the modules in &lt;code&gt;/etc/modules&lt;/code&gt; works as well, so I can have them loaded there in the order I define, and the interfaces are always as I expect...until the next change, anyway.&lt;/p&gt;
&lt;p&gt;Linux 2.6.14 is looking good now on my server and notebook.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                J2EE 1.4 Compliance in JBoss 4.0.3SP1
            </title>
            <link>
                https://www.hjsoft.com/blog/J2EE_14_Compliance_in_JBoss_403SP1.html
            </link>
            <pubDate>Wed, 26 Oct 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/J2EE_14_Compliance_in_JBoss_403SP1.html
            </guid>
            <description>
                &lt;p&gt;This &lt;a href = &quot;http://docs.jboss.org/jbossas/jboss4guide/r3/html/pr05.html#conf&quot;&gt;JBoss documentation&lt;/a&gt; details the switches to flip to get proper J2EE 1.4 compliance.  These couple changes and ensuring remote ejb-ref mappings (&lt;code&gt;jnp://localhost:1099/blog/BlogService&lt;/code&gt;) in jboss-web.xml allows my relatively straight-forward application to run.&lt;/p&gt;
&lt;p&gt;I deploy my EJBs in a jar, and the web-tier in a war.  The war contains the client.jar for the EJBs as one would expect from a normal app server.  This caused JBoss to complain of &quot;&lt;em&gt; Invalid invocation, check your deployment packaging&lt;/em&gt;&quot; until I got the server configuration right.&lt;/p&gt;
&lt;p&gt;I wonder if I could put together a nice script to customize these things for me in every new JBoss build.&lt;/p&gt;
&lt;p&gt;Along the way, I also discovered that I had my datasource type mapping declared in my xdoclet call (in build.xml).  This overrode my deployed datasource&apos;s &quot;PostgreSQL 8.0&quot; with just &quot;PostgreSQL&quot;.  That took a moment to figure out.  Updating my JBoss version to &quot;4.0&quot; in xdoclet allowed me to drop the datasource type from the descriptors completely, and the server used the right mapping after that.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Paperless Billing
            </title>
            <link>
                https://www.hjsoft.com/blog/Paperless_Billing.html
            </link>
            <pubDate>Mon, 24 Oct 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Paperless_Billing.html
            </guid>
            <description>
                &lt;p&gt;I just got my first &lt;a href = &quot;http://www.cingular.com/&quot;&gt;Cingular&lt;/a&gt; bill, since switching from the old AT&amp;amp;T Wireless and using my new Sony Ericsson S710a.  The bill was 44 pages, due mostly to my data usage.  Besides my active bandwidth usage, my phone is configured to check an IMAP mailbox every 30 minutes.  Initially I had the interval set to 5 minutes!&lt;/p&gt;
&lt;p&gt;As I&apos;m not likely to cut my connection frequency further, I should probably switch to paperless billing.  For trivia&apos;s sake, I&apos;ll say all those pages still only totalled to 56M of data.  It was pretty easy to consume that much with the faster EDGE network.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Buying a Car for Fuel Economy
            </title>
            <link>
                https://www.hjsoft.com/blog/Buying_a_Car_for_Fuel_Economy.html
            </link>
            <pubDate>Thu, 13 Oct 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Buying_a_Car_for_Fuel_Economy.html
            </guid>
            <description>
                &lt;p&gt;I bought my Mazda Protege back in the beginning of 2003 when I was still driving 10 minutes to work.  I passed up a Toyota ECHO, because it lacked power options, and I didn&apos;t feel like losing that in my new car.&lt;/p&gt;
&lt;p&gt;These days, I wish I had just bought the ECHO back then.  My Mazda gets has been averaging 29MPG, which isn&apos;t bad, but an ECHO would be better for my current 90-mile daily commute, so I occassionally look around for an ECHO to replace my Protege.  I&apos;d also like to get a manual transmission for the sake of learning it.&lt;/p&gt;
&lt;p&gt;Unfortunately the math just doesn&apos;t work out.  Even with gas costing $2.70 and my excessive commute, the money saved on gas won&apos;t be able to offset the price of even the cheapest used ECHO within a reasonable time.  The ECHO will cost me more than my current Mazda for the next 3-4 years. &lt;/p&gt;
&lt;p&gt;The gap only widens as well due to my excessive driving.  I&apos;ve resigned to the fact that I&apos;m going to drive the value of my current car into the ground in a relatively short period of time.  I already have over 80k miles on the Mazda.  That really does make me pause and reconsider if I want to spend $24k on a Prius (or any other slightly valuable car), since I&apos;ll just ultimately destroy its value with miles.&lt;/p&gt;
&lt;p&gt;It seems I really should consider cars as consumable products.  It turns out that the ECHO really would have been the better choice back then, since it started at the same value as the Protege, but it could have been saving me gas money all this time.  Spending more on a car is probably not a good idea for me.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Timex Advanced Instruments
            </title>
            <link>
                https://www.hjsoft.com/blog/Timex_Advanced_Instruments.html
            </link>
            <pubDate>Thu, 6 Oct 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Timex_Advanced_Instruments.html
            </guid>
            <description>
                &lt;p&gt;I finally remembered to call the Timex Advanced Instruments division to order a replacement watch band for my Timex Helix WRKS watch.  It just sounds funny to have had to call Advanced Instruments.&lt;/p&gt;
&lt;p&gt;The band itself is surprisingly inexpensive.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Lunch
            </title>
            <link>
                https://www.hjsoft.com/blog/Lunch.html
            </link>
            <pubDate>Wed, 5 Oct 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Lunch.html
            </guid>
            <description>
                &lt;p&gt;If I&apos;d actually leave work over lunch and &lt;em&gt;take&lt;/em&gt; my lunch hour, maybe I wouldn&apos;t feel quite so burnt out day in and day out.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sony Ericsson S710a
            </title>
            <link>
                https://www.hjsoft.com/blog/SonyEricsson_S710a.html
            </link>
            <pubDate>Tue, 20 Sep 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/SonyEricsson_S710a.html
            </guid>
            <description>
                &lt;p&gt;After almost no time spent obsessing over the &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=602&quot;&gt;SonyEricsson S710a&lt;/a&gt;, I&apos;ve found occassion to buy the thing -- Claire broke her phone, so we had to head off to the local &lt;a href = &quot;http://www.cingular.com&quot;&gt;Cingular&lt;/a&gt; store for a couple new phones and contracts.&lt;/p&gt;

&lt;p&gt;I justified the paying the $200 (after rebate) by telling myself it&apos;s my only device -- I carry this in place of a camera, PDA, gameboy, media player, whatever.&lt;/p&gt;
&lt;p&gt;It&apos;s been pretty slick so far, and the feature lists available on all the other websites represent all the good things about the device.   Since there are so many positive things about the phone, I may just focus more on some of the negative surprises here.&lt;/p&gt;
&lt;h1&gt;Camera&lt;/h1&gt;
&lt;p&gt;The camera is pretty decent, and it has lots of configurations.  It sets EXIF data on the images, so I can more easily tell when I took the picture and it even the figures out the orientation (horizontal or vertical) of the photo, so it can be automatically rotated on the PC.&lt;/p&gt;
&lt;p&gt;When viewing photos, there&apos;s a &lt;b&gt;More&lt;/b&gt;-&amp;gt;&lt;b&gt;Use&lt;/b&gt;-&amp;gt;&lt;b&gt;Rotate&lt;/b&gt; option which seems to only rotate the display of the image locally.  If you send this picture off, it&apos;ll still be in its original (sideways) orientation.  For images 320x240 or smaller, there&apos;s an &lt;b&gt;Edit&lt;/b&gt; option which has its own &lt;b&gt;Rotate&lt;/b&gt; tool to permanently rotate an image.  Larger images can not be rotated permanently on the phone.  That&apos;s sort of disappointing, since I&apos;ll need to always take upright pictures to send off to the &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/john/&quot;&gt;moblog&lt;/a&gt;
or take them smaller.  I had hoped to write a little plugin or something to get &lt;a href = &quot;http://blojsom.sf.net&quot;&gt;Blojsom&lt;/a&gt; to thumbnail and link the large images for me.  Maybe I&apos;ll need to figure out how to rotate the image as well according to the EXIF orientation data.&lt;/p&gt;
&lt;p&gt;From within the camera function, there is a &lt;b&gt;Send&lt;/b&gt; button as soon as you snap a picture.  This option initially presented me with options to &lt;b&gt;Send via MMS&lt;/b&gt; or &lt;b&gt;Send to Kodak Mobile&lt;/b&gt; -- there&apos;s no &lt;b&gt;Send via Email&lt;/b&gt;.  Playing with the &lt;b&gt;Message&lt;/b&gt;-&amp;gt;&lt;b&gt;Settings&lt;/b&gt;-&amp;gt;&lt;b&gt;Web Storage&lt;/b&gt; options, I managed to add and select my own Web Storage with my moblog email address.  This made my custom option available in the camera&apos;s &lt;b&gt;Send&lt;/b&gt; option.  Trying it, I found that the message got sent in such a way that Blojsom didn&apos;t quite handle it correctly (dropped the JPG extension and formed a broken link), and it came from &lt;em&gt;number&lt;/em&gt;@mms.mycingular.com -- it went out as an MMS, not normal email.  I ended up having to just drop back and send it explicitly attached to an email from the built-in email client, not from the camera.&lt;/p&gt;
&lt;h1&gt;Messaging&lt;/h1&gt;
&lt;p&gt;This brings me to the messaging options.  AT&amp;amp;T Wireless gave me a little mMode account with email which I conveniently dedicated to my phone.  Cingular doesn&apos;t do this, so I needed to create a mobile email address for myself -- I don&apos;t like having this thing hooked up to my primary email account all the time.  In all the default accounts, the Outgoing Mail server is set to &lt;code&gt;cwmx.net&lt;/code&gt;, so I kept that for mine.  Since the email client insists on authenticating against an incoming server somewhere (even though it&apos;s unrelated to the outgoing server), I needed to set up my incoming account before I could email any pictures.&lt;/p&gt;
&lt;p&gt;I&apos;ve found that I can send:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SMS to other phones&lt;/li&gt;
&lt;li&gt;SMS to email addresses (as mobile.mycingular.com)&lt;/li&gt;
&lt;li&gt;MMS to other phones&lt;/li&gt;
&lt;li&gt;MMS to email (as &lt;em&gt;number&lt;/em&gt;@mms.mycingular.com)&lt;/li&gt;
&lt;li&gt;Email through the normal email client from my mobile address. I configured the email client to poll my mobile email address every 5 minutes over the EDGE network connection, so that works as an almost live messaging option.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&apos;s a whole lot of messaging options.  Additionally, there are IM networks which I don&apos;t intend to actually use.  Maybe I&apos;ll load a Jabber Java midlet someday.&lt;/p&gt;
&lt;h1&gt;EDGE/WAP/HTTP&lt;/h1&gt;
&lt;p&gt;The default internet configuration for the phone&apos;s browser used HTTP through a proxy instead of WAP through a gateway.  It may have been the HTTP proxy or something, but the browser seemed very slow and unreliable.  I&apos;d often get failures trying to load some MediaNet pages, and my bank&apos;s mobile access just rendered blankly.  Switching to the WAP settings (found in Cingular&apos;s knowledge-base) work much more reliably, and communicate properly with my bank.  Rendering seems to be the same for most my normal websites with either configuration.&lt;/p&gt;
&lt;p&gt;Once I got tethering setup (which took a bit more configuration than it did with AT&amp;amp;T), I found I was getting the same old high ping-times (800ms), but my downloads could run at a blazing 26kBps (yeah, BYTES).  EDGE is kind of cool like that.&lt;/p&gt;
&lt;h1&gt;Java&lt;/h1&gt;
&lt;p&gt;I&apos;ve managed to push my little toy MIDP 1.0 application to my phone and it runs nicely -- quicker than on the T616, which I&apos;d expect.  The couple little 3D games they had loaded on the phone were very limited demos, so I just deleted them.  I&apos;ll probably code to the MIDP 1.0 spec for a while just to keep wider compatibility, but I look forward to exploring MIDP 2.0 once MIDP 1.0 gets too awkward.  I have a bunch of applications to test, like Jabber and SSH midlets.&lt;/p&gt;
&lt;p&gt;I did try a little motion detecting camera app.  I was amused to see the application successfully enable and access the camera.  I couldn&apos;t find an &quot;Ask only once&quot; option, though so the application stops and asks me permission every 1 second when it tries to snap a picture.  That obviously won&apos;t work.  The phone doesn&apos;t seem to want to allow me to change some of the application-specific Java permissions.  Hopefully, I&apos;ll stumble upon a solution to this one.&lt;/p&gt;
&lt;h1&gt;Bluetooth&lt;/h1&gt;
&lt;p&gt;I had to hack Bluemote 2.0 a bit to get it to even be able to connect to the phone.  It just seems to be a minor issue of the read buffers.  Once I figure it out cleanly, I&apos;ll submit a patch.&lt;/p&gt;
&lt;p&gt;The directory hierarchy on the card and camera memory is amazingly deep.  I pull my photos from camera memory using &quot;Phone Memory/Pictures/camera_semc/100MSDCF&quot; as the source path in &lt;code&gt;obexftp&lt;/code&gt;.  Alternatively, the phone actually came with a little 3-in-1 USB card reader from Sony.  It works beautifully with Linux as standard USB storage.&lt;/p&gt;
&lt;h1&gt;Media&lt;/h1&gt;
&lt;p&gt;I&apos;m looking forward to trying to use the MP3 player to carry a short podcast or 2 with me and play them in the car without having to boot up my notebook.  There doesn&apos;t seem to be a commercially available stereo adapter available, though.  There are supposedly schematics available to build one.  The normal old hands-free adapter for Sony Ericssons seems to only hook up the right side.  I&apos;m sure I can figure out something.&lt;/p&gt;
&lt;p&gt;The camera also stores 3gp files, which I got mplayer to play with a bit of &lt;a href = &quot;http://tuxas.net/howto/howto-add-video-3gpp.html&quot;&gt;convincing&lt;/a&gt;, but sound doesn&apos;t seem to work.  I&apos;ve seen some &lt;a href = &quot;http://www.home.no/ole.aamot/triangle.html&quot;&gt;notes about patching mplayer&lt;/a&gt; with the AMR sound format reference source, but haven&apos;t tried it yet.&lt;/p&gt;
&lt;h1&gt;Further Reading&lt;/h1&gt;
&lt;p&gt;For the next several weeks, I&apos;m sure I&apos;ll be lurking on &lt;a href = &quot;http://www.howardforums.com/&quot;&gt;HowardForums&lt;/a&gt; and &lt;a href = &quot;http://www.phonescoop.com/forums/&quot;&gt;PhoneScoop Forums&lt;/a&gt;, and Cingular&apos;s Online Help digging for tips and tricks pertaining to this phone.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (20 September 2005):&lt;/b&gt; The little cover over the bottom port (for charging and hands-free) pops off often.  I never remember to close it after charging, so I knock it off putting it in the case.  I also rip the thing off when I open the phone with something plugged into it.  It&apos;s a poor design, and I&apos;ll eventually just lose the thing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Phone Lust: Siemens S66 vs SonyEricsson S710a
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Phone_Lust_Siemens_S66_vs_SonyEricsson_S710a.html
            </link>
            <pubDate>Wed, 31 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Phone_Lust_Siemens_S66_vs_SonyEricsson_S710a.html
            </guid>
            <description>
                &lt;p&gt;Much to Claire&apos;s dismay, I&apos;ve been obsessing over new phones again.  The contenders for my many dollars are the &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=502&quot;&gt;Siemens S66&lt;/a&gt; and the &lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=602&quot;&gt;SonyEricsson S710a&lt;/a&gt;.  Both phones seem comparable with their Java (MIDP 2.0/CLDC 1.1/3D), 1.3MP cameras, GPRS, and Bluetooth.&lt;/p&gt;
&lt;p&gt;For $100 more than the price of the S66, the S710a has the faster EDGE network, MP3 player, bigger and more colorful screen, and built in camera light.  All these features really tempt me.&lt;/p&gt;
&lt;p&gt;The S66 has one thing over the S710a: Java Bluetooth support.  Java BT makes me really consider this phone, but I must ask myself, &quot;Will anyone else have Java BT to which I can network my phone from within my Java software?&quot;  The answer will probably be &quot;No&quot; for quite some time.  I also prefer the solid, candy-bar form factor of the S66 (like my current T616).&lt;/p&gt;
&lt;p&gt;When I bought my T616, it was already nearly 2-year-old technology.  I thought the Java implementation was better than it turned out to be -- MIDP 1.0 is pretty limited and the phone lacks a socket implementation, so I can&apos;t run cool SSH or Jabber midlets. I also regarded the camera phone as a toy, so I didn&apos;t worry about the picture quality.  I want a much better camera this time, since it&apos;s the camera I actually have with me all the time, and I&apos;ve taken many more pictures with it than I would have ever expected.&lt;/p&gt;
&lt;p&gt;Now I&apos;m upgrading my expectations, and going for some of the best features -- maybe this new phone can avoid obsolescence for a bit longer.  If I really do manage to keep the phone for a couple years, will I regret not having Java BT support or not having the network speed of EDGE?&lt;/p&gt;
&lt;p&gt;Honestly, I shouldn&apos;t feel this compelled to shop for a new phone, since there&apos;s absolutely nothing wrong with my current phone for what I do.     The problem is the rate at which these phones come and go.  I used to think the longer I wait, the cheaper the phones get and the better the features.  In reality, carriers have been dropping the phones before they get super cheap or before they even have an equivalent replacement.  I&apos;ve often seen lulls where there are &lt;em&gt;no&lt;/em&gt; good phones from which to choose.  Already, Cingular seems to have dropped the S66 from their website, and it looks like I may only be able to get the S710a.  If I wait a couple more months, will the S710a be gone too?  Then they&apos;ll have nothing with the features I want at a comfortable price.  (The RAZR is comparable, but has a lower-quality camera, so I&apos;m not bothering with it.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Google Talk
            </title>
            <link>
                https://www.hjsoft.com/blog/Google_Talk.html
            </link>
            <pubDate>Thu, 25 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Google_Talk.html
            </guid>
            <description>
                &lt;p&gt;I won&apos;t bother using the new &lt;a href = &quot;http://www.google.com/talk/&quot;&gt;Google Talk&lt;/a&gt;, but I may finally be able to convince my friends to drop all other IM networks in favor of this open &lt;a href = &quot;http://www.jabber.org/&quot;&gt;Jabber&lt;/a&gt; network.&lt;/p&gt;
&lt;p&gt;I&apos;ve been running my own Jabber server for years, but I&apos;ve always relied upon the sometimes-flaky transports to relay messages to AOL friends.  Now maybe, I&apos;ll be able to drop the transports for a pure Jabber implementation.&lt;/p&gt;
&lt;p&gt;When all of you get hooked up, try adding me to your contacts: &lt;em&gt;john@jabber.hjsoft.com&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (25 August 2005):&lt;/b&gt; &lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt; and &lt;a href = &quot;http://insanity.angelfall.net/&quot;&gt;Stacey&lt;/a&gt; have proven that server-to-server (s2s) do not work yet on talk.google.com, so you &lt;em&gt;won&apos;t&lt;/em&gt; be able to message me yet.&lt;/p&gt;
&lt;p&gt;I really hope they manage to enable s2s, so they can intercommunicate.  Only being able to IM Google Talk users would be like only being able to email GMail users from GMail.  The migrating users may not realize that yet, since their previous IM networks had never been so open.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Shopping List: 24 August 2005
            </title>
            <link>
                https://www.hjsoft.com/blog/Shopping_List_24_August_2005.html
            </link>
            <pubDate>Wed, 24 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Shopping_List_24_August_2005.html
            </guid>
            <description>
                &lt;p&gt;My mental shopping lists are getting quite long these days.&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;
Beer:
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://www.seadogbrewing.com/seadogbrews.php&quot;&gt;Old Sea Dog Raspberry Wheat Ale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://www.weyerbacher.com/cwo/Our_Beers/Raspberry_Imperial_Stout/&quot;&gt;Weyerbacher&apos;s Raspberry Imperial Stout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://www.brooklynbrewery.com/OurBeers/OurBeers.asp?BeerID=22&quot;&gt;Brooklyn Brewery&apos;s Black Chocolate Stout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
Technology:
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://www.phonescoop.com/phones/phone.php?p=602&quot;&gt;SonyEricsson S710a&lt;/a&gt; - Java (MIDP2.0/Java3D), BT, 1.3MP camera, EDGE.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
Books:
&lt;ul&gt;
&lt;li&gt;Joshua Bloch&apos;s &lt;a href = &quot;http://java.sun.com/docs/books/effective/&quot;&gt;Effective  Java Programming Language Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
Toys for Paige:
&lt;ul&gt;
&lt;li&gt;Everything &lt;a href = &quot;http://www.hitentertainment.com/thomasandfriends/usa/homepage.html&quot;&gt;Thomas&lt;/a&gt; - puzzles, books, trains.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
Theater:
&lt;ul&gt;
&lt;li&gt;Season tickets to the &lt;a href = &quot;http://www.atthefulton.com/pages/index.php?pID=31&quot;&gt;Fulton Theater&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eclipse/SWT/GTK2 Driving Me Nuts
            </title>
            <link>
                https://www.hjsoft.com/blog/EclipseSWTGTK2_Driving_Me_Nuts.html
            </link>
            <pubDate>Tue, 23 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/EclipseSWTGTK2_Driving_Me_Nuts.html
            </guid>
            <description>
                &lt;p&gt;GTK has been driving me nuts recently, since I&apos;ve realized that I can&apos;t figure out how to change the font size of the GTK widgets.  In particular, I can&apos;t shrink the size of the Tree widget that&apos;s used by Eclipse on SWT on GTK2.&lt;/p&gt;
&lt;p&gt;Within Eclipse, I have all the fonts shrunken, so I can fit more on my mere XGA (1024x768) ThinkPad screen, but the trees and menus still insist on rendering at 12- or 14pt fonts.&lt;/p&gt;

&lt;p&gt;I&apos;ve poked around in &lt;code&gt;gnome-font-properties&lt;/code&gt;, and I&apos;ve even tried adding promising bits to my &lt;code&gt;~/.gtk*&lt;/code&gt; files, but nothing seems to actually affect the fonts.&lt;/p&gt;
&lt;p&gt;Someday I&apos;ll stumble upon a way to do it, and until then, I&apos;ll have to fight the current distraction of not being able to do it.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (23 August 2005):&lt;/b&gt; &lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt;&apos;s Gnome 2.8 install on his Gentoo box applies the &quot;Application Font&quot; uniformly around menus, panels, trees, everything.  My Debian Gnome 2.10 does not behave so admirably.  The &quot;Application Font&quot; seems to be ignored by all GTK applications.  Even a fresh user with fresh configurations exhibits the problem.&lt;/p&gt;
&lt;p&gt;Further googling around with this new context still reveals nothing useful, so I guess I&apos;ll submit a bug with Debian.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Another Update:&lt;/b&gt;  I&apos;ve found the right lines to add to my .gtkrc-2.0:&lt;/p&gt;
&lt;pre&gt;style &quot;user-font&quot; {
    font_name = &quot;Sans 10&quot;
}
widget_class &quot;*&quot; style &quot;user-font&quot;
&lt;/pre&gt;
&lt;p&gt;Now all my GTK apps have the smaller fonts.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Refactoring: Improving the Design of Existing Code
            </title>
            <link>
                https://www.hjsoft.com/blog/Refactoring_Improving_the_Design_of_Existing_Code.html
            </link>
            <pubDate>Tue, 16 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Refactoring_Improving_the_Design_of_Existing_Code.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently picked up and read &lt;a href = &quot;http://martinfowler.com/&quot;&gt;Martin Fowler&lt;/a&gt;&apos;s book, &lt;a href = &quot;http://martinfowler.com/books.html#refactoring&quot;&gt;&lt;em&gt;Refactoring: Improving the Design of Existing Code&lt;/em&gt;&lt;/a&gt;.  It had been tempting me for a couple months, but I ended up waiting for a bookstore coupon and a couple gift cards before buying it.&lt;/p&gt;
&lt;p&gt;The book is full of all the ideas in refactoring that you already know or mostly know plus expanded discussion of these seemingly simple ideas.  The discussion effectively allayed my fear of changes, placed caution where it belongs, and all around boosted my confidence in these techniques.&lt;/p&gt;
&lt;p&gt;Chapters 1 and 2 provide very introductory justifications and examples of refactoring, including &quot;What should I tell my manager?&quot;.&lt;/p&gt;
&lt;p&gt;Chapter 3 lists common &lt;em&gt;Code Smells&lt;/em&gt; -- examples of code which doesn&apos;t feel right and needs to be refactored.  It&apos;s great fun to read this chapter and identify names for all the problems you&apos;ve seen in code of your own and others.  More importantly, each code smell is accompanied by a list of possible refactorings which will help you eliminate it.&lt;/p&gt;
&lt;p&gt;Chapter 4 gives you a quick little introduction to test-driven development, and its virtues when you&apos;re refactoring code.  Unit tests are just one method to help build confidence that you&apos;ve not broken anything.  All the refactorings are presented as tiny steps after which you always run your tests.  It helped me greatly to think about refactoring in small incremental steps instead of my previous &quot;rip it out and recode until it compiles again&quot; techniques.&lt;/p&gt;
&lt;p&gt;The largest chunk of the book, Chapters 5-11, is the catalog of refactorings.  The catalog provides methodical steps for safely applying each refactoring when needed.  Many of the refactorings are simple, but I&apos;ve always been reluctant to bother with those small changes.  I quickly recognized the value of simple changes (like renaming things).  Seeing the steps laid out, I could feel much more comfortable applying them when I used to shy away from it.&lt;/p&gt;
&lt;p&gt;Many refactorings, such as eliminating temporary variables, felt like good ideas previously, but I didn&apos;t have the experience to know for certain.  The detailed discussions relate years of experience and fill in the gaps in my own experience.  I can confidently recommend or apply changes and know I&apos;m headed in the right direction with each small step.  It&apos;s also reassuring to know I can easily undo my changes if I find them inappropriate.  I refactor much more, just as I read code, to capture my understanding as I go.  Extracting methods with meaningful names is just one invaluable technique that I use as I try to understand a new piece of code.  Before reading the book, I hadn&apos;t realized how valuable such changes could be.  Using &lt;a href = &quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; and its automatic refactorings makes this especially easy.&lt;/p&gt;
&lt;p&gt;Chapter 12 discusses a few of the larger refactorings that can take months of applying the small refactorings.&lt;/p&gt;
&lt;p&gt;Chapters 13-15 provide a conclusion to everything.  William Opdyke provides some real-world views of refactoring, concerns, and implications.  There&apos;s lengthy discussion of implementing automatic refactorings in tools, which seems quite out-of-date with the advent of most these things in Eclipse and other IDEs.  It seemed that in 1999, when the book was published, only Smalltalk had a reasonable refactoring browser.&lt;/p&gt;
&lt;p&gt;This book sits well with the other classic references on my book shelf, such as the &lt;a href = &quot;http://www.hjsoft.com/blog/link/GoF_Design_Patterns&quot;&gt;GoF Design Patterns&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Chili Recipe
            </title>
            <link>
                https://www.hjsoft.com/blog/Chili_Recipe.html
            </link>
            <pubDate>Mon, 8 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Chili_Recipe.html
            </guid>
            <description>
                &lt;p&gt;I made a bit of chili a couple weeks ago over the fire, and it came out pretty well, so I wrote it down to make it my official recipe.&lt;/p&gt;
&lt;h1&gt;John&apos;s Chili (8 qt)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;2 lbs ground beef&lt;/li&gt;
&lt;li&gt;58 oz canned plain tomato sauce&lt;/li&gt;
&lt;li&gt;15.5 oz canned diced tomatos for chili&lt;/li&gt;
&lt;li&gt;93 oz canned dark red kidney beans&lt;/li&gt;
&lt;li&gt;31 oz canned black beans&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;1 onion&lt;/li&gt;
&lt;li&gt;0.5 tomato&lt;/li&gt;
&lt;li&gt;0.5 green bell pepper&lt;/li&gt;
&lt;li&gt;0.5 yellow bell pepper&lt;/li&gt;
&lt;li&gt;3 hot finger peppers&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://insanity.angelfall.net/gallery/20050723/IMG_6445&quot;&gt;1 red chili pepper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;0.25 cup minced garlic&lt;/li&gt;
&lt;li&gt;2 tbsp chili powder&lt;/li&gt;
&lt;li&gt;1 tbsp crushed red pepper&lt;/li&gt;
&lt;li&gt;1 tsp salt&lt;/li&gt;
&lt;li&gt;1 tbsp black pepper&lt;/li&gt;
&lt;li&gt;tabasco&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Over medium heat (dutch oven 6 inches over coals), brown beef with
1 tbsp chili powder.  Don&apos;t drain grease.&lt;/li&gt;
&lt;li&gt;Add tomato sauce, diced tomatos, beans.&lt;/li&gt;
&lt;li&gt;Chop and add &lt;a href = &quot;http://insanity.angelfall.net/gallery/20050723/IMG_6437&quot;&gt;fresh tomato, onion, and peppers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Add minced garlic, and other &lt;a href = &quot;http://insanity.angelfall.net/gallery/20050723/IMG_6442&quot;&gt;seasonings&lt;/a&gt;,
including more chili powder, to taste.&lt;/li&gt;
&lt;li&gt;Adjust heat to boil slowly covered or uncovered,
depending upon desired thickness.&lt;/li&gt;
&lt;li&gt;Stir occassionally, taste liberally, adjust, repeat.&lt;/li&gt;
&lt;li&gt;It&apos;ll probably &lt;a href = &quot;http://insanity.angelfall.net/gallery/20050723/IMG_6470&quot;&gt;cook&lt;/a&gt; for up to 2 hours.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks to &lt;a href = &quot;http://insanity.angelfall.net/&quot;&gt;Stacey&lt;/a&gt; for photodocumenting the process.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Close Your JMS Resources
            </title>
            <link>
                https://www.hjsoft.com/blog/Close_Your_JMS_Resources.html
            </link>
            <pubDate>Mon, 1 Aug 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Close_Your_JMS_Resources.html
            </guid>
            <description>
                &lt;p&gt;In my work code, I had learned to very meticulously close all my JMS resources just to be sure they didn&apos;t hang around too long.  In the first pass of some code, I had neglected this, but felt no repercussions.&lt;/p&gt;
&lt;p&gt;I had not gotten around to applying the same wisdom to my personal blog code, and felt the wrath of the thread limit pretty quickly.  It seems that in JBoss, every &lt;code&gt;QueueSender&lt;/code&gt;, &lt;code&gt;QueueSession&lt;/code&gt;, and &lt;code&gt;QueueConnection&lt;/code&gt; spawns Read and Write Tasks with their own threads, and they just hang around with established connections (as verified with &lt;code&gt;netstat&lt;/code&gt;).  I&apos;m sure the garbage collector would have cleaned these all up eventually, but they were coming too fast (one message per each HTTP request), and they quickly piled up.&lt;/p&gt;
&lt;p&gt;I first saw the issue manifest itself as a &lt;code&gt;java.lang.OutOfMemoryError&lt;/code&gt; due to its inability to spawn more than the 256 maximum threads as set by &lt;code&gt;ulimit&lt;/code&gt;.  A bit later, errors about &quot;too many open files&quot; start popping up as well.  At first, I figured I may just need more threads, but as a classic resource leak goes, bumping up to 512 threads just made it take a little longer to hit the limit again.&lt;/p&gt;
&lt;p&gt;Once I got my resources closing, I watched my thread count bounce around the 87-95.  That&apos;s much better.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Referrer Verification Implemented
            </title>
            <link>
                https://www.hjsoft.com/blog/Referrer_Verification_Implemented.html
            </link>
            <pubDate>Sun, 31 Jul 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Referrer_Verification_Implemented.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve written before about plans to &lt;a href = &quot;http://www.hjsoft.com/blog/link/Details_for_Referrer_Verification&quot;&gt;verify referrers&lt;/a&gt;, and I&apos;ve finally implemented it.&lt;/p&gt;
&lt;p&gt;It works pretty much as I had described.  If the referrer&apos;s already been added to the list, just increment it (and don&apos;t verify it again).  This keeps me from pounding away on valid incoming referrers all day long.  At this point, I &lt;em&gt;do&lt;/em&gt; pound on incoming spam referrers, since they don&apos;t make it into the cache at all.  I may end up implementing some sort of negative cache as well.&lt;/p&gt;
&lt;p&gt;If the referrer is new:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Check it against the blacklist.&lt;/li&gt;
&lt;li&gt;Call the referrer URL and search the content for a link to my site (which makes it a valid referrer).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To keep the normal user from feeling the latency introduced by the extra check, I&apos;ve moved the whole referrer process into a message driven bean of its own.&lt;/p&gt;
&lt;p&gt;Interestingly, I found Google forbids the &quot;Java&quot; User-agent and returned &lt;code&gt;403 Forbidden&lt;/code&gt; when I tried to verify a link.  I had to change my User-agent header on the &lt;code&gt;URLConnection&lt;/code&gt;.  Google also blocked stock &lt;code&gt;wget&lt;/code&gt; User-agent as well.&lt;/p&gt;
&lt;p&gt;So that I can watch it work, the callback action logs the line of html which matched, or logs the whole page that didn&apos;t match.  It&apos;s quite satisfying to watch it actually working.  Maybe I&apos;ll be able to trim my blacklist to only the most obvious keywords, now that I won&apos;t really need to add to it nearly as frequently.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bluemote 2.0
            </title>
            <link>
                https://www.hjsoft.com/blog/Bluemote_20.html
            </link>
            <pubDate>Thu, 28 Jul 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bluemote_20.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt; pointed out that &lt;a href = &quot;http://www.geocities.com/saravkrish/progs/bluemote/&quot;&gt;Bluemote 2.0&lt;/a&gt; is out.  It&apos;s quite nice.  The author&apos;s added support for events, so your computer can know when you walk away, get an incoming call, etc.&lt;/p&gt;
&lt;p&gt;The new configuration is a bit nicer, but more complex, and I guess I just missed the part in the documentation where it asks you to create a &lt;code&gt;~/.bluemote&lt;/code&gt; directory, so it can create its lock file.  It only took me 10 minutes or so of debugging to get it all working nicely.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mazda Service Manual
            </title>
            <link>
                https://www.hjsoft.com/blog/Mazda_Service_Manual.html
            </link>
            <pubDate>Thu, 28 Jul 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mazda_Service_Manual.html
            </guid>
            <description>
                &lt;p&gt;My 2002 Mazda Protege was idling a bit slowly, and I found that I can&apos;t by a &lt;a href = &quot;http://www.haynes.com/&quot;&gt;Haynes&lt;/a&gt; manual yet for a car this new.  (With over 76k miles on it, it&apos;s long out of warranty.)&lt;/p&gt;
&lt;p&gt;I fortunately managed to find a copy of the &lt;a href = &quot;http://protege5.ugly.net/&quot;&gt;2002 shop service manual&lt;/a&gt; online, and it led me through a few troubleshooting steps.  Along the way, the checking and reseating plugs and vaccuum lines seems to have fixed the problem, so it&apos;s running fine now.&lt;/p&gt;
&lt;p&gt;This online manual may sound like a treasure trove of information, but the chopped up PDF format makes it a bit hard to navigate.  I could barely figure out that &quot;IAC&quot; stood for &quot;Idle Air Control&quot;, much less where it actually exists on the car.  The section on checking this component didn&apos;t seem to have a diagram of where it&apos;s found, so I&apos;ll still be hoping to pick up a Haynes manual for the common layperson when it comes out.&lt;/p&gt;
&lt;p&gt;A couple weeks ago, I found another manual for my car, &lt;a href = &quot;http://www.wiley.com/WileyCDA/WileyTitle/productCd-0764578766.html&quot;&gt;ExtremeTech&apos;s &lt;em&gt;Geek My Ride&lt;/em&gt;&lt;/a&gt;.  It&apos;s a book about adding toys (game consoles, media PCs, general PCs, displays, etc) to a car.  It&apos;s supposed to be good advice for any car, but I noticed in all the photos that they&apos;re example car looks just like my  2002 Protege.  I wouldn&apos;t mind reading this book for ideas on providing power, automatic powering up and down, and non-distracting input methods -- it seems to have all this.  It&apos;s definitely tempting to try to tech out my car just for the hell of it.  The hardest part appears to be scraping together cash to buy all the components.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Benedict Connor
            </title>
            <link>
                https://www.hjsoft.com/blog/Benedict_Connor.html
            </link>
            <pubDate>Thu, 21 Jul 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Benedict_Connor.html
            </guid>
            <description>
                &lt;p&gt;I was gone for a bit for the &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/baby/&quot;&gt;birth of my son&lt;/a&gt;.  Now I&apos;m back to work.  The time off was very welcome, and it was good to spend some extended time with the family.  It went quickly.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                FireFox Adblock
            </title>
            <link>
                https://www.hjsoft.com/blog/FireFox_Adblock.html
            </link>
            <pubDate>Fri, 8 Jul 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/FireFox_Adblock.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve just loaded the &lt;a href = &quot;https://addons.mozilla.org/extensions/moreinfo.php?id=10&amp;amp;application=firefox&quot;&gt;Adblock&lt;/a&gt; extension for FireFox.  It&apos;s changed the way I browse, at least initially, and that&apos;s not necessarily a good thing.&lt;/p&gt;
&lt;p&gt;My first odd feeling hit as I blocked &lt;code&gt;googlesyndication.com&lt;/code&gt;, and it made all the Google Ads go away.  I actually think Google Ads are novel, since they try to intelligently target the user, and they&apos;re minimally intrusive on most sites.  If I were to put ads on any of my sites, I&apos;d probably go with Google Ads.&lt;/p&gt;
&lt;p&gt;In the end, though, I blocked it because I could!  I may unblock that at some point.  I almost never click on the ads, so I guess I&apos;m not really robbing the sites of ad revenue by just not showing them.&lt;/p&gt;
&lt;p&gt;Secondly, I browse differently now.  I hit a site, and the first thing I do is search for ads to block, check the Adblock list to see if anything&apos;s already been blocked, &lt;em&gt;then&lt;/em&gt; I go read the site.  It&apos;s the thrill of the hunt! (I&apos;m such a geek.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Split the Cable, Split the Packets
            </title>
            <link>
                https://www.hjsoft.com/blog/Split_the_Cable_Split_the_Packets.html
            </link>
            <pubDate>Fri, 1 Jul 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Split_the_Cable_Split_the_Packets.html
            </guid>
            <description>
                &lt;p&gt;I installed my little PixelView BT848 card into my server, so I needed a cable connection to it. I found a random cable splitter, and went to work inserting the splitter into the line before my cablemodem.&lt;/p&gt;
&lt;p&gt;Apparently, this is not one of the splitters approved for broadband, because I had been on and off dropping 40% packets just trying to get anywhere past my cablemodem (say, other Comcast subscribers).  When I finally realized this, I tried other cables and such, to find out it was definitely the splitter.&lt;/p&gt;
&lt;p&gt;I&apos;ll have to go find a better splitter before I can get into exploring MythTV or some other DVR package.  I did have xawtv working, though.  Hopefully the better splitter will get me a better signal there too.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                5 Months of Blog Code Development
            </title>
            <link>
                https://www.hjsoft.com/blog/5_Months_of_Blog_Code_Development.html
            </link>
            <pubDate>Mon, 20 Jun 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/5_Months_of_Blog_Code_Development.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve deployed the weblog code for the first time in 5 months.  It looks the same, but a lot has changed behind the scenes.&lt;/p&gt;
&lt;p&gt;Here are the highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Homegrown Struts ChainAction to use &lt;a href = &quot;http://jakarta.apache.org/commons/chain/&quot;&gt;commons chain 1.0&lt;/a&gt; to implement everything in Chain of Responsibility pattern.&lt;/li&gt;
&lt;li&gt;Lots of code cleanup (imports, etc) via Eclipse.&lt;/li&gt;
&lt;li&gt;Shrunken referrer list (shift-reload for that new stylesheet).&lt;/li&gt;
&lt;li&gt;Actually spell &quot;Referrer&quot; the English way, instead of the W3C way (&quot;Referer:&quot; in HTTP headers).&lt;/li&gt;
&lt;li&gt;Incoming trackbacks now get truncated to avoid overtaking the &quot;Last Comment&quot; panel.&lt;/li&gt;
&lt;li&gt;Upgrade to Struts 1.2.7.&lt;/li&gt;
&lt;li&gt;XHTML 1.0 Strict.&lt;/li&gt;
&lt;li&gt;Comments are required to be XHTML 1.0 Strict to be saved.&lt;/li&gt;
&lt;li&gt;Upgrade to use xDoclet 1.2.3, which took some changes to my &lt;code&gt;findAll&lt;/code&gt; finders.&lt;/li&gt;
&lt;li&gt;Now deploy web tier with &lt;code&gt;jboss-client.jar&lt;/code&gt; to alleviate JBoss 4.0.2 classloader issues.&lt;/li&gt;
&lt;/ul&gt;

            </description>
            
        </item>
        <item>
            <title>
                Server Reboot for 2.6.12
            </title>
            <link>
                https://www.hjsoft.com/blog/Server_Reboot_for_2612.html
            </link>
            <pubDate>Mon, 20 Jun 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Server_Reboot_for_2612.html
            </guid>
            <description>
                &lt;p&gt;Linux 2.6.12 came out, so I finally upgraded and rebooted the server after running Linux 2.6.8.1 for just over 283 days.  This also afforded me the opportunity to install a cheap BT848 tuner/capture card and a donated 3DFX Voodoo3.&lt;/p&gt;
&lt;p&gt;I intend to try to setup some sort of web-controlled PVR with the BT848.  I mostly want to be able to record a few network television shows for later viewing.  At the slow and rocky pace, I&apos;ll get it working by the time analog video signals are replaced by digital.&lt;/p&gt;
&lt;p&gt;The Voodoo3 moves my video processing onto the AGP bus from the PCI bus, and allows smooth playback of video and audio at the same time on the box -- I&apos;ll be able to edit video on that box nicely now.  I do have an odd console issue where my console font gets slightly corrupted when I switch back to a VC from X, but a &lt;code&gt;consolechars -d&lt;/code&gt; corrects it.  Initial Google searches have been fruitless.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Blog Code TODO List
            </title>
            <link>
                https://www.hjsoft.com/blog/Blog_Code_TODO_List.html
            </link>
            <pubDate>Mon, 20 Jun 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Blog_Code_TODO_List.html
            </guid>
            <description>
                &lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://www.hjsoft.com/blog/link/Details_for_Referrer_Verification&quot;&gt;Referrer Verification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Small list structures for sidebar.&lt;/li&gt;
&lt;li&gt;del.icio.us RSS import into sidebar.&lt;/li&gt;
&lt;li&gt;Easier link resequencing -- Automatically renumber sequence numbers, so eventually, I&apos;ll not even need to know the sequence numbers in the admin interface.&lt;/li&gt;
&lt;li&gt;Correct XHTML error handling in comments.&lt;/li&gt;
&lt;li&gt;Find a nice happy medium for handling BlogContext that gets passed around by chain Commands.&lt;/li&gt;
&lt;li&gt;Figure out how I want to implement branch logic in chains, especially in the save/preview comment flow.&lt;/li&gt;
&lt;/ul&gt;

            </description>
            
        </item>
        <item>
            <title>
                Debian PostgreSQL 8.0.x Upgrade
            </title>
            <link>
                https://www.hjsoft.com/blog/Debian_PostgreSQL_80x_Upgrade.html
            </link>
            <pubDate>Mon, 13 Jun 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Debian_PostgreSQL_80x_Upgrade.html
            </guid>
            <description>
                &lt;p&gt;Debian&apos;s released 3.1r0a, so it&apos;s time for chaos to ensue in the unstable branch.  All the maintainers can push their cutting edge stuff out that they&apos;ve been holding.&lt;/p&gt;
&lt;p&gt;PostgreSQL 8.0.3 was among the long-awaited upgrades.  The maintainers set it all up so that Postgres 7.4.x and 8.0.x could coexist.  I could dump the 7.4 data, copy some configs to 8.0, then reload the data onto the 8.0 database.  That went smoothly enough that I could switch a server within 10 minutes.  I reconfigured 8.0 to use the old port 5432 (instead of 5433 as the coexisting config had), and all the client apps (some PHP, Perl, and my JBoss datasources) were ready to go again.&lt;/p&gt;
&lt;p&gt;After successfully switching over to the 8.0 version, I cleanly purged all the 7.4 Debian packages and retested to confirm that I had no stray dependencies on 7.4.  A couple days after the switch, I realized that I needed to update the paths to PostgreSQL scripts (particularly &lt;code&gt;pg_dumpall&lt;/code&gt;) to get my nightly backups running again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Can I Just Reboot Already?
            </title>
            <link>
                https://www.hjsoft.com/blog/Can_I_Just_Reboot_Already.html
            </link>
            <pubDate>Mon, 13 Jun 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Can_I_Just_Reboot_Already.html
            </guid>
            <description>
                &lt;p&gt;When I saw Linux 2.6.12-rc4 was looking nearly pristine on my notebook, I declared that I&apos;ll finally reboot and upgrade the kernel on my server when 2.6.12 comes out.  Well, that was nearly a month ago, and I&apos;m still waiting.&lt;/p&gt;
&lt;p&gt;I&apos;m up to Linux 2.6.12-rc6 on my notebook, and I&apos;ve heard faint rumblings that 2.6.12 may be out within the next week.  My server&apos;s been up for over 278 days, and I have 2 new cards and a kernel to install whenever that kernel becomes available.  It&apos;s funny how you can&apos;t find a good excuse to reboot some days, and then other days, you can&apos;t keep the machine running at all.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Pointy Things by the Pound
            </title>
            <link>
                https://www.hjsoft.com/blog/Pointy_Things_by_the_Pound.html
            </link>
            <pubDate>Tue, 31 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Pointy_Things_by_the_Pound.html
            </guid>
            <description>
                &lt;p&gt;eBay has a list of &lt;a href = &quot;http://search.ebay.com/NTSA&quot;&gt;things you should not try to take on airplanes&lt;/a&gt; provided by the NTSA.&lt;/p&gt;
&lt;p&gt;I guess you can ship/mail these things, so I must wonder why no one&apos;s started a business shipping these things home for people.  I&apos;d think that the USPS could do quite well, if they set up a post office in the airport.  People buy collectible pointy things or Zippos and have trouble taking them home on the airplanes.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                My POVRay Sphere
            </title>
            <link>
                https://www.hjsoft.com/blog/My_POVRay_Sphere.html
            </link>
            <pubDate>Tue, 31 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/My_POVRay_Sphere.html
            </guid>
            <description>
                &lt;p&gt;I turned my attention for a weekend toward digital rendering, and I rendered a sphere in POVRay several years ago.  I have a long way to be cool like &lt;a href = &quot;http://povcomp.com/hof/&quot;&gt;these people&lt;/a&gt;, but it makes me want to try again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Speak English Good
            </title>
            <link>
                https://www.hjsoft.com/blog/Speak_English_Good.html
            </link>
            <pubDate>Fri, 27 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Speak_English_Good.html
            </guid>
            <description>
                &lt;p&gt;&lt;em&gt;Ack!&lt;/em&gt; I can barely bring myself to use that title!  Anyway, here&apos;s a great link detailing &lt;a href = &quot;https://brians.wsu.edu/common-errors/&quot;&gt;Common Errors in English&lt;/a&gt;.  There are so many curious little corrections, clarifications, and recommendations here.  It should provide for at least an hour or two of not-so-wasted wasting of time.&lt;/p&gt;
&lt;p&gt;I pride myself on my language skills, but I&apos;m always curious to find proper documentation and details of the rules I use.  One particular surprise was the demise of my &quot;no ending sentences with prepositions&quot; rule to a &lt;a href = &quot;https://brians.wsu.edu/common-errors-in-english-usage/non-errors/&quot;&gt;non-error&lt;/a&gt;.  A link from there seems to strike a nice &lt;a href = &quot;http://andromeda.rutgers.edu/~jlynch/Writing/p.html#prepend&quot;&gt;middle ground&lt;/a&gt; with which I can be comfortable. (or...&lt;em&gt;can be comfortable with.&lt;/em&gt; *whimper* *breathe* *breathe*).  I think I may just need to stick with it except in places where my the fake rule necessitates grammatical acrobatics (&quot;This is the sort of English up with which I will not put.&quot;)&lt;/p&gt;
&lt;p&gt;This has been the most grammar-conscious I&apos;ve been in any of my articles, because I know everyone will start picking it apart now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Both R40 Pointers in XFree86
            </title>
            <link>
                https://www.hjsoft.com/blog/Both_R40_Pointers_in_XFree86.html
            </link>
            <pubDate>Fri, 27 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Both_R40_Pointers_in_XFree86.html
            </guid>
            <description>
                &lt;p&gt;I figured out how to get both pointer devices on my R40 working to their fullest capacities.  When I switched to the Synaptics driver to get all the slick touchpad features, I lost my trackpoint.  This wasn&apos;t a big deal, since I don&apos;t use the trackpoint, but it &lt;em&gt;does&lt;/em&gt; have 3 buttons, so it could be nice to have.  I just got it working now by adding a second pointer and using the 2 different input mouse devices.&lt;/p&gt;

&lt;p&gt;Here&apos;s an excerpt from my XF86Config-4:&lt;/p&gt;
&lt;pre&gt;Section &quot;ServerLayout&quot;
    ...
    InputDevice    &quot;Synaptics&quot; &quot;CorePointer&quot;
    InputDevice    &quot;TrackPoint&quot; &quot;CorePointer&quot;
EndSection
Section &quot;InputDevice&quot;
    Identifier  &quot;Synaptics&quot;
    Driver      &quot;synaptics&quot;
    Option      &quot;Protocol&quot; &quot;auto&quot;
    Option      &quot;ZAxisMapping&quot;          &quot;4 5&quot;
    Option      &quot;Device&quot; &quot;/dev/input/mouse0&quot;
    Option      &quot;Emulate3Buttons&quot; &quot;true&quot;
    Option      &quot;Emulate3Timeout&quot; &quot;70&quot;
    Option      &quot;SendCoreEvents&quot;  &quot;true&quot;
    Option      &quot;SHMConfig&quot; &quot;on&quot;
    Option      &quot;EdgeMotionUseAlways&quot; &quot;yes&quot;
    Option      &quot;EdgeMotionMinSpeed&quot; &quot;1&quot;
    Option      &quot;EdgeMotionMaxSpeed&quot; &quot;100&quot;
    Option      &quot;LeftEdge&quot; &quot;1300&quot;
    Option      &quot;RightEdge&quot; &quot;5400&quot;
    Option      &quot;TopEdge&quot; &quot;1400&quot;
    Option      &quot;BottomEdge&quot; &quot;4400&quot;
EndSection
Section &quot;InputDevice&quot;
    Identifier  &quot;TrackPoint&quot;
    Driver      &quot;mouse&quot;
    Option      &quot;Protocol&quot; &quot;auto&quot;
    Option      &quot;Device&quot; &quot;/dev/input/mouse1&quot;
    Option      &quot;SendCoreEvents&quot;  &quot;true&quot;
EndSection&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Update (27 May 2005):&lt;/b&gt;
A couple months ago, I found that my trackpoint stopped functioning some time along the way.  It seems that a newer kernel (I&apos;m at 2.6.12-rc5 currently) managed to bump the trackpoint from &lt;code&gt;mouse1&lt;/code&gt; to &lt;code&gt;mouse2&lt;/code&gt;.  With that adjustment to my XF86Config-4 file, I have the trackpoint, and more importantly, the top 3 buttons functioning again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Everything Bad is Good For You
            </title>
            <link>
                https://www.hjsoft.com/blog/Everything_Bad_is_Good_For_You.html
            </link>
            <pubDate>Tue, 24 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Everything_Bad_is_Good_For_You.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.npr.org/templates/rundowns/rundown.php?prgId=3&quot;&gt;Morning Edition&lt;/a&gt; had a quick little &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4663852&quot;&gt;story about a new book&lt;/a&gt; discussing how people have continued to get smarter from generation to generation.  The author of &lt;em&gt;&lt;a href = &quot;http://www.amazon.com/exec/obidos/ASIN/1573223077/npr-5-20/104-6970397-0787935&quot;&gt;Everything Bad is Good For You&lt;/a&gt;&lt;/em&gt;, Steven Johnson, asserts that even though we&apos;ve been sitting in front of televisions, video games, and computers for a couple generations now, it&apos;s still exercising our brains and proving that we&apos;re smarter.&lt;/p&gt;

&lt;h2&gt;Popular Culture&lt;/h2&gt;
&lt;p&gt;Johnson uses popular television of past and present to demonstrate his point.  He compares the complexity of plots and relationships of older shows to those of today.  Shows like &lt;em&gt;24&lt;/em&gt; are hugely popular, but to follow it, you must comprehend so many more relationships than the comparably popular shows of the past, such as &lt;em&gt;Dallas&lt;/em&gt;.  &lt;em&gt;Hill Street Blues&lt;/em&gt; had a very rough start back in its day due to its complexity, and in the end, the network needed to simplify it a bit for the audiences of the time.  In the past, the general population could never comprehend and get wrapped up in television shows as complex as we do today.&lt;/p&gt;
&lt;p&gt;Video games represent the same progressions.  Kids are reaching for more and more complex and immersive games which actually exercise their minds.  The author keeps his ideas on brain exercise separate from the effects all this has on attention span and multitasking, as they have observably different effects on our capabilities.&lt;/p&gt;
&lt;p&gt;On that note, I&apos;m not keeping up at all.  I can follow &lt;em&gt;CSI&lt;/em&gt;, but I don&apos;t really exercise my brain on TV otherwise, and for a long time, I&apos;ve not had a taste for video games with any complexity, stories, or anything I need to study and learn just to play.  I prefer the simpler arcade-style game which I can absorb and play immediately.  That may very well be an attention span issue, or just due to my limited time for gaming.&lt;/p&gt;
&lt;p&gt;Toward the end of the interview, Johnson relates that his 4-year old son these days can manage to go get his Mom&apos;s Powerbook, open it, login with his password (essentially logging into a Unix account), pull up a browser, and visit sesamestreet.com on his own.  Check out the audio of the story for the actual complete quote.&lt;/p&gt;
&lt;h2&gt;Smarter or Just Different?&lt;/h2&gt;
&lt;p&gt;As I write this, I can&apos;t help but consider alternate forms of entertainment.  Has theater, literature, and radio gotten more complex or stayed about the same?  Were we regularly comprehending these complex relationships in those forms, and it just took us longer to adapt our intelligence to the worlds on the small screen?  There&apos;s plenty of classic literature that people today just don&apos;t &lt;em&gt;get&lt;/em&gt;, but is that due to language barriers or complexity of plot?  What about the evolution of storytelling on television?  Maybe the producers of the shows today have just learned how better to structure the information for us.&lt;/p&gt;
&lt;p&gt;Regardless of the questioning, IQ scores have been on the rise over the past generations, so something causing it, and Steven Johnson thinks this is it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Race to the Phone Toys
            </title>
            <link>
                https://www.hjsoft.com/blog/Race_to_the_Phone_Toys.html
            </link>
            <pubDate>Mon, 23 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Race_to_the_Phone_Toys.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve ordered a small pile of toys and accessories for my T616, including little things to flash when the phone rings, a charger, horizontal pouch case, and the camera phone flash.  Since ordering these things, I&apos;ve also increased the frequency with which I drop the damn thing on the pavement.  With purchasing all the toys, I&apos;ve acknowledged that I&apos;ll keep the phone for a while, but I fear the phone will not survive long enough to see the toys at this rate.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Ultimate in Under-Age Dance Clubs
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Ultimate_in_Under-Age_Dance_Clubs.html
            </link>
            <pubDate>Fri, 20 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Ultimate_in_Under-Age_Dance_Clubs.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.npr.org/templates/rundowns/rundown.php?prgId=2&quot;&gt;All Things Considered&lt;/a&gt; ended their program on Thursday with a story about &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4658994&quot;&gt;Kiddie Dance Parties&lt;/a&gt; with punk rock bands like the &lt;a href = &quot;http://www.candyband.com/&quot;&gt;Candy Band&lt;/a&gt;.  It&apos;s quite amusing.&lt;/p&gt;
&lt;p&gt;I guess &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/paige/&quot;&gt;Paige&lt;/a&gt; can have little toddler raves, but maybe they &lt;em&gt;are&lt;/em&gt; more of a punk crowd with all that jumping, running around, and falling over.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                eBay Searches
            </title>
            <link>
                https://www.hjsoft.com/blog/eBay_Searches.html
            </link>
            <pubDate>Wed, 18 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/eBay_Searches.html
            </guid>
            <description>
                &lt;p&gt;Some people&apos;s websites show you what song they currently have playing, but I haven&apos;t actually coded that bit yet.  Instead, I&apos;m publishing a little list of my recent eBay searches in my tree of links on the sidebar.  That probably gives you a better insight into my psyche than my music selections anyway.&lt;/p&gt;
&lt;p&gt;They&apos;re manually added, so don&apos;t hope to catch my searches for &quot;&lt;em&gt;manual to overthrow government&lt;/em&gt;&quot;, &quot;&lt;em&gt;political revolution for dummies&lt;/em&gt;&quot;, or any of that.  Sorry.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ThinkPad R40 Still Freezing
            </title>
            <link>
                https://www.hjsoft.com/blog/ThinkPad_R40_Still_Freezing.html
            </link>
            <pubDate>Tue, 17 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ThinkPad_R40_Still_Freezing.html
            </guid>
            <description>
                &lt;p&gt;I was hoping that my &lt;a href = &quot;http://www.hjsoft.com/blog/link/ThinkPad_BIOS_Upgrade&quot;&gt;labored BIOS upgrade&lt;/a&gt; would yield a completely stable machine.  It locked on me again today, though.  As usual, it ran for 3-4 days, then froze about 5 minutes after resuming from swsusp.&lt;/p&gt;
&lt;p&gt;I happened to be at my logging console this time, instead of in X.  I got one lone odd asterisk thrown in an odd place on the screen -- usually, I&apos;d see some slight corruptions on the X screen.  The cursor still blinked, but none of the SysRq key combos did anything.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Yard Saling
            </title>
            <link>
                https://www.hjsoft.com/blog/Yard_Saling.html
            </link>
            <pubDate>Tue, 17 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Yard_Saling.html
            </guid>
            <description>
                &lt;p&gt;Having owned my own house for over 2 years now, I  finally sort of admitted that I may need more lawn equipment -- In this case, a little Black and Decker electric trimmer.  For $5 at a yard sale, I figured I may as well.&lt;/p&gt;
&lt;p&gt;I didn&apos;t want to admit it, but the lawn looks much better now with the additional 10 minutes of work.  At least it barely cost me anything.&lt;/p&gt;

&lt;p&gt;I also bought a spare HP LaserJet 4L which actually works!  Laser printers are just so reliable and economical -- long lasting toner instead of crap ink that&apos;s dry every time I need to print something.&lt;/p&gt;
&lt;p&gt;Paige made out the best of everyone, though, with lots of toys and a couple hotdogs.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Dress Code
            </title>
            <link>
                https://www.hjsoft.com/blog/Dress_Code.html
            </link>
            <pubDate>Tue, 17 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Dress_Code.html
            </guid>
            <description>
                &lt;p&gt;Here are some timeless &lt;a href = &quot;http://www.dba-oracle.com/dress_code.htm&quot;&gt;dress code tips&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Hoops for JBoss 4.0.2
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Hoops_for_JBoss_402.html
            </link>
            <pubDate>Mon, 16 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Hoops_for_JBoss_402.html
            </guid>
            <description>
                &lt;p&gt;With the release of JBoss AS 4.0.2, the embedded Tomcat has been &lt;a href = &quot;http://jira.jboss.com/jira/browse/JBAS-1691&quot;&gt;switched to try to do classloading according to the servlet specification&lt;/a&gt;.  I&apos;ve always flipped these switches myself in previous versions to avoid hot deploy issues between Tomcat and JBoss.  Now that&apos;s the default config, but it&apos;s not quite the same now.&lt;/p&gt;
&lt;p&gt;I have my interfaces to my EJBs packaged into a client jar, and I load that client jar into my webapp.  To use these client interfaces Tomcat needs the classes from the standard jboss-client.jar.  Older versions of the app server seemed to manage to load this system jar with Tomcat&apos;s classloader, so those in turn could find the classes from my client jar in the appropriate classloader.  JBoss 4.0.2 started throwing ClassCastExceptions and invocation errors in different configurations, unless I re-enabled the UseJBossWebLoader, which is what I had been avoiding since the beginning.&lt;/p&gt;
&lt;p&gt;I finally figured out in the end, that I could use the default web classloader settings, ensure the call from Tomcat to my EJB facade was remote by explicitly mapping the ejb-ref to &lt;em&gt;jnp://localhost:1099/blog/BlogSession&lt;/em&gt; instead of just &lt;em&gt;blog/BlogSession&lt;/em&gt; (that was trying to optimize it into a call-by-reference).  Then I needed to add the jboss-client.jar to my war file, so it gets loaded by the webapp classloader, and not a higher one.  Now it works again.&lt;/p&gt;
&lt;p&gt;My old config must have still been tying itself into the UCL at some level, but not enough to cause reload problems.  This seems to be getting to be a noisy issue on the forums, and some upper-level JBoss people have expressed dissatisfaction with this particular config, so hopefully they tune it out, and maybe I&apos;ll not need the jboss-client.jar in my webapp war file in 4.0.3.  I&apos;m curious if this would normally be necessary in other standard application servers.  I&apos;m guessing not, but I can rationalize the requirement now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ThinkPad BIOS Upgrade
            </title>
            <link>
                https://www.hjsoft.com/blog/ThinkPad_BIOS_Upgrade.html
            </link>
            <pubDate>Fri, 13 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ThinkPad_BIOS_Upgrade.html
            </guid>
            <description>
                &lt;p&gt;I finally got around to upgrading the BIOS on my R40, and it couldn&apos;t have been more difficult.  IBM only provides a Windows program and a DOS program to create a boot floppy.  I don&apos;t have a floppy or Windows on this machine.&lt;/p&gt;
&lt;p&gt;A consultant friend at work helped by providing an old ThinkPad drive which actually had Windows installed.  We tried it as primary drive, in the ultrabay, and as a USB drive, but it wouldn&apos;t boot properly.  Finally, he did dig up his old ThinkPad floppy drive, and we did the BIOS upgrade with the floppy disk.&lt;/p&gt;
&lt;p&gt;If IBM would just provide a CD image I could burn to CD-R, I would have been done much quicker.  Now I have to contemplate spending money on a floppy drive just for the rare occassion of trying to do a BIOS upgrade.  I&apos;ve survived 9 months or so without one.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Spam Attack!
            </title>
            <link>
                https://www.hjsoft.com/blog/Spam_Attack.html
            </link>
            <pubDate>Mon, 2 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Spam_Attack.html
            </guid>
            <description>
                &lt;p&gt;Wow!  Overnight I got slammed with 30 various spam referrers.  I added a bunch of keywords to my blacklist and deleted them all, but that&apos;s all a very manual process, so it took a while.  I really must get coding on this weblog again (it&apos;s actually been a couple months), and get a callback-type plugin to have it check referrer links for valid links.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Details for Referrer Verification
            </title>
            <link>
                https://www.hjsoft.com/blog/Details_for_Referrer_Verification.html
            </link>
            <pubDate>Mon, 2 May 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Details_for_Referrer_Verification.html
            </guid>
            <description>
                &lt;p&gt;My very recent &lt;a href = &quot;http://www.hjsoft.com/blog/link/Spam_Attack&quot;&gt;post about verifying referrers&lt;/a&gt; to help limit spam got &lt;a href = &quot;http://creativekarma.com/ee.php/textacts/comments/overreacting_to_referrer_spam/&quot;&gt;Doug a bit concerned about the bandwidth&lt;/a&gt;.  He wouldn&apos;t want my site poking his everytime someone clicks a link from his site to mine.  Additionally, he forsees trouble with these referrer checking routines getting into loops poking each other.&lt;/p&gt;
&lt;p&gt;First, my code already recognizes first hits from a referrer, so it can add it to the list in my servlet context.  Any subsequent hit from a referrer just increments the counter.  Similarly,  the verification code would run once for each referrer before adding it to the list, and not again.  After it&apos;s been added to the list, I should be able to trust the referrer and just increment its count for the rest of the day, so that eliminates any referrer check floods.&lt;/p&gt;
&lt;p&gt;Loops won&apos;t happen either, because my weblog will be poking the referrer site directly from my server.  I&apos;ll request the prospective referrer without a &quot;Referer:&quot; header, so the other site will have nothing to verify, so there&apos;s no loop, and it&apos;ll register as just a single &quot;direct&quot; hit.  As noted previously, there&apos;d only be one such hit per day.  (Additionally, to avoid slowing the load time for my site, all this referrer checking code will move into an MDB to run asynchronously.)&lt;/p&gt;
&lt;p&gt;It would function similarly to &lt;a href = &quot;http://www.milter.info/milter-sender/index.shtml&quot;&gt;Snert&apos;s milter-sender&lt;/a&gt; for sendmail.  Milter-sender tries to determine if the sender&apos;s account will accept DSN  email before it accepts the incoming email.  I admit that I thought this was a bit heavy-handed and wasteful of bandwidth when I first read about it, since I probably get 3000+ emails a day through mailing lists, etc.  For my relatively small number of weblog hits, though, I like the idea for handling these referrer spammers.&lt;/p&gt;
&lt;p&gt;On any given day, I have upto 30 unique referers, mostly from Google searches, so I would have only set out 30 verification requests in that whole day.&lt;/p&gt;
&lt;p&gt;For email, I prefer pure Bayesian filters (bogofilter, specifically), since they are easily trainable, effective, and very low-noise for the rest of the world -- I don&apos;t fill mail queues trying to bounce spam destined to invalid places, I just drop it.  I don&apos;t care to code a Bayesian filter for my weblog, and I don&apos;t think there&apos;s enough content in a URL to effectively filter it this way.  If I try to get more content by hitting the link and analyzing the content with a Bayesian algorithm, I may as well have just checked for my URL in the first place and been done.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                CPUFreq OnDemand Governor
            </title>
            <link>
                https://www.hjsoft.com/blog/CPUFreq_OnDemand_Governor.html
            </link>
            <pubDate>Thu, 28 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/CPUFreq_OnDemand_Governor.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been using cpudynd on my ThinkPad to switch the CPU speed from low to high as system load requires.  It promises to save battery, since the CPU can run at lower power when idle.&lt;/p&gt;
&lt;p&gt;A couple kernel versions back, I saw an &lt;code&gt;ondemand&lt;/code&gt; governor was added right into the kernel, so I&apos;m giving that a try now.  I shutdown cpudynd, and just have a simple little init script set the governor to &quot;ondemand&quot; on boot.  This governor can cycle through all 5 speed states (1400, 1200, 1000, 800, 600MHz) very quickly as needed and does it in kernel-space, instead of user-space.  It may not be as tunable as cpudynd, but that doesn&apos;t really matter, since the machine experiences no side effects of switching speeds (unlike the old Inspiron, which would stop processing on every switch).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                End-User Linux Experiment
            </title>
            <link>
                https://www.hjsoft.com/blog/End-User_Linux_Experiment.html
            </link>
            <pubDate>Mon, 25 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/End-User_Linux_Experiment.html
            </guid>
            <description>
                &lt;p&gt;My sister, Bryn, was having a hell of a time with her old Gateway PC running Windows 98.  The whole OS would just fall over if you looked it at sternly, and reinstalls only cleaned it up for a couple weeks.&lt;/p&gt;
&lt;p&gt;For the longest time, I had just regarded it as her doing stupid things (downloading untrusted code, etc), but then while talking to work friends, I learned that really, it&apos;s just common for an internet-connected computer to get all crudded up from nothing more than browsing with MSIE.&lt;/p&gt;
&lt;p&gt;Bryn dilligently tried to avoid IE, but some MS programs would just insist on popping it up to open a URL instead of her default Firefox browser.&lt;/p&gt;
&lt;p&gt;As she was already not getting anything done with the computer, I finally broke down and offered to put Debian Linux on her machine.  I figured that it couldn&apos;t hurt.  I let her sit at my Linux ThinkPad for an hour or 2 and try to get stuff done as she normally would (Thunderbird, Firefox, Gnucash, OpenOffice, some games, etc), and she still said, &quot;Let&apos;s install it.&quot;  The only bad news would be that her scanner wasn&apos;t supported by any SANE driver.&lt;/p&gt;
&lt;p&gt;I took her computer for a week or so, installed Debian testing, returned it to her and configured the last little bits and got her up and running.  For the next couple days, I&apos;d login, do updates, and install software I&apos;d missed.  I also had to make some adjustments to her desktop, etc.  I found x11vnc to be a great little tool for remotely controlling her desktop, though most everything I needed to do could be done over a normal secure shell connection.&lt;/p&gt;
&lt;p&gt;A month later or so, I needed to get rid of the Xprint server on the box, since it was managing to produce postscript output which would just hang CUPS and the hpijs print driver whenever she tried to print from Firefox.  In that time, I also managed to build a shiny new 2.6.11.7 kernel for her, install it, and get her to reboot a couple times as I worked it out successfully.&lt;/p&gt;
&lt;p&gt;At this point, the machine&apos;s been running well, and easily obtains uptimes unseen while running Windows.  She just uses the computer now, and I login every couple days to update it.  I actually had to ask her the other day if there was anything more she needed from the computer, since she has stopped calling me to fix the machine.  The experiment has yielded a useful machine and a happy normal end-user, instead of the tech-support hell to which I could have been sentencing myself.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Design Patterns Notes
            </title>
            <link>
                https://www.hjsoft.com/blog/Design_Patterns_Notes.html
            </link>
            <pubDate>Mon, 25 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Design_Patterns_Notes.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://www.hjsoft.com/blog/link/Design_Patterns_at_HarrisburgJUG&quot;&gt;Design Pattern talk&lt;/a&gt; went well on Thursday.  We had 42 people show up, which is quite a bit more than usual.  A combination of early and repeated announcements and hopefully an interesting topic seemed to have brought people out.  I also dragged a few work people (&lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt; and Suthan).  No one got up and left, so hopefully the presentation was what they had expected.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://www.hjsoft.com/DesignPatterns/2005-04-21/&quot;&gt;slides and code&lt;/a&gt; are available for download from my web server.&lt;/p&gt;
&lt;p&gt;I had taken extra time to ensure that my Eclipse session and my HTML slides would be large enough to see on the projector.  Thankfully, my Linux ThinkPad worked flawlessly with the projector.  I was pleased that my notebook proved useful.  I even had the &lt;a  href = &quot;http://www.hjsoft.com/blog/link/Fun_Bluetooth_Linux&quot;&gt;fun Bluetooth remote thing&lt;/a&gt; connected to my phone, but I couldn&apos;t really make good use of it, since I was switching virtual desktops often between full-screen Firefox (for slides) and Eclipse (for code browsing and demonstration).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Podcasting&apos;s Come of Age?
            </title>
            <link>
                https://www.hjsoft.com/blog/Podcastings_Come_of_Age.html
            </link>
            <pubDate>Sun, 24 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Podcastings_Come_of_Age.html
            </guid>
            <description>
                &lt;p&gt;Up to this point, I&apos;ve regarded podcasting as a curiosity, but haven&apos;t bothered really looking at it, but it seems that its day may have come.  &lt;a href = &quot;http://leoville.com/blog/index.php/TLR/comments/the-revenge-of-the-bleep/&quot;&gt;Revenge of the ScreenSavers&lt;/a&gt; is available as a podcast.  It&apos;s some of the old ScreenSavers people from the good old TechTV days.&lt;/p&gt;
&lt;p&gt;Maybe I&apos;ll need to figure out the slick podcast way to download this thing, but just getting it manually and playing it on the computer is fine by me too.  I also don&apos;t have any other device but the computer on which to play it.  Maybe I can burn it to CDRW for in the car without having to run the notebook.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Tracking Linux Source with git
            </title>
            <link>
                https://www.hjsoft.com/blog/Tracking_Linux_Source_with_git.html
            </link>
            <pubDate>Thu, 21 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Tracking_Linux_Source_with_git.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve apparently been scanning the linux-kernel mailing list too quickly for the past couple weeks. When I saw the 2.6.12-rc3 announcement, and the mention of &quot;git&quot;, I had no idea from where this new SCM tool came.&lt;/p&gt;
&lt;p&gt;Fortunately, &lt;a href = &quot;http://kerneltrap.org/&quot;&gt;KernelTrap&lt;/a&gt; brought me up to speed with an article about &lt;a href = &quot;http://kerneltrap.org/node/4982&quot;&gt;Linus writing his own tool, called &quot;git&quot;&lt;/a&gt;.
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                So Busy
            </title>
            <link>
                https://www.hjsoft.com/blog/So_Busy.html
            </link>
            <pubDate>Thu, 21 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/So_Busy.html
            </guid>
            <description>
                &lt;p&gt;I have the JUG presentation this evening and one of our consultants at work is leaving.  I&apos;ve been busy for the past couple nights and lunches preparing for my presentation, and I&apos;ve been spending long work hours absorbing functional knowledge of the area I&apos;m inheriting.&lt;/p&gt;
&lt;p&gt;I&apos;ve been able to glance at slashdot, but I have no idea what&apos;s going on in the online comic world.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Design Patterns at HarrisburgJUG
            </title>
            <link>
                https://www.hjsoft.com/blog/Design_Patterns_at_HarrisburgJUG.html
            </link>
            <pubDate>Mon, 18 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Design_Patterns_at_HarrisburgJUG.html
            </guid>
            <description>
                &lt;p&gt;On Thursday, 21 April, at 6:30pm, I&apos;ll be presenting an introduction to Design Patterns featuring Template Method, Strategy, Command, and Factory Method patterns to the &lt;a href = &quot;http://groups.yahoo.com/group/harrisburgjug/&quot;&gt;HarrisburgJUG&lt;/a&gt; at &lt;a href = &quot;http://www.perfectorder.com/index.php?about_directions&quot;&gt;Perfect Order&lt;/a&gt; in Mechanicsburg.&lt;/p&gt;
&lt;p&gt;My source books will be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href = &quot;http://www.bookpool.com/sm/0201633612&quot;&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=368&quot;&gt;Holub on Patterns: Learning Design Patterns by Looking at Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://java.sun.com/blueprints/corej2eepatterns/index.html&quot;&gt;Core J2EE Patterns&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everyone should come out and offer your support, bring some questions, and help me survive this thing! (*panic*)  Even if you favor other programming languages, this stuff is still useful -- I just won&apos;t be providing you sample code (but my source books do).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Adjusting IRQs
            </title>
            <link>
                https://www.hjsoft.com/blog/Adjusting_IRQs.html
            </link>
            <pubDate>Mon, 18 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Adjusting_IRQs.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve had issues with my ThinkPad occasionally freezing after a swsusp and resume, since I got the thing.&lt;/p&gt;
&lt;p&gt;It always struck me as odd that all my devices ran on the same IRQ 11, so almost a week ago, I found where this is done in the BIOS, and I changed them all from 11 to &lt;em&gt;Auto&lt;/em&gt;.  Now most of them still get assigned to IRQ 11, but not all of them.&lt;/p&gt;
&lt;p&gt;More importantly, I&apos;ve been running for over 6 days now, suspending and resuming with no freezes.  This is getting to be a long time, though it&apos;s previously behaved this long to just return to fits of freezing.  That was rare.  I&apos;m also running Linux 2.6.12-rc2, but I had previously gotten that to freeze for me.  We&apos;ll see if this machine is fixed or just messing with me.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (18 April 2005):&lt;/b&gt; Bah.  It locked.  It took a long time to do it though.  I&apos;ve found things that aggrevate the problem (like local APIC), and maybe I&apos;ve found that diversifying IRQs helps alleviate it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Prius Driving Simulator Applet
            </title>
            <link>
                https://www.hjsoft.com/blog/Prius_Driving_Simulator_Applet.html
            </link>
            <pubDate>Thu, 14 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Prius_Driving_Simulator_Applet.html
            </guid>
            <description>
                &lt;p&gt;I was trying to dig up information on how the Prius&apos; planetary gears work between the electric motor, gas engine, and drive (their CVT) just now, and I stumbled upon the &lt;a href = &quot;http://www.wind.sannet.ne.jp/m_matsu/prius/ThsSimu/index_i18n.html?Language=en?Country=US&quot;&gt;Prius Driving Simulator&lt;/a&gt; which shows you what it&apos;s doing in response to driver input.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                DVD Burner Minimum Requirements
            </title>
            <link>
                https://www.hjsoft.com/blog/DVD_Burner_Minimum_Requirements.html
            </link>
            <pubDate>Wed, 13 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/DVD_Burner_Minimum_Requirements.html
            </guid>
            <description>
                &lt;p&gt;I bought a Sony DVD burner a couple weeks ago, and the box said it minimally required an 800MHz Pentium 3, but recommended a 1.6GHz Pentium 4 to function.  This is obviously for the software, so one must wonder on what you &lt;em&gt;really&lt;/em&gt; need, and what is that other software doing that requires so much processor?&lt;/p&gt;
&lt;p&gt;Well, I have it working pretty reliably burning DVD+RWs for backups in my 200MHz Classic Pentium.  I use &lt;code&gt;growisofs&lt;/code&gt; to do the burn, which creates the image on the fly and streams it to the media.  The CPU usage hovers around 50%, so it&apos;s not starved for CPU.  Having the source files on SCSI disks and the burner on a dedicated IDE bus probably helps.  When starting the burn, it does claim that it wants to burn at 4x, but in the end only did about 1.8x.  I&apos;ll have to try some plain DVD+-R discs and see if it can go faster.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                What&apos;s That Crackling?
            </title>
            <link>
                https://www.hjsoft.com/blog/Whats_That_Crackling.html
            </link>
            <pubDate>Mon, 11 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Whats_That_Crackling.html
            </guid>
            <description>
                &lt;p&gt;Claire woke up at 2AM or so to a strange little rustling and what-not that seemed to (hopefully) be outside.  I went looking around, and glanced out the window to see the &lt;a href = &quot;http://www.hjsoft.com/gallery/Whatever/p4100113&quot;&gt;neighbor&apos;s truck ablaze&lt;/a&gt;!  I called 911, &lt;a href = &quot;http://www.millersvillefire.com/&quot;&gt;Millersville Volunteer Fire Company&lt;/a&gt; showed up 10 minutes later to put it out, and it didn&apos;t blow up, so all is well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Television: The Office
            </title>
            <link>
                https://www.hjsoft.com/blog/Television_The_Office.html
            </link>
            <pubDate>Wed, 6 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Television_The_Office.html
            </guid>
            <description>
                &lt;p&gt;I watched NBC&apos;s American version of &lt;a href = &quot;http://www.nbc.com/The_Office/&quot;&gt;The Office&lt;/a&gt; last night.  It had lots of funny little amusements.  The  direct and sarcastic receptionist character is probably one of the only highlights.&lt;/p&gt;
&lt;p&gt;Its &quot;MTV Real World&quot;-style interview thing is sort of annoying -- too much of a carry over from reality television.  It would be funnier if it was just the normal sitcom style.  It seems to be Office Space jokes in reality television style.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gentoo&apos;s Difficult
            </title>
            <link>
                https://www.hjsoft.com/blog/Gentoos_Difficult.html
            </link>
            <pubDate>Wed, 6 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gentoos_Difficult.html
            </guid>
            <description>
                &lt;p&gt;Every time I think I get this thing working, it proves me wrong.  I did an &lt;code&gt;emerge -uDv world&lt;/code&gt;, and it updated to a new version of binutils.  Of course, after that, none of the binutils are found, so all subsequent upgrades fail, because obviously, gcc can no longer produce binaries.  I eventually found that they were hidden away somewhere and that running &lt;code&gt;binutils-config&lt;/code&gt; and reselecting the current profile produced proper symlinks to make it all work again.  The profile was the only one available, and apparently already selected, but it just didn&apos;t take the first time, apparently.&lt;/p&gt;
&lt;p&gt;Reading the &lt;a href = &quot;http://forums.gentoo.org/&quot;&gt;Gentoo forums&lt;/a&gt;, it seems that when people break their machines, they often end up resorting to rebuilding a package on alternate gentoo boxes that they&apos;ve not yet broken.  Having this dependency upon an always fully functioning build system seems like a pretty high standard and fragile.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                udev for Gentoo
            </title>
            <link>
                https://www.hjsoft.com/blog/udev_for_Gentoo.html
            </link>
            <pubDate>Tue, 5 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/udev_for_Gentoo.html
            </guid>
            <description>
                &lt;p&gt;While installing a new kernel on my good old gentoo box, I disabled devfs to switch to udev.  It turns out that /dev is completely empty on disk, and I guess it used to be configured to mount /dev as devfs on boot.&lt;/p&gt;
&lt;p&gt;With udev, that mount happens in userspace from scripts, so init got sort of unhappy and complained that it couldn&apos;t open a console (no devices yet), and I couldn&apos;t see any of the boot process until udev was up and the console &lt;code&gt;agetty&lt;/code&gt;s started.&lt;/p&gt;
&lt;p&gt;I had to boot the gentoo CD, mount my root partition, and create a few bootstrap devices, in particular, the console.  &lt;code&gt;/sbin/MAKEDEV console&lt;/code&gt; seemed to get all the tty&apos;s in place and all was well then.  For good measure, I also created &lt;code&gt;/dev/null&lt;/code&gt;, since it looked like something had tried to write to it anyway.&lt;/p&gt;
&lt;p&gt;I have the 2.6.11.5 kernel running now, pretty painlessly.  You can really feel the speed increase on a p5-200!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Retire the Old Box?
            </title>
            <link>
                https://www.hjsoft.com/blog/Retire_the_Old_Box.html
            </link>
            <pubDate>Mon, 4 Apr 2005 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Retire_the_Old_Box.html
            </guid>
            <description>
                &lt;p&gt;My Gentoo box continues to be problematic.  I can&apos;t get emerge to successfully build a new gcc, and I can&apos;t even build gcc by hand.  The gcc I have installed right now was built on my big server, and it managed to build other things, including glibc.  I can&apos;t get gcc to build though.&lt;/p&gt;
&lt;p&gt;It seems like a memory issue, but memtest86 doesn&apos;t turn up any errors.  It&apos;s so hard to determine what&apos;s really at fault without just wiping the box and starting over.  Running with the assumption that it&apos;s still a hardware issue, I&apos;m going to try adjusting the CPU clock down to 198MHz from 207MHz.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (04 April 2005):&lt;/b&gt; After clocking it down (66MHz * 3.0), it built gcc, finally.  Then I had to get through a few other hiccups of reinstalling some packages, but now I got it completely updated.  I&apos;m working on a new kernel for the box, and I&apos;m installing the various DVD tools.&lt;/p&gt;
&lt;p&gt;I should have the DVD burner installed very soon.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gentoo Profiles
            </title>
            <link>
                https://www.hjsoft.com/blog/Gentoo_Profiles.html
            </link>
            <pubDate>Wed, 30 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gentoo_Profiles.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been having &lt;a href = &quot;http://www.hjsoft.com/blog/link/Gentoo_Box_Dead&quot;&gt;some trouble with my Gentoo box&lt;/a&gt;, and I had been getting the feeling that I was using the wrong &lt;em&gt;profile&lt;/em&gt;.  Anything reasonably up-to-date, and maybe even working was masked by my profile.  I could see that there were other profiles, but it took me a long time to find the &lt;code&gt;/etc/make.profile&lt;/code&gt; symlink which pointed off to &lt;code&gt;/usr/portage/profiles/default-linux/x86/gcc2&lt;/code&gt;.  I changed this to point to &lt;code&gt;/usr/portage/profiles/default-linux/x86&lt;/code&gt;, and I think I&apos;m on my way to having a working box.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update 30 March 2005:&lt;/b&gt; So, supposedly profiles build upon their parent profiles.  That means x86 is the base of 2004.0, 2004.2, 2004.3, 2005.0, etc.  I guess that would also mean that I should use one of these releases, and not just x86 for my profile, so I&apos;m using 2005.0 to see if it&apos;ll actually work.  It seems to intend to build the same gcc-3.3.5-r1 which the parent profile wanted to build.  It&apos;ll probably fail the same way, too, with stage2 binaries being different or some crap.  On my little 586-200, it takes no less than 2 hours to find out that it&apos;s failed miserably, and I&quot;ll have to blindly restart it, hoping for something to work. I love the idea of building from source, but it&apos;s just not working out for me, and I&apos;m not sure I&apos;m comfortable having to go to the forums for every damn mysterious little thing I broke.&lt;/p&gt;
&lt;p&gt;On the bright side, I&apos;ve gotten quite good with the emerge options.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (13:05):&lt;/b&gt; During my GCC 3.3.5 build, I get an internal compiler error/segmentation fault.  That sounds like a memory issue.  This could be the reason I replaced that box with the dual Athlon a couple years ago.  Maybe it&apos;s time to decomission the old box and move back to a one-computer desk.  That sounds sort of odd, doesn&apos;t it?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Just For Fun
            </title>
            <link>
                https://www.hjsoft.com/blog/Just_For_Fun.html
            </link>
            <pubDate>Thu, 24 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Just_For_Fun.html
            </guid>
            <description>
                &lt;p&gt;I recently read the Linus Torvalds sort-of biography, &lt;a href = &quot;http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0066620732&quot;&gt;&lt;em&gt;Just For Fun: The Story of an Accidental Revolutionary&lt;/em&gt;&lt;/a&gt;.  I think I set a personal reading speed record having read it in 5 days.&lt;/p&gt;
&lt;p&gt;The book is getting a bit old (published in 2001, I believe), but the best parts are written about Linus&apos; childhood and first computers.  Many of the observations were familiar from my childhood, so I often laughed aloud as I read the book.  He had the bug much worse than even I did, though, so he obviously took it much further.&lt;/p&gt;
&lt;p&gt;I think most my computer friends will enjoy reading it.  Let me know if you&apos;d like to borrow it.&lt;/p&gt;
&lt;p&gt;Clicking around Amazon, I see &lt;a href = &quot;http://www.revolution-os.com/&quot;&gt;&lt;em&gt;Revolution OS&lt;/em&gt;&lt;/a&gt;, a documentary about the rise of Linux and free software, is also available on DVD.  I may need to pick that up.  I have it on VHS, taped from Sundance Channel or IFC.  That&apos;s another great must-see video.  It has lots of great interviews with Linus, RMS, Eric S Raymond, Bruce Perens, and others.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Taj Mahal
            </title>
            <link>
                https://www.hjsoft.com/blog/Taj_Mahal.html
            </link>
            <pubDate>Tue, 22 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Taj_Mahal.html
            </guid>
            <description>
                &lt;p&gt;Paige, Claire, and I ran out to Taj Mahal last night for Indian food as my little birthday celebration.  It was very nice -- on Mondays, they happen to have a little buffet, so I got to try lots of different dishes.  We had no trouble finding good things to eat, which was sort of surprising.  I expected to find things I&apos;d prefer to avoid, but that wasn&apos;t the case.  I could eat anything they had, as could Claire for the most part.  Paige wasn&apos;t really having any of it, though -- She&apos;s sort of picky right now.  We&apos;ll definitely go back.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gentoo Box Dead
            </title>
            <link>
                https://www.hjsoft.com/blog/Gentoo_Box_Dead.html
            </link>
            <pubDate>Fri, 18 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gentoo_Box_Dead.html
            </guid>
            <description>
                &lt;p&gt;Call it prophecy fulfillment or whatever, but I crashed my Gentoo box doing a glibc upgrade, so I won&apos;t have to wait as long as I had hoped to try out my &lt;a href = &quot;http://www.hjsoft.com/blog/link/DVD_Burner&quot;&gt;DVD Burner&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&apos;s sitting there now stuck after having tried to run &lt;code&gt;init&lt;/code&gt;, so I&apos;ll burn a new Gentoo CD, see if I can figure out how to repair it.  If it gets too complicated, I&apos;ll put Debian on it, and be done.  I did get a run of 320-some days out of it, before accidently killing it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ONJava: commons-chain
            </title>
            <link>
                https://www.hjsoft.com/blog/ONJava_commons-chain.html
            </link>
            <pubDate>Thu, 17 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ONJava_commons-chain.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.onjava.com/&quot;&gt;ONJava&lt;/a&gt; has an article about &lt;a href = &quot;http://www.onjava.com/pub/a/onjava/2005/03/02/commonchains.html&quot;&gt;commons-chain&lt;/a&gt; with valuable examples, such as the elusive LookupAction to delegate to another chain, which took me quite some time to find on my own.&lt;/p&gt;
&lt;p&gt;Here&apos;s &lt;a href = &quot;http://www.onjava.com/pub/a/onjava/2005/03/02/commonchains2.html&quot;&gt;part 2&lt;/a&gt; as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                DVD Burner
            </title>
            <link>
                https://www.hjsoft.com/blog/DVD_Burner.html
            </link>
            <pubDate>Wed, 16 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/DVD_Burner.html
            </guid>
            <description>
                &lt;p&gt;Between work and the Harrisburg JUG meeting, I wandered out to &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/john/2005/03/15/Uh_oh.html&quot;&gt;Best Buy&lt;/a&gt; to blow a gift card I&apos;ve had since Christmas.  I came home with a Sony DVD+-RW with dual layer capability and all that (and a rebate to mail, of course).&lt;/p&gt;

&lt;p&gt;Currently, my 2 computers in which I could install this thing have uptimes of 190 days and 300+ days, so I don&apos;t think I&apos;ll go rebooting any computers just yet to install this thing.  I figure it&apos;ll be my consolation prize when one of the machines goes down.&lt;/p&gt;
&lt;p&gt;I want to burn DVDs for my off-site backups (2 DVD-RWs instead of 9 CD-RWs), so it could be advisable to put the burner in the machine that actually houses the backups, a P5-200Mhz.  I&apos;m really curious to see if it works in there.  On one hand, the drives suggests a P4-1.6Ghz(!?), but really, how hard could it be to stream a UDF image on the fly  from a local SCSI filesystem to an IDE burner?  The data is already compressed.  Maybe I&apos;ll have a chance to find out.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Knuth Interview on NPR
            </title>
            <link>
                https://www.hjsoft.com/blog/Knuth_Interview_on_NPR.html
            </link>
            <pubDate>Mon, 14 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Knuth_Interview_on_NPR.html
            </guid>
            <description>
                &lt;p&gt;NPR&apos;s Morning Edition had a quick &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4532247&quot;&gt;interview with Donald Knuth&lt;/a&gt; on the radio this morning. I (fortunately?) was running late, so I caught it on my commute.&lt;/p&gt;
&lt;p&gt;He spoke of striving for perfection and beauty in software, which makes him &lt;a href = &quot;http://www.hjsoft.com/blog/link/Code_is_an_Artform&quot;&gt;my hero&lt;/a&gt;. :)&lt;/p&gt;
&lt;p&gt;In Knuth&apos;s quest for perfection he mails out checks for $2.56 (100000000 cents in binary) to the first people who spot errors in his books.  They even mentioned his typesetting package, TeX, which he wrote to typeset his works, and how it achieves nearly flawless presentation.  It&apos;s long been the defacto standard for typesetting in the mathematics community.&lt;/p&gt;
&lt;p&gt;He&apos;s still writing volumes of his &lt;em&gt;The Art of Computer Programming&lt;/em&gt; series of books.  I may need to try to pick up the completed volumes for my &quot;leisure reading&quot;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Novell&apos;s Linux Ad
            </title>
            <link>
                https://www.hjsoft.com/blog/Novells_Linux_Ad.html
            </link>
            <pubDate>Mon, 14 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Novells_Linux_Ad.html
            </guid>
            <description>
                &lt;p&gt;Here&apos;s an amusing little &lt;a href = &quot;http://www.novell.com/linux/windowstolinux/publicservice/&quot;&gt;public service announcement&lt;/a&gt; from Novell about &lt;abbr title = &quot;Support Service Termination Trauma&quot;&gt;SSTT&lt;/abbr&gt;.  Do you have any of the symptoms?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Oldest File?
            </title>
            <link>
                https://www.hjsoft.com/blog/Oldest_File.html
            </link>
            <pubDate>Fri, 11 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Oldest_File.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://slashdot.org/&quot;&gt;Slashdot&lt;/a&gt; is running a &lt;a href = &quot;http://slashdot.org/pollBooth.pl?qid=1256&amp;amp;aid=-1&quot;&gt;poll asking your earliest legitimate file timestamp&lt;/a&gt;.  I&apos;d obviously have to look at butterfly, since those files have been carried over for years and years from old machines, etc.&lt;/p&gt;
&lt;p&gt;I found a &lt;code&gt;.ztalkrc&lt;/code&gt; configuration file timestamped 1996 -- That&apos;s nearly 9 years old!  That must have been one of the first Linux things I tried.&lt;/p&gt;
&lt;p&gt;It took a bit of Googling, but &lt;a href = &quot;http://www.bahneman.com/liem/work/ztalk.html&quot;&gt;ZTalk&lt;/a&gt; was a very early voice over IP toy.  I don&apos;t recall actually getting it to work.  Dinger, I would have been talking to you -- Did we get that to work?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Book: Art of Deception
            </title>
            <link>
                https://www.hjsoft.com/blog/Book_Art_of_Deception.html
            </link>
            <pubDate>Thu, 10 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Book_Art_of_Deception.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently finished reading Kevin Mitnick&apos;s &lt;a href = &quot;http://www.amazon.com/exec/obidos/tg/detail/-/076454280X/qid=1110464227/sr=8-1/ref=pd_csp_1/104-5542370-8253551?v=glance&amp;amp;s=books&amp;amp;n=507846&quot;&gt;Art of Deception&lt;/a&gt;.  It&apos;s a collection of stories to demonstrate the security risks of social engineering attacks on the human elements of an organization.  It&apos;s an entertaining read, but it felt a little repetitive and slow at points, since it&apos;s not as densely packed with information as my normal technical reading. With all the recent news about data aggregation companies having &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4529286&quot;&gt;data stolen&lt;/a&gt;, this book does feel very relevant.&lt;/p&gt;
&lt;p&gt;It&apos;ll elevate your paranoia level a bit, which is good, and you easily recognize things you should do differently.  Each little story has an explanation of what happened and what could have been done to prevent it.&lt;/p&gt;
&lt;p&gt;The end of the book is geared toward people who design security policies for organizations, so it&apos;s a bit dry, but I&apos;m sure valuable for those people.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ring Tones for Work and Elsewhere
            </title>
            <link>
                https://www.hjsoft.com/blog/Ring_Tones_for_Work_and_Elsewhere.html
            </link>
            <pubDate>Wed, 9 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ring_Tones_for_Work_and_Elsewhere.html
            </guid>
            <description>
                &lt;p&gt;My biggest problem with my phone is finding a ringtone that is suitable for work and the car.&lt;/p&gt;
&lt;p&gt;I have it on vibrate, and I use an obnoxious &lt;a href = &quot;http://www.zedge.no/index.php?side=lyder&amp;amp;getsound=162&quot;&gt;beeping ring&lt;/a&gt;, so I might actually hear it in the car.  This ring is sort of obnoxious for quieter environments, like work.  It does its own little volume stepping, but it gets loud quickly.  My phone&apos;s stepping volume is sort of screwy in that it only steps up to half-volume, not full-volume.  At least it&apos;s not one of the &quot;party in my pants&quot; song ringtones.&lt;/p&gt;
&lt;p&gt;Does anyone have any recommendations for a good stepping ring appropriate for the office, but audible in the car?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ned Kahn
            </title>
            <link>
                https://www.hjsoft.com/blog/Ned_Kahn.html
            </link>
            <pubDate>Mon, 7 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ned_Kahn.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.npr.org/&quot;&gt;NPR&lt;/a&gt;&apos;s &lt;a href = &quot;http://www.npr.org/templates/rundowns/rundown.php?prgId=3&quot;&gt;Morning Edition&lt;/a&gt; has been running a series on Art and Science, and this morning they had a &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4524673&quot;&gt;story about Ned Kahn&apos;s art&lt;/a&gt;.  His designs often demonstrate scientific principles, or as he says: He builds the frame for a phenomenon.  The &lt;a href = &quot;http://www.nedkahn.com/&quot;&gt;Ned Kahn website&lt;/a&gt; has lots of pictures and content about his work.  The &lt;a href = &quot;http://www.nedkahn.com/portfolio.html&quot;&gt;portfolio&lt;/a&gt; is particularly interesting.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                del.icio.us
            </title>
            <link>
                https://www.hjsoft.com/blog/delicious.html
            </link>
            <pubDate>Fri, 4 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/delicious.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve created a &lt;a href = &quot;http://del.icio.us/&quot;&gt;del.icio.us&lt;/a&gt; account, &lt;a href = &quot;http://del.icio.us/jflinchbaugh&quot;&gt;del.icio.us/jflinchbaugh&lt;/a&gt;.  The whole idea of social bookmarking seems interesting, though I&apos;m not sure yet how I&apos;m going to use it.  It&apos;s tempting to use it as my list of links to read in the near future.  The bookmarklet thing makes it convenient to use as well.&lt;/p&gt;

&lt;p&gt;Ultimately, I&apos;ll probably end up studying it and implementing the bookmarking techniques into my weblog code to facilitate tracking my own &quot;to read&quot; list without necessarily needing to post a weblog article like I have in the past.&lt;/p&gt;
&lt;p&gt;They have RSS feeds for your bookmark list, so it&apos;s easy to integrate your del.icio.us links back into Firefox&apos; bookmarks by subscribing to the RSS.  I could also integrate the RSS of my del.icio.us links into my weblog to pull the links from there and include them here.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Novus 4520 Scientist
            </title>
            <link>
                https://www.hjsoft.com/blog/Novus_4520_Scientist.html
            </link>
            <pubDate>Fri, 4 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Novus_4520_Scientist.html
            </guid>
            <description>
                &lt;p&gt;For Christmas (or around Christmas) of 1989 (I&apos;d be in the 7th grade), my parents gave me a &lt;a href = &quot;http://www.hjsoft.com/~glynis/novus4520/&quot;&gt;Novus 4520 Scientist&lt;/a&gt;* calculator made by &lt;a href = &quot;http://www.national.com/&quot;&gt;National Semiconductor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For some reason, it sticks in my mind that they had found it at a flea market or something, maybe Green Dragon, and thought I&apos;d like it.  I loved it!  It was the first calculator I had that did any scientific calculations at all, and I used the manual to figure out reverse polish notation and all the calculations it could do.  I had studied trigonometry a bit already, so I had some use for it to start.&lt;/p&gt;
&lt;p&gt;I found another &lt;a href = &quot;http://www.msdsite.com/forums/upload.php?upload=zoom&amp;amp;pid=304&quot;&gt;picture&lt;/a&gt; of it, though I do remember mine saying &lt;em&gt;National Semiconductor&lt;/em&gt; at the top, like the first picture.  As you can see, it has the old red LED display with lenses over each digit to make them appear larger.  It came with a thick protective case, and it had a rechargeable battery pack that rattled around inside.  I&apos;d occassionally need to open it up and resolder the battery leads when they broke loose.  Being a stupid kid, I had also found that the battery was wired directly to the plug for the power adapter, so I could stick a paper clip in there and get the clip quite hot.  It wasn&apos;t very safe.&lt;/p&gt;
&lt;p&gt;Looking at other &lt;a href = &quot;http://www.msdsite.com/forums/upload.php?upload=view&amp;amp;uid=482&quot;&gt;similar calculators&lt;/a&gt; I&apos;m guessing this calculator was built in the USA maybe as early as 1975.  It&apos;s definitely vintage, designed before LCD.  A book** I just started reading sparked my memory of this old machine, and I realize now that I have no idea what happened to it. I&apos;m guessing it stopped functioning (due to that battery issue or something else -- I remember seeing the inside of it often), and it was quickly replaced by a more capable modern RadioShack scientific which in turn taught me some statistics.  Eventually, I bought a TI-85 for senior year of high school.&lt;/p&gt;
&lt;p&gt;Looking at all these vintage calculator sites, I&apos;m quite tempted to bid on the 2 calculators I found on eBay -- one really is the 4520 Scientist.&lt;/p&gt;
&lt;p&gt;Back about the time &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/paige/&quot;&gt;Paige&lt;/a&gt; was born, I asked my Mom if they consciously did anything to encourage me to love this stuff as I do.  It was odd little things like this, I&apos;m sure.  I wonder what I&apos;ll give Paige to set her off in various directions, and will she remember it all someday?&lt;/p&gt;
&lt;p&gt;* &lt;em&gt;Thanks to &lt;a href = &quot;http://www.wass.net/manuals/index.htm&quot;&gt;Katie Wasserman&apos;s Vintage Calculator site&lt;/a&gt; for the picture and manual.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;** &lt;em&gt;&lt;a href = &quot;http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0066620732&quot;&gt;Just for Fun: The Story of an Accidental Revolutionary&lt;/a&gt; -- it looks like it&apos;s going to be an awesome read.&lt;/em&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Too Much Data
            </title>
            <link>
                https://www.hjsoft.com/blog/Too_Much_Data.html
            </link>
            <pubDate>Wed, 2 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Too_Much_Data.html
            </guid>
            <description>
                &lt;p&gt;My offsite backup just crept up to require a 10th 700M CD-RW.  I need less data, or maybe fluffier data which compresses better.  It takes forever to burn 10 CD-RWs, since they burn at a maximum of 4x.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                No Shortage of Web Comics
            </title>
            <link>
                https://www.hjsoft.com/blog/No_Shortage_of_Web_Comics.html
            </link>
            <pubDate>Wed, 2 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/No_Shortage_of_Web_Comics.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://crowncommission.com/dailygrind/&quot;&gt;Daily Grind Iron Man Challenge&lt;/a&gt; will ensure that there will be no shortage of web comics for us all to read in the coming weeks or months.  It&apos;s good to see some of my favorites, like PvP in there.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                SpongeBeat TechnoPants
            </title>
            <link>
                https://www.hjsoft.com/blog/SpongeBeat_TechnoPants.html
            </link>
            <pubDate>Wed, 2 Mar 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/SpongeBeat_TechnoPants.html
            </guid>
            <description>
                &lt;p&gt;I got out to the SpongeBeat TechnoPants party in Harrisburg the other weekend.  It was in an abandoned furniture store or something like that.   The music wasn&apos;t amazing or anything, but the lights and people were fun, so I got to take &lt;a href = &quot;http://www.hjsoft.com/gallery/SpongeBeat_TechnoPants_2005-02-19&quot;&gt;lots of pictures&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also have &lt;a href = &quot;http://www.hjsoft.com/gallery/DragonFly_2005-02-12&quot;&gt; pictures from DragonFly&lt;/a&gt; the previous weekend.  There aren&apos;t many, because I spent most the time dancing.&lt;/p&gt;
&lt;p&gt;Next up is a DnB party in York at the Waterway later in March.  That&apos;s a much more convenient location than Harrisburg.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eclipse 3.1M5a
            </title>
            <link>
                https://www.hjsoft.com/blog/Eclipse_31M5a.html
            </link>
            <pubDate>Wed, 23 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Eclipse_31M5a.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m looking at Eclipse 3.1M5a on my Linux box right now.  I had previously fallen into using some of Java 5&apos;s convenient enhancements, like autoboxing -- Vim was perfectly happy to let me do these things.  While I had Eclipse 3.0.1 calling the Ant and the Java 5 compiler, so it all compiled fine, Eclipse was pretty quick to refuse to manipulate this new-style code.  I&apos;ve enabled the Java 5 compliance in this new Eclipse, so I&apos;m hopeful it&apos;ll behave nicely.&lt;/p&gt;
&lt;p&gt;I was pleased to see that it picked up my old workspace nicely, and once I reinstalled Subclipse, the version control and decorations were still in place.  I was fearful that I&apos;d have to spend another couple days trying to get my project setup properly.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Eclipse on Linux
            </title>
            <link>
                https://www.hjsoft.com/blog/Eclipse_on_Linux.html
            </link>
            <pubDate>Tue, 22 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Eclipse_on_Linux.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been fighting on and off with &lt;a href = &quot;http://www.eclipse.org/&quot;&gt;Eclipse 3.0.1&lt;/a&gt;, &lt;a href = &quot;http://ant.apache.org/&quot;&gt;Ant&lt;/a&gt;, &lt;a href = &quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;, and &lt;a href = &quot;http://xdoclet.sf.net/&quot;&gt;XDoclet&lt;/a&gt; on my Linux notebook for a couple days now, and I think I&apos;ve gotten it working reasonably now.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://subclipse.tigris.org/&quot;&gt;Subclipse&lt;/a&gt; plugin works reasonably, though I was a bit slow figuring out that I need to import a project from the Subversion Explorer view.  I thought it may be simpler to keep my SVN authentications straight if Subclipse used the command-line SVN command instead of JavaSVN, but I see little errors reported there, in particularly when committing.  It still works, so I&apos;ve not bothered switching it back.&lt;/p&gt;
&lt;p&gt;I had to add a sourcepath to the project to find the code that XDoclet generated for me.  The Add dialog that pops up is a bit finicky, and came up blank often.  I&apos;d have to try it 4 or 5 times successively to get it to actually populate with a project tree.  Additionally, in some attempts to setup the project, I&apos;d get errors where Eclipse couldn&apos;t resolve references in &lt;em&gt;source&lt;/em&gt; to code in &lt;em&gt;gen-src&lt;/em&gt;.  Jumping to the code declaration (F3) found the code just fine.  Recreating the project (yet again) did eventually fix it, so all the references were resolved when viewing the code in the editor.&lt;/p&gt;
&lt;p&gt;In a smaller toy project (2 files), I played with using 2 sourcepaths, and I found that adding the gen-src path back after the resolutions were broken caused them to stay broken until a rebuild of the project &lt;em&gt;using the Java Builder&lt;/em&gt; in that instance.  I think maybe my custom Ant Builder wasn&apos;t able to trigger the resolutions in the IDE like the Java Builder did.&lt;/p&gt;
&lt;p&gt;It was a huge mess, and I almost abandoned it several times, but I really want to apply some of its refactorings to move some of my code around my project.  Having the IDE fix up all the references just sounded too useful to abandon.  Eclipse has been working out pretty nicely for a large project at work, so I thought it was time to try to apply it to my own unique little (but complex) personal environment.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                MarketPlace Music
            </title>
            <link>
                https://www.hjsoft.com/blog/MarketPlace_Music.html
            </link>
            <pubDate>Thu, 17 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/MarketPlace_Music.html
            </guid>
            <description>
                &lt;p&gt;If you ever listen to &lt;a href = &quot;http://www.marketplace.org/&quot;&gt;MarketPlace&lt;/a&gt; on your local public radio station, you know it has a different sound with its eclectic mix of music bits between stories.&lt;/p&gt;
&lt;p&gt;It seems they now have the playlist on the PM pages next to the stories, and Jane, the music director, has a little &lt;a href = &quot;http://www.publicradio.org/columns/marketplace/janes_music_blog/&quot;&gt;weblog  about her music picks&lt;/a&gt;.  Her frequent picks of nice little dance tracks (trip hop, Bjork, etc) always grab me.  I also find the little Ani DiFranco clips fun too.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux in Retail
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_in_Retail.html
            </link>
            <pubDate>Wed, 16 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_in_Retail.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been surprised over the past couple days to note that I&apos;ve been seeing Linux machines out in the wild, including &lt;a href = &quot;http://www.lowes.com/&quot;&gt;Lowes&lt;/a&gt; and &lt;a href = &quot;http://www.pearlevision.com/&quot;&gt;Pearle Vision&lt;/a&gt;.  The screens caught my eye, because they were oddly X-looking.  Additionally, I saw an XScreensaver locking a terminal at Pearle.&lt;/p&gt;
&lt;p&gt;While Pearle&apos;s system looked similar, it seems that Lowes is running a system from &lt;a href = &quot;http://www.ultimatetechnology.com/technology/linux.php4&quot;&gt;Ultimate Technology&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cupid&apos;s Groove
            </title>
            <link>
                https://www.hjsoft.com/blog/Cupids_Groove.html
            </link>
            <pubDate>Wed, 16 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cupids_Groove.html
            </guid>
            <description>
                &lt;p&gt;I actually got out to see &lt;a href = &quot;http://www.djmicro.com/&quot;&gt;Micro&lt;/a&gt; at 
&lt;a href = &quot;http://www.dragonflyclub.com/&quot;&gt;Dragonfly&lt;/a&gt; in Harrisburg on Friday night.  I got in at about 11pm to find a decent turnout and left at about 1am.&lt;/p&gt;
&lt;p&gt;I heard mostly Psyche and Micro.  The music was great, and I found I could still dance, and quite a lot at that.  It&apos;s been a long time, since I&apos;ve felt the energy to just stay out on the dance floor for a majority of the night.  It really was great, so I&apos;ll have to keep up and get out to the &lt;a href = &quot;http://yard.hjsoft.com/&quot;&gt;next parties&lt;/a&gt; in my area.&lt;/p&gt;
&lt;p&gt;&lt;a  href = &quot;http://www.thedragonstemple.com/&quot;&gt;All&lt;/a&gt; &lt;a href = &quot;http://www.champagneblonde.us/&quot;&gt;my&lt;/a&gt; &lt;a href = &quot;http://www.americanslackers.com/&quot;&gt;slacker&lt;/a&gt; &lt;a href = &quot;http://ghetto.hjsoft.com/&quot;&gt;friends&lt;/a&gt; missed a good night. ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cellphone Not For Talking
            </title>
            <link>
                https://www.hjsoft.com/blog/Cellphone_Not_For_Talking.html
            </link>
            <pubDate>Mon, 14 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cellphone_Not_For_Talking.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.marketplace.org/&quot;&gt;MarketPlace&lt;/a&gt; had a little article on Friday about people wanting to do &lt;a href = &quot;http://marketplace.publicradio.org/shows/2005/02/11/PM200502112.html&quot;&gt;more from their cell phones than just talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The phone providers may finally be getting serious about pushing for higher bandwidth (for streaming audio and video), more powerful phones, and providing more useful content suitable for small devices.  They&apos;re resorting to advancing technology, since they can no longer differentiate themselves by price.&lt;/p&gt;
&lt;p&gt;I think we&apos;ve been seeing the ground work being laid for this for a bit, but it still only exists mostly in the niche technophile market.  Once the rest of the United States latches onto high-resolution, high color screens, Java, next-generation networking, maybe we&apos;ll see even quicker advances in this technology.&lt;/p&gt;
&lt;p&gt;As with the computer industry, I look forward to the masses pushing the industry with games, toys, and media consumption, and I&apos;ll use it for applications and information services.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Another J2ME Tutorial
            </title>
            <link>
                https://www.hjsoft.com/blog/Another_J2ME_Tutorial.html
            </link>
            <pubDate>Fri, 11 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Another_J2ME_Tutorial.html
            </guid>
            <description>
                &lt;p&gt;I found another &lt;a href = &quot;http://today.java.net/pub/a/today/2005/02/09/j2me1.html&quot;&gt; J2ME tutorial&lt;/a&gt; out at &lt;a href = &quot;http://www.java.net/&quot;&gt;Java.net&lt;/a&gt;. This one seems to use the command-line versions of all the tools, so that&apos;ll be nice to see in place of the workbench application.  Maybe I&apos;ll be able to get some Ant tasks going when I get serious.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Switching SSL with Apache 2 Proxy
            </title>
            <link>
                https://www.hjsoft.com/blog/Switching_SSL_with_Apache_2_Proxy.html
            </link>
            <pubDate>Wed, 9 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Switching_SSL_with_Apache_2_Proxy.html
            </guid>
            <description>
                &lt;p&gt;I use Apache 2 as a reverse proxy in front of my JBoss application server.  I let Apache handle the SSL connections, so my JBoss server doesn&apos;t need to know anything about it.&lt;/p&gt;
&lt;p&gt;I&apos;ve now figured out how to use Apache alone to enforce switching between http and https for the login page versus the rest of the site.  Now I can hit the site normally with http, and upon clicking the login link (which shows both the login form and accepts the POST), Apache redirects me up to the https port.  When login is done and returns me to any other URL, it redirects me once again back down to the http port.  It&apos;s all done in the proxy, so no application code must be changed.&lt;/p&gt;
&lt;p&gt;The only thing that I&apos;ve found to not quite work is the occassion where the login url comes in with a the &apos;;jsessionid=...&apos; appended.  Apache doesn&apos;t seem to be recognizing that one to be redirected to https.  I may need the more featureful mod_rewrite to accomodate that.&lt;/p&gt;
&lt;p&gt;Here are the relevant bits of the Apache 2 config:&lt;/p&gt;
&lt;pre&gt;&amp;lt;VirtualHost *:80&amp;gt;
    # redirect only login action over to https
    ProxyPass /blog/login.java !
    Redirect /blog/login.java https://www.hjsoft.com/blog/login.java

    # reverse proxy everything else
    ProxyPass /blog/ http://localhost:8080/blog/
    ProxyPassReverse /blog/ http://localhost:8080/blog/

    ProxyPreserveHost On

    &amp;lt;Proxy http://localhost:8080/blog/&amp;gt;
        Order allow,deny
	Allow from all
    &amp;lt;/Proxy&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost *:443&amp;gt;
    # proxy only the login action
    ProxyPass /blog/login.java http://localhost:8080/blog/login.java

    # redirect anything else over to http
    ProxyPass /blog/ !
    Redirect /blog/ http://www.hjsoft.com/blog/
    ProxyPassReverse /blog/ http://localhost:8080/blog/

    ProxyPreserveHost On

    &amp;lt;Proxy http://localhost:8080/blog/&amp;gt;
        Order allow,deny
        Allow from all
    &amp;lt;/Proxy&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Update (9 Feb 2005):&lt;/strong&gt;
I figured out mod_rewrite to implement a more complete solution.  I replace my ProxyPass and Redirect directives with this:&lt;/p&gt;
&lt;pre&gt;RewriteEngine on
RewriteRule ^/blog$ http://www.hjsoft.com/blog/
RewriteRule ^/blog/(login\.java.*)$ https://www.hjsoft.com/blog/$1 [L]
RewriteRule ^/blog/(.*)$ http://localhost:8080/blog/$1 [P,L]&lt;/pre&gt;
&lt;p&gt;and for the SSL virtual host config:&lt;/p&gt;
&lt;pre&gt;RewriteEngine on
RewriteRule ^/blog/(login\.java.*) http://localhost:8080/blog/$1 [P,L]
RewriteRule ^/blog$ http://www.hjsoft.com/blog/
RewriteRule ^/blog/(.*) http://www.hjsoft.com/blog/$1 [L]&lt;/pre&gt;
&lt;p&gt;These more powerful rules and their regular expressions allow me to more completely match and preserve parts of the URL, including the &lt;code&gt;jsessionid&lt;/code&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Pioneers of Electronic Music
            </title>
            <link>
                https://www.hjsoft.com/blog/Pioneers_of_Electronic_Music.html
            </link>
            <pubDate>Wed, 9 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Pioneers_of_Electronic_Music.html
            </guid>
            <description>
                &lt;p&gt;NPR has an article about &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4486840&quot;&gt;Pioneers of Electronic Music&lt;/a&gt; back in 1947.&lt;/p&gt;
&lt;p&gt;I wish I had caught this on the radio, but it&apos;s a membership campaign season on WITF, so it&apos;s barely worth turning to that station for actual content.  I&apos;ll have to check out the clips.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                My Gentoo Box Can Update
            </title>
            <link>
                https://www.hjsoft.com/blog/My_Gentoo_Box_Can_Update.html
            </link>
            <pubDate>Tue, 1 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/My_Gentoo_Box_Can_Update.html
            </guid>
            <description>
                &lt;p&gt;My little p5-200 gentoo box is actually updating again.  There was some issue where something depended upon a bad version number of gcc (4.0?).  That seems to have cleared, so now I expect no less than a week of straight compilation for the little box.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bluetooth Always On
            </title>
            <link>
                https://www.hjsoft.com/blog/Bluetooth_Always_On.html
            </link>
            <pubDate>Tue, 1 Feb 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bluetooth_Always_On.html
            </guid>
            <description>
                &lt;p&gt;When I bought my T616, I had quickly concluded that I should leave the bluetooth disabled to save the battery.  I&apos;m finding now that when leaving it on and idle, the phone lasts 3 days on a charge instead of 4.  That&apos;s acceptable, so I&apos;m not going to bother turning it off anymore.&lt;/p&gt;
&lt;p&gt;I think my initial conclusion of it lasting only &lt;em&gt;1 day&lt;/em&gt; with bluetooth can be blamed on the excessive use in that first week or two.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Tech That Gets Lost
            </title>
            <link>
                https://www.hjsoft.com/blog/Tech_That_Gets_Lost.html
            </link>
            <pubDate>Mon, 31 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Tech_That_Gets_Lost.html
            </guid>
            <description>
                &lt;p&gt;I have enough trouble finding my toys sometimes without it &lt;a href = &quot;http://www.javarants.com/B1823453972/C1460871803/E646117183/index.html&quot;&gt;hiding itself&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                T616 Noises
            </title>
            <link>
                https://www.hjsoft.com/blog/T616_Noises.html
            </link>
            <pubDate>Mon, 31 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/T616_Noises.html
            </guid>
            <description>
                &lt;p&gt;Occassionally, I play with my T616, and it&apos;ll decide not to do something I want it to do. Often this is some bluetooth operation.  It likes to blare out this obnoxiously loud little song anytime something fails.  It&apos;s especially embarassing when sitting amongst other quiet cube-dwellers at work. I can&apos;t find a way to just disable the error tones (like I can the key tones).&lt;/p&gt;
&lt;p&gt;I&apos;ve recently discovered that &lt;em&gt;silent mode&lt;/em&gt; actually quells all these little noises, so when pushing files around with bluetooth, the 15 people within earshot won&apos;t need to know when it decided to fail.  I still need to hear the ring sometimes, though, so I must remember to switch the ringer back on when I&apos;m done.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Comcast at 4M/384k
            </title>
            <link>
                https://www.hjsoft.com/blog/Comcast_at_4M384k.html
            </link>
            <pubDate>Thu, 27 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Comcast_at_4M384k.html
            </guid>
            <description>
                &lt;p&gt;It seems that I&apos;ve gotten my free speed upgrade from Comcast.  I&apos;m seeing downloads of 450kB/s and uploads of 42kB/s.  Yay!  Comcast is pretty slick.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java&apos;s DNS Cache
            </title>
            <link>
                https://www.hjsoft.com/blog/Javas_DNS_Cache.html
            </link>
            <pubDate>Fri, 21 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Javas_DNS_Cache.html
            </guid>
            <description>
                &lt;p&gt;Here&apos;s an interesting little article about &lt;a href = &quot;http://www.burnthacker.com/archives/000195.html&quot;&gt;Java caching DNS entries&lt;/a&gt; and not expiring them.&lt;/p&gt;
&lt;p&gt;I&apos;m not sure I&apos;ll bother implementing the &lt;code&gt;-Dsun.net.inetaddr.ttl=0&lt;/code&gt; just yet, but I definitely want to keep it in mind just in case.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                XHTML Validation
            </title>
            <link>
                https://www.hjsoft.com/blog/XHTML_Validation.html
            </link>
            <pubDate>Fri, 21 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/XHTML_Validation.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve added the first new and interesting feature to my weblog in a while: it validates articles I post and edit for XHTML 1.0 Transitional compliance.&lt;/p&gt;
&lt;p&gt;Here&apos;s a bit of the code that does it:&lt;/p&gt;
&lt;pre&gt;/**
 * validate the input String to be proper XHTML 1.0 Transitional.
 * @author John M Flinchbaugh
 */
public class XmlValidator extends DefaultHandler {
    private String errorMessage = null;

    /**
     * validate input and return the message.  null means good.
     * @param in input xhtml string
     * @return parser message.  null means it passed.
     * @throws SAXException exception from SAXParser
     * @throws ParserConfigurationException exception from
     *      SAXParserFactory
     */
    public String validate(String in)
        throws SAXException, ParserConfigurationException {
        errorMessage = null;
        StringBuffer sb = new StringBuffer();

        // wrap article string in context HTML
        sb.append(&quot;&amp;lt;!DOCTYPE html&quot;
            + &quot; PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Transitional//EN\&quot;&quot;
            + &quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/&quot;
            + &quot;xhtml1-transitional.dtd\&quot;&amp;gt;&quot;
            + &quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;test&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;div&amp;gt;&quot;);
        sb.append(in);
        sb.append(&quot;&amp;lt;/div&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;);
        InputSource source = new InputSource(
            new StringReader(sb.toString()));
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setValidating(true);
        SAXParser parser = factory.newSAXParser();
        try {
            parser.parse(source, this);
        } catch (IOException ignored) {
            // won&apos;t happen, because this is a StringReader
        } catch (SAXParseException parseEx) {
            errorMessage = parseEx.getMessage();
        }

        return errorMessage;
    }

    /**
     * error method from DefaultHandler.
     * saves the error message to returned by validate() method
     * @param e parse exception
     */
    public void error(SAXParseException e) throws SAXParseException {
        errorMessage = e.getMessage();
    }
}&lt;/pre&gt;
&lt;p&gt;(It wouldn&apos;t even let me post this message, until I cleaned up the embedded HTML in the code.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Pulling Pictures From T616
            </title>
            <link>
                https://www.hjsoft.com/blog/Pulling_Pictures_From_T616.html
            </link>
            <pubDate>Wed, 19 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Pulling_Pictures_From_T616.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve finally stumbled upon the right way to copy pictures off my T616.  I had been using the &lt;code&gt;obexserver&lt;/code&gt; to accept photos I&apos;d send from the phone.  This was terribly time-consuming and awfully manual.&lt;/p&gt;
&lt;p&gt;I can use &lt;code&gt;obexftp -b xx:xx:xx:xx:xx:xx -c Pictures -g &apos;Picture(1).jpg&apos;&lt;/code&gt; to &lt;em&gt;change&lt;/em&gt; to the Pictures directory, then &lt;em&gt;get&lt;/em&gt; the Picture(1).jpg file.  I think I was missing the &lt;code&gt;-c&lt;/code&gt; option in my previous attempts.&lt;/p&gt;
&lt;p&gt;Multisync was also quite simple to setup to backup my contacts, calendar, and tasks.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Subdivision - Ani DiFranco
            </title>
            <link>
                https://www.hjsoft.com/blog/Subdivision_-_Ani_DiFranco.html
            </link>
            <pubDate>Tue, 18 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Subdivision_-_Ani_DiFranco.html
            </guid>
            <description>
                &lt;blockquote&gt;
I remember the first time I saw someone&lt;br/&gt;
Lying on the cold street.&lt;br/&gt;
I thought: I can&apos;t just walk past here --&lt;br/&gt;
This can&apos;t just be true,&lt;br/&gt;
But I learned by example&lt;br/&gt;
To just keep moving my feet.&lt;br/&gt;
It&apos;s amazing the things that we all learn to do.
&lt;/blockquote&gt;
&lt;p&gt;--Ani DiFranco, &lt;em&gt;&lt;a href = &quot;http://www.danah.org/Ani/Reckoning/Subdivision.html&quot;&gt;Subdivision&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Glimpse of TV
            </title>
            <link>
                https://www.hjsoft.com/blog/Glimpse_of_TV.html
            </link>
            <pubDate>Mon, 17 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Glimpse_of_TV.html
            </guid>
            <description>
                &lt;p&gt;It looks like someone must have caught a glimpse of the same &lt;a href = &quot;http://www.pvponline.com/archive.php3?archive=20050116&quot;&gt;television programming&lt;/a&gt; as I did this weekend.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Neat Freak: Drawn to the Mundane
            </title>
            <link>
                https://www.hjsoft.com/blog/Neat_Freak_Drawn_to_the_Mundane.html
            </link>
            <pubDate>Thu, 13 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Neat_Freak_Drawn_to_the_Mundane.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been staring all day at lists of methods, shell scripts, and code.  I&apos;m locating and cleaning out abandoned EJB methods.  I&apos;m tired.  This isn&apos;t busy work I&apos;ve been assigned -- I&apos;ve assigned myself this responsibility, because I&apos;m a neat freak who takes to mundane tasks like code reformatting, refactoring, and today, cruft removal.  Tomorrow, when I get to the real work, it&apos;ll be all the easier, and I&apos;ll be able to focus.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Actually Using Eclipse
            </title>
            <link>
                https://www.hjsoft.com/blog/Actually_Using_Eclipse.html
            </link>
            <pubDate>Thu, 13 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Actually_Using_Eclipse.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve actually started using &lt;a href = &quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; for work now.  I saw one of my coworkers manipulating VSS right in the IDE using the VSSPlugin and I decided that maybe it&apos;s time to actually give it a shot.  The rudimentary Ant support makes Eclipse useful too.&lt;/p&gt;

&lt;p&gt;The intellisense code completion works nicely enough.  Amazingly some of the automatic syntax stuff (closing parentheses, braces, quotes) hasn&apos;t gotten in my way, since it intelligently lets me type them myself as well.  &quot;Organize Imports&quot; also has me completely spoiled.  The advanced navigation and Java searches allow me to more thoroughly explore code as I always expected it would.&lt;/p&gt;
&lt;p&gt;Besides trying to get used to automatic indentation (which can be fixed up for the most part with the &quot;Correct Indentation&quot; key binding), my main discomfort is all the GUI poking and prodding it takes me to setup my environment and project -- I doubt any 2 people here have similar environments, and I&apos;m pretty sure I could never reproduce my environment just the way it is on another machine.  I&apos;ve not tried too much yet, but  this may not be a real concern if I find the project files to be especially intelligent and portable.&lt;/p&gt;
&lt;p&gt;I still revert back to a command-line for doing Ant-based deployments, since it&apos;s just less awkward to specify a target and a couple options than all the pointing, clicking, searching lists, etc in the GUI.  I miss my vi(1) keys a bit as well.  It&apos;s not as bad as I would have expected, but I&apos;ll still fire up vi when I need to do some mass code rearrangement where I need to move around quickly.&lt;/p&gt;
&lt;p&gt;I saw &lt;a href = &quot;http://www.netbeans.org/&quot;&gt;Netbeans 4.0&lt;/a&gt; projects are completely based on Ant&apos;s build.xml now.  I think Eclipse needs to learn a thing or 2 from Netbeans here.  Netbeans&apos; ability to let me add ant targets to a context menu seemed make for a pretty intuitive experience.  Maybe this does exist already, and I just need to go searching the Eclipse plugins.&lt;/p&gt;
&lt;p&gt;For my own personal projects, I&apos;ve not converted to Eclipse yet.  Using xDoclet to generate much of the code could cause Eclipse to have trouble resolving references in the editor, but I saw an option to refresh the workspace after a build, so I wouldn&apos;t be surprised if I could get it to work.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Garden State
            </title>
            <link>
                https://www.hjsoft.com/blog/Garden_State.html
            </link>
            <pubDate>Tue, 11 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Garden_State.html
            </guid>
            <description>
                &lt;p&gt;Claire and I found &lt;a href = &quot;http://www2.foxsearchlight.com/gardenstate/&quot;&gt;Garden State&lt;/a&gt; to be a great movie that both of us could actually enjoy.  I highly recommend it if you like your humor a bit dark and absurd.  There are so many funny little &lt;a href = &quot;http://www.imdb.com/title/tt0333766/quotes&quot;&gt;lines&lt;/a&gt; that I&apos;d love to be able to quote in real life.  The soundtrack is quite nice too.  It&apos;s very distinctive and will always remind you of bits of the movie.&lt;/p&gt;
&lt;p&gt;I love &lt;a href = &quot;http://gardenstate.typepad.com/&quot;&gt;Zach Braff&lt;/a&gt;&apos;s work on the Scrubs TV show, and this movie didn&apos;t disappoint.  I really must wonder how he gets the opportunity to write, direct, and star in his own movie for a big production company.  After watching &lt;a href = &quot;http://www.imdb.com/title/tt0420917/?fr=c2l0ZT1kZnxteD0yMHxzZz0xfGxtPTIwMHx0dD1vbnxwbj0wfHE9c25vd2JhbGwgZWZmZWN0fGh0bWw9MXxubT1vbg__;fc=1;ft=1&quot;&gt;Snowball Effect: The Story of Clerks&lt;/a&gt;, I&apos;d think it&apos;s nearly impossible to make the strides Zach has.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Book Review: Test-Driven Development
            </title>
            <link>
                https://www.hjsoft.com/blog/Book_Review_Test-Driven_Development.html
            </link>
            <pubDate>Tue, 11 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Book_Review_Test-Driven_Development.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve just finished reading &lt;a href = &quot;http://www.apress.com/&quot;&gt;APress&lt;/a&gt;&apos; upcoming publication of &lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=359&quot;&gt;Test-Driven Development: A J2EE Example&lt;/a&gt;, written by Thomas Hammell (with Russell Gold and Tom Snyder). I&apos;m left inspired to write unit tests for every upcoming task, and I regret many previous tasks for which I&apos;ve never written tests.  The authors do a great job of explaining the process and selling the whole test-driven method of development.&lt;/p&gt;
&lt;p&gt;After convincing you to use TDD (Chapter 1), the book introduces the design of its example application (Chapter 2), and then gets into &lt;a href = &quot;http://www.junit.org/&quot;&gt;JUnit&lt;/a&gt; and its extensions.  As you proceed through the chapters, you learn to use the extensions for testing in each tier (POJO, JSP/servlet, Swing, EJB, database).  Most the high-level TDD concepts are explained in relation to plain objects, since these really are the easiest to test -- even a non-enterprise programmer could find the first couple chapters of this book very useful.  The reasons and the basis of TDD were pretty familiar to me before reading this book.&lt;/p&gt;
&lt;p&gt;The other tools introduced in subsequent chapters just made it easier to apply your unit testing capabilities to those tiers.  The JUnit extensions and tools covered include HttpUnit, Cactus, MockObjects, Jemmy, DBUnit, and others.  The capabilities of some of these extensions are pretty surprising, and the introduction to them all is quite valuable.  Without having read this book, I wouldn&apos;t have even known some of this was possible.&lt;/p&gt;
&lt;p&gt;The authors don&apos;t really introduce all the extensions in the beginning, so I found myself distracted by the thought, &quot;This is great and all, but so much of my application is based on data, so it&apos;s not this simple.&quot; That was my reason for abandoning TDD (using &lt;a href = &quot;http://jakarta.apache.org/cactus/&quot;&gt;Cactus&lt;/a&gt;) a couple years ago.&lt;/p&gt;
&lt;p&gt;They do eventually get around to the useful extensions and methods for testing with and without the data tier.  An earlier mention of these other tools would have put my mind at ease through those early chapters though.  Up until the chapters actually covering the more complex tests, I had a nagging feeling that they were completely dancing around the complexity.&lt;/p&gt;
&lt;p&gt;Back when I abandoned TDD in my previous work, it turns out I should have been using these other extensions (or just JUnit) where appropriate instead of trying to make Cactus do everything.  I could have also learned to encapsulate my systems more completely had I been forced to look at them in distinct pieces through their unit tests.  This is where I really wish I had this book to read 3 years ago.  Regardless, the TDD fire is again ignited.&lt;/p&gt;
&lt;p&gt;The final chapters of the book cover maintaining and refactoring your tests with your code, and transitioning an existing project (and workplace) to using TDD.  I&apos;ve immediately begun applying these new techniques to my current code at work.  As one method suggested in the book, I&apos;m &lt;em&gt;just doing it&lt;/em&gt;.  The tests exist in a parallel to the real code, so I can introduce this and prove it without having to disrupt the rest of the developers.  Once I&apos;ve worked out the details and benefits, I can introduce it to my fellow developers in the future.&lt;/p&gt;
&lt;p&gt;I regard this book as an introduction to TDD and all the convincing you&apos;ll need to give it a try and even succeed.  If you&apos;d like to get started with TDD, get this book, download the tools it suggests, and use its examples as starting points to explore using TDD to design your own projects.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Quoted for Holub on Patterns Website
            </title>
            <link>
                https://www.hjsoft.com/blog/Quoted_for_Holub_on_Patterns_Website.html
            </link>
            <pubDate>Mon, 10 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Quoted_for_Holub_on_Patterns_Website.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.apress.com/&quot;&gt;APress&lt;/a&gt; quoted me on their site for &lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=368&quot;&gt;Holub on Patterns&lt;/a&gt;.  That&apos;s fun!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                I Must Try Katamari Damacy
            </title>
            <link>
                https://www.hjsoft.com/blog/I_Must_Try_Katamari_Damacy.html
            </link>
            <pubDate>Wed, 5 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/I_Must_Try_Katamari_Damacy.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently &lt;a href = &quot;http://www.blojsom.com/blog/general/2005/01/05/On_Katamari_Damacy.html&quot;&gt;read about a game&lt;/a&gt; called &lt;a href = &quot;http://www.namco.com/games/katamari_damacy/&quot;&gt;Katamari Damacy&lt;/a&gt;.  You apparently just roll this ball of stuff around and make it grow as things stick to it, so the controls sound dead simple.  That&apos;s good for me, because complicated controls are one of the things that have really turned me off to gaming.&lt;/p&gt;
&lt;p&gt;Now I need to convince one of my PS2-toting friends to go buy this game or join GameFly or something.  None of the local Blockbuster stores seem to have it.  Who&apos;s interested?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Me vs. Linux 2.6.10
            </title>
            <link>
                https://www.hjsoft.com/blog/Me_vs_Linux_2.6.10.html
            </link>
            <pubDate>Mon, 3 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Me_vs_Linux_2.6.10.html
            </guid>
            <description>
                &lt;p&gt;I installed the 2.6.10 &lt;a href = &quot;http://www.kernel.org/&quot;&gt;kernel&lt;/a&gt; a while back and had nothing but trouble.  After a suspend to disk (swsusp) and resume, my ThinkPad R40&apos;s &lt;a href = &quot;http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=110424560708210&amp;amp;w=2&quot;&gt;e100 network interface failed&lt;/a&gt;.
I eventually got advice to try 
&lt;a href = &quot;http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=110469150921035&amp;amp;w=2&quot;&gt;pci=routeirq&lt;/a&gt;, and that corrected that issue for me.  It supposedly helps USB, as well, but I wasn&apos;t using that so much.  Ultimately, a 
&lt;a href = &quot;http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=110476483012015&amp;amp;w=2&quot;&gt;swsusp patch&lt;/a&gt; was figured out, and should fix it all, so I won&apos;t need the &lt;code&gt;pci=routeirq&lt;/code&gt; option.
&lt;/p&gt;
&lt;p&gt;My &lt;a href = &quot;http://ipw2100.sf.net/&quot;&gt;IPW2100 wireless NIC&lt;/a&gt; also failed, but there&apos;s a &lt;a href = &quot;http://sourceforge.net/mailarchive/forum.php?thread_id=6233170&amp;amp;forum_id=38938&quot;&gt;patch for that&lt;/a&gt; as well.&lt;/p&gt;
&lt;p&gt;All this talk of proper IRQ handling and such got me thinking about my mysterious lockup issue as well.  Occassionally, after waking from swsusp, my notebook hard locks, and I have to punch the power button.  I&apos;m playing with the &lt;code&gt;acpi=noirq&lt;/code&gt; option to see if that alleviates the problem.  I&apos;m hopeful that maybe these recent swsusp patches could fix it as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New JBoss Documentation
            </title>
            <link>
                https://www.hjsoft.com/blog/New_JBoss_Documentation.html
            </link>
            <pubDate>Mon, 3 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_JBoss_Documentation.html
            </guid>
            <description>
                &lt;p&gt;For my future reference: Here is the full &lt;a href = &quot;http://docs.jboss.org/jbossas/jboss4guide/r1/html/&quot;&gt;JBoss 4.0.x Documentation&lt;/a&gt;.  Additionally, it seems that JBoss 4.0.1 has been released, so I&apos;ll have to give it a spin on all my servers.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                NYE 2004
            </title>
            <link>
                https://www.hjsoft.com/blog/NYE_2004.html
            </link>
            <pubDate>Mon, 3 Jan 2005 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/NYE_2004.html
            </guid>
            <description>
                &lt;p&gt;My New Year&apos;s Eve was great.  I slept in just a little, then ran around downtown Lancaster with Claire and Paige for lunch and most of the afternoon.  We wandered the farmers&apos; market, Hagar Arcade (upscale shops), Queen Street shops, Chestnut Books.&lt;/p&gt;

&lt;p&gt;We didn&apos;t really buy much beyond lunch, but it was nice to wander.  It was actually nice enough that we could just sit on a bench and eat outside. It was nice to get downtown again.  I&apos;ve missed my days being near things working in downtown Lancaster.&lt;/p&gt;
&lt;p&gt;Otherwise, we just stayed home for the night.  It was nice and relaxing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                J2ME Starting Points?
            </title>
            <link>
                https://www.hjsoft.com/blog/J2ME_Starting_Points.html
            </link>
            <pubDate>Tue, 28 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/J2ME_Starting_Points.html
            </guid>
            <description>
                &lt;p&gt;I haven&apos;t done any in-depth reading yet, but &lt;a href = &quot;http://developers.sun.com/techtopics/mobility/&quot;&gt;Sun&apos;s  Mobility site&lt;/a&gt; looks like it could be a good starting point for me in J2ME programming.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Heifer International
            </title>
            <link>
                https://www.hjsoft.com/blog/Heifer_International.html
            </link>
            <pubDate>Tue, 28 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Heifer_International.html
            </guid>
            <description>
                &lt;p&gt;For 60 years, &lt;a href = &quot;http://www.heifer.org/&quot;&gt;Heifer International&lt;/a&gt; has been providing a way for people to provide useful farm animals directly to families who need them in needy areas around the world.  They not only provide the animals, but also support and training to families who need help learning to care for the animal and produce food and a living.&lt;/p&gt;
&lt;p&gt;It&apos;s a program that makes pretty basic sense, so it will definitely be on my Christmas wishlist for next year.  I&apos;ll be encouraging gift-givers to send someone a cow or something in my name. :)&lt;/p&gt;
&lt;p&gt;If you&apos;re especially well-off and looking to give $5000, check out all you could send in the &lt;a href = &quot;http://catalog.heifer.org/giftark.cfm&quot;&gt;Ark Package&lt;/a&gt;.  It&apos;s just amazing how far money can go when applied properly!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                An Affront to All That is L33t
            </title>
            <link>
                https://www.hjsoft.com/blog/An_Affront_to_All_That_is_L33t.html
            </link>
            <pubDate>Wed, 22 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/An_Affront_to_All_That_is_L33t.html
            </guid>
            <description>
                &lt;p&gt;Largo says it &lt;a href = &quot;http://www.megatokyo.com/index.php?strip_id=650&quot;&gt;all&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Review: Holub on Patterns
            </title>
            <link>
                https://www.hjsoft.com/blog/Review_Holub_on_Patterns.html
            </link>
            <pubDate>Tue, 21 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Review_Holub_on_Patterns.html
            </guid>
            <description>
                &lt;p&gt;As you may know if you are a frequent reader of my weblog, I&apos;m a huge fan of design patterns, so when &lt;a href = &quot;http://www.apress.com/&quot;&gt;APress&lt;/a&gt; offered to send me another couple books to review, I was greatly excited to get a chance to look at Allen Holub&apos;s &lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=368&quot;&gt;&lt;em&gt;Holub on Patterns: Learning Design Patterns by Looking at Code&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h1 style = &quot;font-size: 100%;&quot;&gt;Overall Impression&lt;/h1&gt;
&lt;p&gt;As a patterns book, I already start out liking it much more than other types of books.  The book is also very detailed with its examples and extended explanations of proper object-oriented methodologies, so that too scores bonus points with me.&lt;/p&gt;


&lt;p&gt;The author admittedly starts out assuming you know most the good reasons to use aspects of object-oriented programming and detracts from that stance in his arguments against certain aspects. These practices include the blind use of accessors and mutators and implementation inheritance.  I don&apos;t think I completely like this style, since it leaves me feeling sort of desperate for alternative practices by the end of a section.  Despite saying he wasn&apos;t going to cover the &lt;em&gt;Pros&lt;/em&gt;, he does visit that side of the coin long enough to explain the appropriate applications of our common practices at which he previously took aim.&lt;/p&gt;
&lt;p&gt;I found myself often referring back to the Gang of Four book to see if they provided any of these caveats, but often they did not.  Mr. Holub&apos;s valuable warnings developed from real experience with these patterns.&lt;/p&gt;
&lt;p&gt;The book is sprinkled with typos and slight mis-wordings, but anyone familiar with the subject matter should be able to spot and compensate for the mistakes.  I think they could be unnecessary stumbling blocks for the beginner though. (I have a slow word-for-word reading style which makes typos especially distracting.)&lt;/p&gt;
&lt;p&gt;I&apos;ve also never been a fan of anonymous inner classes, so I approach that little trick with skepticism.  Mr. Holub uses them quite a bit, and when &lt;em&gt;&amp;lt;&amp;lt;Anonymous&amp;gt;&amp;gt;&lt;/em&gt; creeps into the UML diagrams, I&apos;m especially disenchanted with anonymous classes.  I think normal named classes could be more descriptive for examples.&lt;/p&gt;
&lt;h1 style = &quot;font-size: 100%;&quot;&gt;The Chapter Details&lt;/h1&gt;
&lt;p&gt;I found Chapters 1 and 2 packed with the most useful information.  The extensive discussion of proper OO and common misconceptions really changed the way I coded -- I bid goodbye to my beloved &lt;em&gt;Template Method&lt;/em&gt; pattern in favor of the &lt;em&gt;Strategy&lt;/em&gt; pattern to break the fragile coupling of implementation inheritance.  It was also good to see Java examples for the basics of factories, singletons, and discussions of their pitfalls.&lt;/p&gt;
&lt;p&gt;Chapters 3 and 4 provided complete pattern examples by showing them entangled in working, large-scale examples (the Game of Life, and an Embedded SQL Database).  These chapters effectively demonstrate the complexity with which these patterns often interact and enforced points made in the earlier chapters.  I struggled and gave up at some parts trying to absorb everything  here.&lt;/p&gt;
&lt;p&gt;Each of these large chapters contains the complete project code for reference, so I ended up skipping 20 pages at a time while reading, but I know I&apos;ll find these pages useful when I need concrete examples of these pattern implementations.  I&apos;m pretty sure it was a good idea for the author to include this code.&lt;/p&gt;
&lt;p&gt;The end of the book contains a complete catalog of all the Gang of Four patterns in an appendix.  It consists of a concise 2 page summary devoted to each pattern, including bits of Java code. It also has  references to well-known APIs which demonstrate the patterns.  This appendix and the extensive discussions have earned this book its new place in my laptop bag replacing my old Gang of Four book.&lt;/p&gt;
&lt;h1 style = &quot;font-size: 100%;&quot;&gt;Relevance&lt;/h1&gt;
&lt;p&gt;The publisher printed this book in hardback signifying their belief that the book will be relevant for a while.  I completely agree -- it relates and refines many years of experience in the object-oriented and pattern communities.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Dabbling in JSP 2.0
            </title>
            <link>
                https://www.hjsoft.com/blog/Dabbling_in_JSP_20.html
            </link>
            <pubDate>Fri, 17 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Dabbling_in_JSP_20.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve switched to JSP 2.0 in my blog code and eliminated my JSTL &lt;code&gt;&amp;lt;c:out&amp;gt;&lt;/code&gt; statements in favor of EL &lt;code&gt;${expressions}&lt;/code&gt;.  It seems I&apos;ll only need to use &lt;code&gt;&amp;lt;c:out&amp;gt;&lt;/code&gt; when I want to have it escape the XML entities in output, since EL doesn&apos;t filter at all.  The new syntax is much nicer to use in the code, especially when used in an attribute of another HTML tag, such as an &lt;code&gt;href&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Convincing Tomcat to interpret the JSP 2.0 expression language required me to switch to the new XMLSchema in place of the old web.xml DTD:&lt;/p&gt;
&lt;pre&gt;&amp;lt;web-app
    xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;
    version=&quot;2.4&quot;&amp;gt;&lt;/pre&gt;
&lt;p&gt;To ensure that JSTL understood the embedded EL, I also needed to convert all my &lt;code&gt;&amp;lt;%@taglib%&amp;gt;&lt;/code&gt; to import the &lt;em&gt;_rt&lt;/em&gt; versions of the taglibs, so &lt;code&gt;http://java.sun.com/jstl/core&lt;/code&gt; became &lt;code&gt;http://java.sun.com/jstl/core_rt&lt;/code&gt; and &lt;code&gt;http://java.sun.com/jstl/fmt&lt;/code&gt; became &lt;code&gt;http://java.sun.com/jstl/fmt_rt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I also managed to switch to valid XHTML Strict, and added a CSS check.  Of course, now that I&apos;ve deployed it, I notice that Struts&apos; form tags aren&apos;t XHTML Strict compliant. *sigh*  The &lt;em&gt;name&lt;/em&gt; attribute on &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; is invalid.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Baby Site
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Baby_Site.html
            </link>
            <pubDate>Thu, 16 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Baby_Site.html
            </guid>
            <description>
                &lt;p&gt;Some people may have noticed that I moved &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/paige/&quot;&gt;Paige&apos;s Weblog&lt;/a&gt;.  Come July 4th or so, the old &lt;em&gt;baby.hjsoft.com&lt;/em&gt; site will no longer be &lt;em&gt;specific&lt;/em&gt; enough to mean &lt;em&gt;Paige&lt;/em&gt;.  We will have a second kid!  Notes on the new baby experience will be found at &lt;a href = &quot;http://weblogs.hjsoft.com/blojsom/blog/baby/&quot;&gt;http://weblogs.hjsoft.com/blojsom/blog/baby/&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Home Mechanic Curse
            </title>
            <link>
                https://www.hjsoft.com/blog/Home_Mechanic_Curse.html
            </link>
            <pubDate>Thu, 16 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Home_Mechanic_Curse.html
            </guid>
            <description>
                &lt;p&gt;My yearly car inspection is due this month, so I replaced a tail light and 2 tires (they lasted a year) ahead of time.  I got it inspected, and it needs brakes now.  I had glanced at them the night before and hoped they&apos;d make it another year.&lt;/p&gt;
&lt;p&gt;Knowing how to fix cars is a curse -- when the mechanic calls at 7:40am to tell me it&apos;ll cost an extra $120 for the him to replace my brake pads, I can&apos;t tell him to just do it.  Too quickly, I come to the realization that I&apos;d rather spend $20 and 30 minutes doing it myself and keep the $100.&lt;/p&gt;

&lt;p&gt;With my preliminary work, inspection cost me $295 this year for tires, a tail light, front brakes, emissions test, and inspection.  It&apos;s amazing how much you can wear out on a car driving too far to work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (16 December 2004):&lt;/strong&gt;
After 4 hours of work, 2 more trips to AutoZone, and $35 in tools (that&apos;s pronounced &quot;investment&quot;),  I&apos;ve replaced my brakes, and the car passed inspection.  I didn&apos;t work near as efficiently as I had expected, and I didn&apos;t even get around to changing my oil.  While working, I started to doubt the validity of my decision to do this myself.  I just have to ask myself what those 4 hours were worth to me -- I&apos;m not sure.  I do know what the money I saved is worth.&lt;/p&gt;
&lt;p&gt;I didn&apos;t think newer cars were supposed to be this much work.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                XWiki?
            </title>
            <link>
                https://www.hjsoft.com/blog/XWiki.html
            </link>
            <pubDate>Wed, 15 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/XWiki.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.xwiki.org/&quot;&gt;XWiki&lt;/a&gt; looks like a package I&apos;d like to try.  I think I&apos;ve always regarded my weblog as a personal knowledge base, like a Wiki.  Versioning could be useful, but the weblog trackback/comment web has intriguing uses as well.&lt;/p&gt;
&lt;p&gt;The XWiki sites I&apos;ve seen look very nice, in that the maintenance/admin functionality doesn&apos;t get in the way of the real content.  I&apos;ll probably download, install, and play with it sometime soon.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Using JConsole
            </title>
            <link>
                https://www.hjsoft.com/blog/Using_JConsole.html
            </link>
            <pubDate>Wed, 8 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Using_JConsole.html
            </guid>
            <description>
                &lt;p&gt;Here&apos;s an article at &lt;a href = &quot;http://java.sun.com&quot;&gt;Sun&lt;/a&gt; introducing how to &lt;a href = &quot;http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html&quot;&gt;use JConsole to monitor applications&lt;/a&gt;.  I&apos;ll have to get back to this one and spend some quality time reading.&lt;/p&gt;
&lt;p&gt;I&apos;ve played briefly with JConsole during and after a JUG presentation on new features in J2SDK 5.0, and I was quite impressed with the pretty graphs and the lack of performance overhead incurred on my runing program, but it&apos;s been a while.  This article appears to present much more information than my previous 10 minutes with the tool.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Philly WiFi Hits the Skids (Maybe)
            </title>
            <link>
                https://www.hjsoft.com/blog/Philly_WiFi_Hits_the_Skids.html
            </link>
            <pubDate>Thu, 2 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Philly_WiFi_Hits_the_Skids.html
            </guid>
            <description>
                &lt;p&gt;The PA state legislature &lt;a href = &quot;http://www.freepress.net/news/5593&quot;&gt;passed a law&lt;/a&gt; to limit municipalities&apos; rights to implement their own internet services.  This gives Verizon a whole lot of power to veto government plans for access.  The article does mention that Verizon OK&apos;d the Philly plan before the law was passed, so maybe all is not lost for that city.&lt;/p&gt;
&lt;p&gt;In daily news coverage, I also think I heard something about the law requiring a telecom company (aka Verizon) to actually expand their services into rural areas.  I could especially see a requirement to provide service within a certain period in areas where they dispute a government access plan.  I&apos;ve not read the law, though, so I don&apos;t know what&apos;s in there for certain yet.  If these clauses &lt;em&gt;are&lt;/em&gt; in there, then this could serve well to light a fire under Verizon on expanding DSL services.  If they can&apos;t provide, then maybe they can&apos;t object.&lt;/p&gt;
&lt;p&gt;This still does nothing to provide access to lower-income households, though, like a municipality could.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Free Phone Stuff: Zedge
            </title>
            <link>
                https://www.hjsoft.com/blog/Free_Phone_Stuff_Zedge.html
            </link>
            <pubDate>Thu, 2 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Free_Phone_Stuff_Zedge.html
            </guid>
            <description>
                &lt;p&gt;While traversing search referers, I stumbled upon this site of free stuff for cell phones: &lt;a href = &quot;http://www.zedge.no/&quot;&gt;Zedge&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Dangers of Commuting
            </title>
            <link>
                https://www.hjsoft.com/blog/Dangers_of_Commuting.html
            </link>
            <pubDate>Thu, 2 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Dangers_of_Commuting.html
            </guid>
            <description>
                &lt;p&gt;Last night on my way home, I shared the road with an 18-wheeler who high-beamed me as he merged  behind me into the slow lane as if I was in his way or something.  Then he laid on the air horn for 20 seconds at another car that slipped out in front of him in &lt;em&gt;stopped&lt;/em&gt; traffic.&lt;/p&gt;
&lt;p&gt;Then there was the disruptively hurried SUV darting back and forth between lanes but getting nowhere.  (I must admit that I was at key moments not as accomodating as I could have been.)&lt;/p&gt;
&lt;p&gt;The final treat was all of the slow lane having to swerve at the last moments around a wheel barrow laying in the middle of the lane.  I&apos;d find it hard to believe that no one hit that through the course of the night.  Wheel barrows don&apos;t have reflectors or tail lights, you don&apos;t expect to see something like that laying around in the road, and there are many big vehicles (like 18-wheelers) which just don&apos;t swerve around things like that as well as others do.  I was really lucky that he left lane was clear when I happened upon the scene, because there were cars crawling slowly around it on the shoulder, and there was nowhere else to go.  With everyone seeing it so late, you had little indication what was going on until the car in front of you slammed the brakes and darted to one side or the other.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                A Note on Privatization of Social Security
            </title>
            <link>
                https://www.hjsoft.com/blog/A_Note_on_Privatization_of_Social_Security.html
            </link>
            <pubDate>Thu, 2 Dec 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/A_Note_on_Privatization_of_Social_Security.html
            </guid>
            <description>
                &lt;p&gt;To save for my retirement, I&apos;ll put away a little cash &lt;em&gt;on top&lt;/em&gt; of the social security tax I pay.  We can&apos;t just pick up and take our cash home to our own private accounts when the social security system needs it more than ever to help support our parents and grandparents.&lt;/p&gt;
&lt;p&gt;Removing money from the system now is just irresponsible.  Social security can&apos;t come to an end with the largest population relying upon it.&lt;/p&gt;
&lt;p&gt;I don&apos;t look at social security tax as &lt;em&gt;my&lt;/em&gt; savings -- it&apos;s security for today&apos;s retired people.  I&apos;m also smart enough to not expect social security of the future to be adequate or even exist when it comes time for me to collect, so I&apos;ll save for myself through the private funds, 401K&apos;s, etc.  They can just stop promising me anything now, and I&apos;ll understand in 40 years when no one&apos;s paying social security and they&apos;re all saving for themselves.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Shin-kicking Robosapien
            </title>
            <link>
                https://www.hjsoft.com/blog/Shin-kicking_Robosapien.html
            </link>
            <pubDate>Tue, 30 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Shin-kicking_Robosapien.html
            </guid>
            <description>
                &lt;p&gt;If the day ever comes that I&apos;m in charge of our source repository, I&apos;m going to implement a commit hook that checks incoming code for horrible examples of style and reject the code.  Additionally, when someone submits Java code that looks like this:&lt;/p&gt;
&lt;pre&gt;ResultSet DynamicUserRS = stmt.getResultSet()&lt;/pre&gt;
&lt;p&gt;I&apos;m going to have a script that dispatches my programmable &lt;a href = &quot;http://www.wowwee.com/robosapien/robo1/robomain.html&quot;&gt;Robosapien&lt;/a&gt; to kick the programmer in the shin.&lt;/p&gt;

&lt;p&gt;It&apos;s such a simple disregard for convention, but it&apos;s piled on top of several other style issues, so the code in question is just making me never want to return to my desk to correct it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                UML and J2SDK 5.0
            </title>
            <link>
                https://www.hjsoft.com/blog/UML_and_J2SDK_5.0.html
            </link>
            <pubDate>Wed, 24 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/UML_and_J2SDK_5.0.html
            </guid>
            <description>
                &lt;p&gt;I had problems starting a JBoss instance (3.2.6 or 4.0.0) running J2SDK 5.0 on user-mode-linux 2.4.26-2um at my VPS host.  A java thread would just end up spinning at 99% CPU and JBoss would otherwise never complete its startup.&lt;/p&gt;
&lt;p&gt;I&apos;ve managed to get it to run by specifying the &lt;code&gt;-Xint&lt;/code&gt; option to the JVM to make it run in interpreted mode only.  This sounds like it should be slower, but it doesn&apos;t feel noticeably slower yet.  Of course, I haven&apos;t run much of anything but the JMX console on this instance.&lt;/p&gt;
&lt;p&gt;I&apos;m going to continue to follow te user-mode-linux-user mailing list, since it seems that issues like mine have cropped up in the past and have been solved by UML patches or by library changes.  For reference, I&apos;m running Debian Sid on the VPS, and it runs well otherwise.&lt;/p&gt;
&lt;p&gt;In hopes of eventually pushing some code out to the VPS in the near future, I&apos;ve had to resort to adding the &lt;code&gt;target = &quot;1.4&quot;&lt;/code&gt; and &lt;code&gt;source = &quot;1.4&quot;&lt;/code&gt; attributes to my ant javac to make sure I&apos;m avoiding 5.0-isms.  With luck, I&apos;ll now be able to use the J2SDK 5.0 features.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Junglist Protesters in Kiev
            </title>
            <link>
                https://www.hjsoft.com/blog/Junglist_Protesters_in_Kiev.html
            </link>
            <pubDate>Wed, 24 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Junglist_Protesters_in_Kiev.html
            </guid>
            <description>
                &lt;p&gt;NPR&apos;s been reporting from Kiev, Ukraine where supporters of the opposition party are &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4184498&quot;&gt;protesting&lt;/a&gt; the latest flawed election.  The reporter seems close the the action, so every report features lots of almost overwhelming noise from the crowd in the background -- the first report I had heard had people chanting political slogans, and this latest one had a nice little DnB track blasting over the PA system.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Molding My Job
            </title>
            <link>
                https://www.hjsoft.com/blog/Molding_My_Job.html
            </link>
            <pubDate>Tue, 23 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Molding_My_Job.html
            </guid>
            <description>
                &lt;p&gt;When I started my job over 2 years ago, I recognized that I wanted to work on the framework code, but I ended up doing mostly application code.  I still took my every spare moment to study, recommend, and implement new framework ideas.&lt;/p&gt;
&lt;p&gt;Today, a new team organization chart come down from management, and I&apos;m officially on the framework team!  Like I&apos;ve done in other positions, I&apos;ve turned my job into what I wanted it to be.&lt;/p&gt;

&lt;p&gt;I&apos;m grateful for the freedoms most my jobs have afforded me to advance my knowledge while advancing projects.  At my previous job, I came in as a Java application programmer, started studying J2EE on my own, and introduced it as possible solutions to our current problem-set.  By the time I left there, I was working as the J2EE technical lead architect.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Trick or Treat
            </title>
            <link>
                https://www.hjsoft.com/blog/Trick_or_Treat.html
            </link>
            <pubDate>Fri, 19 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Trick_or_Treat.html
            </guid>
            <description>
                &lt;p&gt;Who the hell gives out candy cigarettes to kids at Halloween?  I wouldn&apos;t have even expected these things to be manufactured anymore!&lt;/p&gt;
&lt;a href = &quot;http://www.hjsoft.com/gallery/Camera_Phone/candy_cigarettes&quot;&gt;
&lt;img src = &quot;http://www.hjsoft.com/albums/Camera_Phone/candy_cigarettes.thumb.jpg&quot; alt = &quot;[candy_cigarettes.jpg]&quot;/&gt;&lt;/a&gt;

            </description>
            
        </item>
        <item>
            <title>
                Vim Colors
            </title>
            <link>
                https://www.hjsoft.com/blog/Vim_Colors.html
            </link>
            <pubDate>Fri, 19 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Vim_Colors.html
            </guid>
            <description>
                &lt;p&gt;I used to hate Vim&apos;s syntax highlighting, but I finally figured out how to make it usable!  I generally go for a &quot;white on black&quot; terminal, and Vim&apos;s highlighting was hard to read.  Today I found the &lt;code&gt;set background=dark&lt;/code&gt; option for .exrc, and it makes all the difference.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Building Your Own J2SDK Packages for Debian
            </title>
            <link>
                https://www.hjsoft.com/blog/Building_Your_Own_J2SDK_Packages_for_Debian.html
            </link>
            <pubDate>Thu, 18 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Building_Your_Own_J2SDK_Packages_for_Debian.html
            </guid>
            <description>
                &lt;p&gt;Alex Malinovich enlightened us in an &lt;a href = &quot;http://lists.debian.org/debian-user/2004/11/msg01623.html&quot;&gt;email&lt;/a&gt; on the debian-user mailing list as to building your own nice .deb files from Sun&apos;s official J2SDK .bin files.  I&apos;d like to note the steps here for my own and other&apos;s benefit.&lt;/p&gt;
&lt;p&gt;Here are the steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download J2SDK or JRE .bin from Sun.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apt-get install java-package fakeroot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build your deb file:&lt;br/&gt;
&lt;code&gt;fakeroot make-jpkg &lt;i&gt;&amp;lt;downloaded.bin&amp;gt;&lt;/i&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install Debian&apos;s java support files:&lt;br/&gt;
&lt;code&gt;apt-get install sun-&lt;i&gt;&amp;lt;whatever version&amp;gt;&lt;/i&gt;debian&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dpkg -i &lt;i&gt;&amp;lt;new j2sdk&amp;gt;.deb&lt;/i&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I saw a couple errors doing it, but no show-stoppers, and it did, in the end, produce a working deb file which I installed.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Review: Practical Subversion
            </title>
            <link>
                https://www.hjsoft.com/blog/Review_Practical_Subversion.html
            </link>
            <pubDate>Wed, 17 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Review_Practical_Subversion.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.apress.com&quot;&gt;Apress&lt;/a&gt; was kind enough to send me an advance copy of the  forthcoming book, &lt;a href = &quot;http://www.apress.com/book/bookDisplay.html?bID=360&quot;&gt;Practical Subversion&lt;/a&gt;, by Garrett Rooney.&lt;/p&gt;
&lt;p&gt;Main Contents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ch1: Introducing Subversion&lt;/li&gt;
&lt;li&gt;Ch2: A Crash Course in Subversion&lt;/li&gt;
&lt;li&gt;Ch3: Repository Administration&lt;/li&gt;
&lt;li&gt;Ch4: Migrating from Other Version Control Systems&lt;/li&gt;
&lt;li&gt;Ch5: Advanced Apache Integration&lt;/li&gt;
&lt;li&gt;Ch6: Best Practices&lt;/li&gt;
&lt;li&gt;Ch7: Integrating Subversion with Other Tools&lt;/li&gt;
&lt;li&gt;Ch8: Using the Subversion APIs&lt;/li&gt;
&lt;li&gt;Appendix A: Subversion Command Glossary&lt;/li&gt;
&lt;li&gt;Appendix B: Subversion Compared to Other Version Control Systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chapters 1 and 2 quickly introduce some of the concepts of version control and explain the most common Subversion commands for the everyday user.  Using just these chapters, the beginner could get their client connected up to an existing repository, or create and start using their own working local repository.  It&apos;s a pretty quick and complete start with enough examples and explanations to provide answers to the basic user&apos;s questions.&lt;/p&gt;
&lt;p&gt;I don&apos;t think the beginner needs to be intimately familiar with Chapter 3, since it covers administration of the repository.  Definitely skim it and be familiar with its topics, because there are many useful tricks to learn here, and it&apos;ll facilitate the transition to being a power user.  I learned about metadata and various ways to provide access to the repository through svnserve and secure shell or Apache 2.  Between the book&apos;s examples and my Debian packages, I easily had both methods working within a few minutes of trying.  Previously, I had only been brave enough to setup a local repository.&lt;/p&gt;
&lt;p&gt;I just about skipped the migration chapter, since I didn&apos;t need it at this point.  I did glean that there are methods and tools to accomplish migrations, and I trust that there&apos;s enough information in this chapter to help in my efforts when it becomes necessary.  For kicks, I&apos;ll probably return to this chapter in the near future and try a migration of an old project from CVS just to see how well it works.&lt;/p&gt;
&lt;p&gt;Chapter 5 got my Apache 2 instance tuned up and secured a bit through &lt;code&gt;mod_auth&lt;/code&gt;.  I had already been using &lt;code&gt;mod_deflate&lt;/code&gt;, and I&apos;ve used &lt;code&gt;mod_ssl&lt;/code&gt; before, so those directions were familiar.  It pretty much came down to any Apache module could be used in conjunction with the Subversion modules with a few noted exceptions.  I&apos;ll revisit some of the authorization settings (&lt;code&gt;mod_authz_svn&lt;/code&gt;) in my second pass over the book.&lt;/p&gt;
&lt;p&gt;I was glad to see a chapter on Best Practices.  Like writings on design patterns in programming, this chapter captures the larger picture of how you should use Subversion (or almost any version control system) effectively in your project, not just the command syntax.  The author&apos;s best practices echoes and reinforces the best practices I&apos;ve already adopted.  Additionally, this chapter details how to manage branching.  This is one of those areas in version control that requires study to do well, and I think the author did an excellent job describing the important aspects of branching and merging.  I think some credit goes to Subversion as well for making this easier to understand than  its predecessor, CVS.&lt;/p&gt;
&lt;p&gt;Though Subversion doesn&apos;t specifically implement &quot;vendor branches&quot; like some other version control systems, this chapter&apos;s discussion and examples led me to finally understand how vendor branches really mean and how they are to be used.  Somehow, in my years of CVS usage, it had always remained an unexplained part of importing sources to the repository.&lt;/p&gt;
&lt;p&gt;Chapter 7 assured me and demonstrated that there are slick ways to integrated Subversion&apos;s command line interface with Bash command completion, Emacs, Ant, and Eclipse.  This is not my first concern right now, so I didn&apos;t really test any of the suggestions here.  Again, though, I&apos;ll know right where to look when I need it.&lt;/p&gt;
&lt;p&gt;Taking the subject matter another step beyond my interest, chapter 8 describes in gory detail (with example code and all) how to code your own clients against the Subversion API.  It demonstrates some real power in Subversion&apos;s design, and really refocuses on a much more serious Subversion user.  I doubt I&apos;ll ever make use of this section, but if I do, I&apos;m guessing the examples of the Perl bindings will be the first to be useful.  It seems to me that Perl will be the quickest way to do any advanced manipulation or reporting against a Subversion repository.&lt;/p&gt;
&lt;p&gt;The appendices provide the references.  Here&apos;s where you find the basic list of all the commands and all the options with just a little more explanation beyond what &lt;code&gt;svn help&lt;/code&gt; provides.  If you still think more in terms of CVS, Perforce, BitKeeper, or Visual SourceSafe, then you&apos;ll also welcome the tables mapping your familiar commands to the Subversion commands you&apos;re trying to learn with this book.&lt;/p&gt;
&lt;p&gt;For me, this book spoke to a very appropriate level most of the time.  It provides many starting points for various levels of users, above and below my current needs.  The book easily allows the reader to jump into using Subversion, administrating a repository, working effectively with a team, and eventually even coding interfaces to Subversion.  I had hoped to acquire the tips and tricks to make me truly proficient in Subversion, and this book delivered.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ipw2100 1.0.0
            </title>
            <link>
                https://www.hjsoft.com/blog/ipw2100_1.0.0.html
            </link>
            <pubDate>Wed, 17 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ipw2100_1.0.0.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://ipw2100.sf.net/&quot;&gt;Intel ProWireless 2100 drivers&lt;/a&gt; have hit a 1.0 release, so I thought I&apos;d cleanup the way I use them.&lt;/p&gt;
&lt;p&gt;Initial versions of the driver didn&apos;t handle suspend, so I unloaded and reloaded them all the time.  I also didn&apos;t want the radio powered all the time, so I blacklisted the module from hotplug as  well, so I could load it by hand and configure the interface from a script.&lt;/p&gt;
&lt;p&gt;I no longer need to reload the current version of the driver, so I&apos;m letting hotplug load it.  I still don&apos;t want the radio on by default, though, so I configured modprobe to load the ipw2100 module with the &lt;code&gt;disable=1&lt;/code&gt;.  I still use my scripts to bring the interface up and down in different environments, but the script uses the &lt;code&gt;sys&lt;/code&gt; interface to enable and disable the radio, which is much faster than loading and unloading the module.&lt;/p&gt;
&lt;pre&gt;#enable
echo 0 &gt; /sys/class/net/eth1/device/rf_kill
#disable
echo 1 &gt; /sys/class/net/eth1/device/rf_kill&lt;/pre&gt;
&lt;p&gt;Next I&apos;d like to figure out a way to maybe allow it to automatically switch the wireless on and off depending upon the presence of the wired link.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Killing Insurgents in Mosques
            </title>
            <link>
                https://www.hjsoft.com/blog/Killing_Insurgents_in_Mosques.html
            </link>
            <pubDate>Tue, 16 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Killing_Insurgents_in_Mosques.html
            </guid>
            <description>
                &lt;p&gt;The latest news is that an &lt;a href = &quot;http://www.npr.org/templates/story/story.php?storyId=4172129&quot;&gt;NBC embedded reporter has video footage&lt;/a&gt; of a US Marine shooting a possibly wounded and possibly unarmed insurgent in a mosque.  Insurgency is officially a high-risk pass-time.  These marines have to worry about booby-trapped corpses and suicide bombers.  It&apos;s not far fetched that a guy playing dead and suddenly starts wiggling around could be trying to blow you up.&lt;/p&gt;

&lt;p&gt;In another little sound bite, a civilian is quoted saying something about a mosque being a sacred place.  As I see it, our troops have had great respect for the mosques in not destroying them when insurgents attack from within them.  The soldiers noted in today&apos;s news were investigating gun fire coming from the mosque.  If the Iraqi people want any more respect paid to their mosques, then defend them yourselves from the insurgents who make them their base of operation.  Gross manipulations of circumstances like this really anger me.  If you&apos;re going to manipulate the situation to benefit your cause, please try to be less transparent about it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sendmail: Virtusertable and MX
            </title>
            <link>
                https://www.hjsoft.com/blog/Sendmail_Virtusertable_and_MX.html
            </link>
            <pubDate>Wed, 10 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Sendmail_Virtusertable_and_MX.html
            </guid>
            <description>
                &lt;p&gt;I witnessed an interesting behavior today in sendmail.  I have an entire email domain mapped to a single user in &lt;code&gt;/etc/mail/virtusertable&lt;/code&gt;: &lt;code&gt;@domain.com domainuser&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When the &lt;code&gt;MX&lt;/code&gt; record pointing that domain to my host went away, leaving only a &lt;code&gt;CNAME&lt;/code&gt; record aliasing domain.com to the name of my host, sendmail stopped recognizing the entry in &lt;code&gt;virtusertable&lt;/code&gt; completely.  
Sendmail was checking against my local user database directly, instead of &lt;code&gt;virtusertable&lt;/code&gt;.
Maybe an &lt;code&gt;A&lt;/code&gt; record would have made sendmail recognize it, and it was just the &lt;code&gt;CNAME&lt;/code&gt; breaking it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sudo Will Rot Your Brain
            </title>
            <link>
                https://www.hjsoft.com/blog/Sudo_Will_Rot_Your_Brain.html
            </link>
            <pubDate>Tue, 9 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Sudo_Will_Rot_Your_Brain.html
            </guid>
            <description>
                &lt;p&gt;Over the past couple months, I&apos;ve been diligently changing root passwords and others, and shortly after I do, I end up changing them again, because I can&apos;t remember them at all.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;code&gt;sudo(8)&lt;/code&gt; I can barely remember any of my root passwords.  I don&apos;t need it when I have &lt;code&gt;sudo&lt;/code&gt;.   It keeps me from lingering logged in as root, but it seems like a dangerous trend to not remember any of the passwords.  I know when confronted with an &lt;code&gt;fsck&lt;/code&gt; or something that says &quot;login in single-user mode&quot;, I&apos;m going to be in trouble.&lt;/p&gt;
&lt;p&gt;Using openssh keys to login without passwords is sure to rot the user passwords right out of my brain as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Minority 2004
            </title>
            <link>
                https://www.hjsoft.com/blog/Minority_2004.html
            </link>
            <pubDate>Fri, 5 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Minority_2004.html
            </guid>
            <description>
                &lt;p&gt;It&apos;s hard to believe, but I am in the minority.  The majority of our nation demonstrated that they&apos;ll forgive the lies, uphold limits on science, permit the ravage of nature, and continue to oppress homosexuals.  We&apos;ll continue to make enemies in the world quicker than we can invade their host countries (and then get distracted by a more profitable invasion).&lt;/p&gt;
&lt;p&gt;We&apos;re all crazy, because we just don&apos;t get how this could have happened.  In the end, I&apos;m left with the conclusion that this can&apos;t really be important, and life will just go on as it has.  We&apos;ll keep a watchful eye on our Orwellian government, cry &quot;Conspiracy!&quot; every once in a while, but it&apos;ll never directly affect me.  That&apos;s all we can hope, right?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New VPS
            </title>
            <link>
                https://www.hjsoft.com/blog/New_VPS.html
            </link>
            <pubDate>Mon, 1 Nov 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_VPS.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve finally purchased a VPS plan from &lt;a href = &quot;http://www.easyco.com/&quot;&gt;EasyCo&lt;/a&gt;.  I have it all updated to Debian Unstable, and it seems to be working fine.  I have 256M memory and 4G of disk.  Oddly, they split the 256M across 128M RAM and 128M swap on a tmpfs, so it&apos;s still in memory.  I&apos;m not sure what he point of that is, except maybe it allows them to swap out some of my stuff while under heavy load.  I&apos;m not sure.  They say they don&apos;t overcommit the machines.&lt;/p&gt;
&lt;p&gt;I&apos;ve moved my mail relays and DNS.  I&apos;m just waiting for &lt;a href = &quot;http://www.dotster.com/&quot;&gt;Dotster&lt;/a&gt; to move my nameserver records to the new IP.  &lt;a href = &quot;http://x.hjsoft.com/&quot;&gt;Lynn&lt;/a&gt; should be relieved of the responsibilities this evening I&apos;m hoping.  He&apos;s been running stuff for me for the past couple years after I lost my static DSL.&lt;/p&gt;
&lt;p&gt;I have JBoss 4.0.0 running on the VPS, but it wouldn&apos;t run under J2SDK 5.0.  I could get a &quot;minimal&quot; server running, but &quot;default&quot; would never complete its startup.  It just sends a java thread spinning off at 99% CPU while trying to start the embedded Tomcat 5.0 instance (I think).  JBoss 3.2.6 acted similarly, so I had to drop back to J2SDK 1.4.2_06.  Not being able to use J2SDK 5.0 will be a huge disappointment.  It must be a problem interacting with the user-mode Linux, since I&apos;ve seen it work fine on my other native Intel machines.  I&apos;m not even sure where to begin on trying to debug and report it as a bug.&lt;/p&gt;
&lt;p&gt;In my own local testing, JBoss 4.0.0 and J2SDK 5.0 locked the 2.4.26-3um kernel.  EasyCo&apos;s 2.4.26-2um doesn&apos;t lock, but it&apos;s obviously not completely working.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Zach Braff&apos;s Garden State
            </title>
            <link>
                https://www.hjsoft.com/blog/Zach_Braff_Garden_State.html
            </link>
            <pubDate>Fri, 29 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Zach_Braff_Garden_State.html
            </guid>
            <description>
                &lt;p&gt;I find the most interesting things clicking through Google referers here.  It seems that Zach Braff, star of Scrubs, has written, directed, and stars in a movie called &lt;a href = &quot;http://gardenstate.typepad.com/&quot;&gt;Garden State&lt;/a&gt;.  I&apos;m interested in seeing what this movie is.  The story looks like it could be interesting.  The music, teaser trailer, and story description make it look like one of those artsy movies I love so much.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                I Wanna Play Some Games
            </title>
            <link>
                https://www.hjsoft.com/blog/I_Wanna_Play_Some_Games.html
            </link>
            <pubDate>Thu, 28 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/I_Wanna_Play_Some_Games.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m occassionally intrigued by a game, but &lt;a href = &quot;http://beust.com/weblog/archives/000201.html&quot;&gt;Cedric describes a couple games&lt;/a&gt; that I&apos;d really like to see, including Myst 4.  I didn&apos;t even know they were still producing Myst games.&lt;/p&gt;
&lt;p&gt;I guess I should get a Windows box to play some games, but it seems like such a waste to actually buy real hardware for it.  If I&apos;m going to spend real money on a machine, it should be a real Linux box. :)&lt;/p&gt;
&lt;p&gt;I guess I could look at &lt;a href = &quot;http://www.transgaming.com/&quot;&gt;TransGaming&lt;/a&gt; to get these games running on my formidable Linux laptop, but even that may not be enough of a machine (only 32MB VRAM).  Maybe I should just arrange a play date with some Windows friends with big computers.&lt;/p&gt;
&lt;p&gt;Hey Todd!  When&apos;s the next LAN party?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Vote Smart
            </title>
            <link>
                https://www.hjsoft.com/blog/Vote_Smart.html
            </link>
            <pubDate>Tue, 26 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Vote_Smart.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been meaning to figure out who&apos;ll be on the ballot in my area and to research their policies a bit before I get to the polls on next Tuesday.  &lt;a href = &quot;http://www.vote-smart.org/&quot;&gt;Project Vote Smart&lt;/a&gt; shows me just what I need to know.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Marinescu&apos;s EJB Design Patterns
            </title>
            <link>
                https://www.hjsoft.com/blog/Marinescu_EJB_Design_Patterns.html
            </link>
            <pubDate>Fri, 22 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Marinescu_EJB_Design_Patterns.html
            </guid>
            <description>
                &lt;p&gt;A coworker lent me a paper copy of &lt;a href = &quot;http://www.theserverside.com/books/wiley/EJBDesignPatterns/index.tss&quot;&gt;Floyd Marinescu&apos;s EJB Design Patterns&lt;/a&gt;, and I just finished reading it.  It had some nice tidbits and explanations, so I may have been convinced now to do some things differently.&lt;/p&gt;
&lt;p&gt;I&apos;ll probably start doing most of my finders and even read-only views of data in DAO instead of hitting the entity beans, and I&apos;ll reserve the entities for updates. The automatic caching, pooling, and other neat features of entity beans just don&apos;t justify the pain of rigid finders and heavy transactions if I&apos;m just reading the data.&lt;/p&gt;
&lt;p&gt;I may also opt to try using DTOFactories and custom DTOs in place of the XDoclet-generated value objects.  XDoclet value objects can quickly get messy when trying to have it load data from related entity beans (endless recursion), and it&apos;s more efficient to tailor DTOs to the data needed on-screen than to return large domain objects.  It seems to make good sense to keep the DTO code out of the entity bean as well.  I need to let the session facade do the work of populating a new entity instance instead of ejbCreate() doing it.  That&apos;s just not very flexible, and requires the web tier to do too much work setting up DTOs to pass back to the session facade.&lt;/p&gt;
&lt;p&gt;The HashMap-backed DTO seems like an interesting idea as well, but feels just a little too loose to me.  We&apos;ll see if I&apos;m drawn down that path or not.&lt;/p&gt;
&lt;p&gt;Before I get to any of these interesting refactorings, I must finish up my code to allow full editing of links. I&apos;ve not been devoting any time to it, and it&apos;s been coming along painfully slowly.  I often forget exactly what I was doing, since I have all these other ideas floating around too.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Buy Kim&apos;s Camaro
            </title>
            <link>
                https://www.hjsoft.com/blog/Buy_Kims_Camaro.html
            </link>
            <pubDate>Wed, 20 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Buy_Kims_Camaro.html
            </guid>
            <description>
                &lt;p&gt;I thought I&apos;d help Kim out by dropping a link.  She&apos;s selling her &lt;a href = &quot;http://www.kimquigley.com/Camaro/&quot;&gt;shiny, red Camaro&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Testing Kernels: 2.6.9 Series
            </title>
            <link>
                https://www.hjsoft.com/blog/Testing_Kernels_2.6.9_Series.html
            </link>
            <pubDate>Fri, 15 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Testing_Kernels_2.6.9_Series.html
            </guid>
            <description>
                &lt;p&gt;I must have gotten bored or something with the recent slow Linux kernel development.  I patched kernel source up to 2.6.9-rc4-mm1 and gave it a shot.  I wanted the ACPI and USB suspend of rc4 and the ibm-acpi of mm1.  Well, mm1 broke Java (but I got a patch for that) and it broke swsusp, so it just wouldn&apos;t work out.  rc4 seems to have everything working so far.  I still need to try to load the ipw2100 drivers into this kernel yet.&lt;/p&gt;

&lt;p&gt;The cleaned up and working ACPI S3 suspend will be nice to have.  I&apos;ll have to figure out when I&apos;ll use that instead of swsusp.  S3 is very fast, but if I let it sit for too long asleep, it could still drain its battery.  Maybe I&apos;ll be able to setup an ACPI wakeup timer to have it awake and then swsusp itself after a long period of S3.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                My Own Struts Best Practice
            </title>
            <link>
                https://www.hjsoft.com/blog/My_Own_Struts_Best_Practice.html
            </link>
            <pubDate>Thu, 14 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/My_Own_Struts_Best_Practice.html
            </guid>
            <description>
                &lt;p&gt;In response to all the &lt;strong&gt;Struts Action Chaining&lt;/strong&gt; searches I see, I&apos;d like to relate my experience, and the advice I found when struggling with chaining.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep your Struts actions very thin and lightweight.&lt;/strong&gt;  Don&apos;t code your business logic into Struts actions, then try to reuse them through chaining.  Inheritance may not be such a hot idea either, though I do this for centralizing some web-tier session work like security checks.  Otherwise, do yourself a favor and code your own plain objects and APIs to do your business.  You are free to introduce as much architecture there as you like, including chaining.  Don&apos;t fear creating your own object hierarchy.  Just because you&apos;re coding within a framework doesn&apos;t mean every class you create must extend a class or implement an interface from that framework.&lt;/p&gt;
&lt;p&gt;I was caught in that trap for a long time with EJB and servlet programming.  Realize that you&apos;re still writing your own program, just with a framework for the web front-end.  This will allow you more freedom to migrate frameworks too.&lt;/p&gt;
&lt;p&gt;(I know the latest Struts has introduced Struts-Chain based on commons-chain, but I&apos;ve not looked at it yet.  This is probably an appropriate approach, but I doubt the commons-chain API requires &lt;code&gt;javax.servlet.*&lt;/code&gt; or other web APIs, so it&apos;ll still exist as separate and decoupled code.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Answering Searches
            </title>
            <link>
                https://www.hjsoft.com/blog/Answering_Searches.html
            </link>
            <pubDate>Tue, 12 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Answering_Searches.html
            </guid>
            <description>
                &lt;p&gt;Every day I see search referers for questions to which I know the answer.  Sometimes an article of mine will be a perfect match, and I feel like I&apos;ve done someone a service, but often a search seems to have matched across multiple articles or partially on my link list or whatever.  I&apos;ve not specifically written about the combinations (interactions?) of topics the searcher wants, but I still know the answers.&lt;/p&gt;
&lt;p&gt;I may start picking hot search topics from my referer list and post answers just to those searches.  Unfortunately, I&apos;ll not be able to contact the original searcher, but maybe it&apos;ll help the next person.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Project (or fdisk said, &quot;Oops&quot;)
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Project_Fdisk_Oops.html
            </link>
            <pubDate>Mon, 11 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Project_Fdisk_Oops.html
            </guid>
            <description>
                &lt;p&gt;With Monday off, I figured I&apos;d catch up on computer work -- photo, video editing, some code, etc.  Just 2 hours ago, I added to my list rebuilding Claire&apos;s laptop from the ground up.&lt;/p&gt;
&lt;p&gt;I was trying to get Windows to see the free spots on the hard drive, but it was having trouble, so I successfully moved the entire Linux filesystem to hda7, booted it, all that.  Then I went removing and recreating partitions.  It seems I can&apos;t just remove  hda7 and recreate hda3 in the exact same location and expect to actually be able to still use it with its new name.  That&apos;s a disappointment, so now I&apos;m installing Debian again via Knoppix 3.3.  I&apos;m getting to be a real pro at this.&lt;/p&gt;
&lt;p&gt;I have it all put back together now for the most part.  Since Claire only uses the machine as a x-terminal to run a remote session on butterfly, I haven&apos;t really needed to restore any of the old files on it.&lt;/p&gt;
&lt;p&gt;I installed Windows XP on it, which rendered Linux unbootable as usual.  I booted the Knoppix CD, mounted the on-disk FS, chrooted a shell into that filesystem, but lilo kept telling me permission denied.  It turns out the Knoppix LiveCD mounts other filesystems with &lt;i&gt;nosuid&lt;/i&gt;, and &lt;i&gt;nodev&lt;/i&gt;, so I remounted it with &lt;i&gt;suid&lt;/i&gt; and &lt;i&gt;dev&lt;/i&gt;, and lilo worked again, and I could restore the boot record properly.  Along the way, I also started using Knoppix 3.6 for this restoration.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Next Blog Feature Todo List
            </title>
            <link>
                https://www.hjsoft.com/blog/Next_Blog_Feature_Todo_List.html
            </link>
            <pubDate>Wed, 6 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Next_Blog_Feature_Todo_List.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve implemented many of the neat little features that I wanted, and I&apos;ve forgotten some (like a calendar).  My links are dynamically data driven now (kept in entity beans) with a nice little administration screen.  I have one final touch to add to allow myself to edit existing links (not just add or delete).&lt;/p&gt;
&lt;p&gt;Here&apos;s my new list I&apos;d like to get into next:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;XML parse/validate for articles and comments.  This will help me ensure XHTML compliance when I finally get my base code compliant.&lt;/li&gt;
&lt;li&gt;Spell checking.  I&apos;ve heard of a Java package called &lt;a href = &quot;http://jazzy.sf.net/&quot;&gt;Jazzy&lt;/a&gt;, but I think it may be GUI-based.  The worst case is setting up a servlet or session bean that executes ispell&lt;/li&gt;
&lt;li&gt;A nice little Javascript trick to generate my Permalink name from the article Subject, so I don&apos;t have to do it myself, but I still get an opportunity to change it if I want.&lt;/li&gt;
&lt;li&gt;A link to automatically validate a new article on the site with w3c&apos;s validator.&lt;/li&gt;
&lt;li&gt;More versatile theming.&lt;/li&gt;
&lt;li&gt;Decent plugin architecture more on par with Blojsom.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I&apos;m guessing that I could make this thing pretty useful if I grow it into the CMS space.  &lt;a href = &quot;http://blojsom.sf.net/&quot;&gt;Blojsom&lt;/a&gt; and  &lt;a href = &quot;http://www.rollerweblogger.org/&quot;&gt;Roller&lt;/a&gt; have the java blog space pretty locked up in my opinion.  I&apos;m not sure what I could do beyond what they already do, and if I really want an EJB backend, I could probably just code a nice fetcher backend to Blojsom and then code plugins for the rare feature I have here that Blojsom may not.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Rave Movie in Lancaster?
            </title>
            <link>
                https://www.hjsoft.com/blog/Rave_Movie_in_Lancaster.html
            </link>
            <pubDate>Tue, 5 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Rave_Movie_in_Lancaster.html
            </guid>
            <description>
                &lt;p&gt;Todd sent me a link about Jay Ingram, host of he &lt;a href = &quot;http://www.exn.ca/dailyplanet/&quot;&gt;Daily Planet on Discovery Channel Canada&lt;/a&gt;, making a &lt;a href = &quot;http://www.thewgalchannel.com/entertainment/3783075/detail.html&quot;&gt;rave movie&lt;/a&gt; or something in Lancaster.  I hope Mr. Ingram&apos;s intentions are honorable, though I can&apos;t really tell.  Will it be a sensational &quot;expose&quot; into the dark side of the rave culture (which also exists at other music events) or something a bit less damning?&lt;/p&gt;
&lt;p&gt;I must wonder what he could possibly find in Lancaster.  It&apos;s not exactly a happening scene anymore, especially with the Smithgall Gestapo raiding clubs in past years.&lt;/p&gt;
&lt;p&gt;There &lt;i&gt;are&lt;/i&gt; some long-time supporters around here.  I get out on rare occassions, but I often see some of the same people I&apos;ve always seen over the years.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java 2 SDK 5.0 on the Server
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_2_SDK_5.0_on_the_Server.html
            </link>
            <pubDate>Fri, 1 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_2_SDK_5.0_on_the_Server.html
            </guid>
            <description>
                &lt;p&gt;It&apos;s been a fun couple weeks with lots of major software releases, and I&apos;ve quickly tested them all through my dev notebook and then to the server.  These releases include first Struts 1.2.4, then JBoss 4.0.0, and now Java 2 SDK 5.0.&lt;/p&gt;
&lt;p&gt;I&apos;ve upgraded to Struts 1.2.4 from 1.1 for my weblog code, but really didn&apos;t change any code to take advantage of new features.  The same goes for JBoss (3.2.5 to 4.0.0) and even Java 5.  They&apos;ve all been nicely backward compatible, and have afforded me a clean base from which to start learning the enhancements.&lt;/p&gt;
&lt;p&gt;My biggest hurdle has been trying to figure out what to call the new Java.  The installer dropped it in as &lt;i&gt;jdk1.5.0&lt;/i&gt;.  &lt;code&gt;java -version&lt;/code&gt; says &lt;i&gt;Java 2 ... build 1.5.0&lt;/i&gt;.  I thought with these major additions to the language that &lt;i&gt;Java 2&lt;/i&gt; was becoming &lt;i&gt;Java 5&lt;/i&gt;, but that doesn&apos;t seem to quite be it either.  I think it&apos;s going to cause confusion among those who don&apos;t expect it.&lt;/p&gt;
&lt;p&gt;Maybe I should ignore the marketspeak and just follow the number that the binary shows.  The code is the authority, right?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                A 2-VCR Week
            </title>
            <link>
                https://www.hjsoft.com/blog/A_2_VCR_Week.html
            </link>
            <pubDate>Fri, 1 Oct 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/A_2_VCR_Week.html
            </guid>
            <description>
                &lt;p&gt;PBS will air NOVA&apos;s &lt;a href = &quot;http://www.pbs.org/wgbh/nova/origins/&quot;&gt;Origins&lt;/a&gt; beginning tonight and concluding tomorrow.  Presidential debates begin tomorrow night as well.  I&apos;ll not be home to see any of the overlapping programs.&lt;/p&gt;
&lt;p&gt;The occassional TV dilemma may inspire me to actually look into digital video stuff.  In particular, our most common problem is going out and  forgetting to tape the few shows we actually watch.  It seems to me that this application could be solved with a TV tuner card, the usual command-line video capture tools, and a nice little WAP interface.  Then when I remember that I wanted to tape something, I just point my phone at the WAP interface over the internet, set the channel, and start recording.  I can playback with a wireless notebook temporarily plugged into the TV.  I could eventually develop a real solution.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JBoss 4.0 Deployed
            </title>
            <link>
                https://www.hjsoft.com/blog/JBoss_4.0_Deployed.html
            </link>
            <pubDate>Wed, 29 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JBoss_4.0_Deployed.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve successfully deployed JBoss 4.0 on my laptop and on the server.  It was actually much easier than I had expected.  It seems that some of the pain I experienced in the middle of the 3.2.x series was bringing me up to speed for 4.0, so it really didn&apos;t look that different.  I&apos;ve also noticed a tendency toward more sane default configs, so I didn&apos;t have to mess with as much of it, such as the Tomcat classloader.&lt;/p&gt;
&lt;p&gt;I have my CMP entities, my session facade bean, a message bean, and my struts 1.2.4 webtier deployed.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Badnarik Lies Too!
            </title>
            <link>
                https://www.hjsoft.com/blog/Badnarik_Lies_Too.html
            </link>
            <pubDate>Wed, 29 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Badnarik_Lies_Too.html
            </guid>
            <description>
                &lt;p&gt;Dinger&apos;s candidate of choice, &lt;a href = &quot;http://www.badnarik.org/supporters/blog/&quot;&gt;Michael Badnarik&lt;/a&gt; turns out to be a master of deception like the rest of his opponents.&lt;/p&gt;
&lt;p&gt;At the bottom of his weblog, there&apos;s a W3C tag falsely purporting XHTML 1.0 compliance, but &lt;a href = &quot;http://validator.w3.org/check?uri=http%3A%2F%2Fwww.badnarik.org%2Fsupporters%2Fblog%2F&quot;&gt;W3C&apos;s own validator&lt;/a&gt; (linked by that stolen tag) tells the real story.  Politics is all about lies.&lt;/p&gt;
&lt;p&gt;I know lying about mere markup languages seems trivial, but it represents a pattern.  If elected president, these half truths will grow into more elaborate schemes and we&apos;ll end up invading Canada for spying on us all these years.  That&apos;s right, before we know it, Celine Dion and Sarah McLachlan will be dubbed covert Canadian terrorist operatives!  Stop Badnarik before it&apos;s too late!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bush&apos;s Campaign Manager
            </title>
            <link>
                https://www.hjsoft.com/blog/Bush_Campaign_Manager.html
            </link>
            <pubDate>Tue, 28 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bush_Campaign_Manager.html
            </guid>
            <description>
                &lt;p&gt;Steve Inskeep of &lt;a href = &quot;http://www.npr.org/&quot;&gt;NPR&lt;/a&gt;&apos;s &lt;a href = &quot;http://www.npr.org/rundowns/rundown.php?prgDate=24-Sep-2004&amp;amp;prgId=3&quot;&gt;Morning Edition&lt;/a&gt; is interviewing campaign managers for Bush and Kerry.  Today they aired his interview of Bush&apos;s campaign manager, Ken Mehlman.  As Ken spewed the same rhetoric he&apos;s fed Bush for speeches (Kerry&apos;s flip-flopping, etc.), Steve completely blasted him with rebuttals of Bush doing similar things (proposing the war at $50 billion, then spending $200 billion).&lt;/p&gt;
&lt;p&gt;Steve&apos;s attacks included quoting some of Kerry&apos;s statements, then quoting the Bush administration&apos;s twisted manipulation of those statements, then proving his point asking, &quot;Do you really think John Kerry is a Saddam supporter?&quot;&lt;/p&gt;
&lt;p&gt;Ken&apos;s statements sounded very familiar with what we hear the Bush people saying all the time, but Steve&apos;s pointed attacks almost made me uncomfortable for the poor guy.  He didn&apos;t seem to be wearing his &quot;objective reporter&quot; hat at all.  I don&apos;t think I approve of his conduct, but we&apos;ll see how the interview goes Monday with Kerry&apos;s campaign manager.  Maybe he&apos;ll be just as direct and critical.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (28 September 2004):&lt;/strong&gt; Steve&apos;s &lt;a href = &quot;http://www.npr.org/rundowns/segment.php?wfId=4048545&quot;&gt;interview with Mary Beth Cahill&lt;/a&gt; was noticeably more amicable, though she also made more sense than Mehlman.  I have a tendency to let the difference in interview technique slide, though, since I agreed more with Cahill and understand not being able to find something on which to rip her apart.  Steve and Mary were definitely of like mind and their more conversational demeanor demonstrated that.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Blog Code in Subversion
            </title>
            <link>
                https://www.hjsoft.com/blog/Blog_Code_in_Subversion.html
            </link>
            <pubDate>Tue, 28 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Blog_Code_in_Subversion.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been tracking my blog code in subversion for over a month now, and it&apos;s gone pretty smoothly.  I can do pretty much anything I need.  I tag releases by copying them to the blog/tags folder.  I copied the trunk to a branch to develop the new data-driven link system and merged code back and forth several times.  Merging seems to work like magic compared to CVS.  I think I&apos;m really able to think in SVN now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Improve the Patriot Act?
            </title>
            <link>
                https://www.hjsoft.com/blog/Improve_the_Patriot_Act.html
            </link>
            <pubDate>Mon, 27 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Improve_the_Patriot_Act.html
            </guid>
            <description>
                &lt;p&gt;Dinger has driven me nuts with his weblog on a number of occassions now. &lt;strong&gt;Implement comments in your software already!  Aarrgh!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Anyway, &lt;a href = &quot;http://www.champagneblonde.us/article.php?id=60&quot;&gt;Dinger questions&lt;/a&gt; Kerry&apos;s &lt;a href = &quot;http://www.johnkerry.com/pdf/pr_2004_0525b_a.pdf&quot;&gt;improvements&lt;/a&gt; to the Patriot Act.  If Dinger had read past the headline, he&apos;d see on page 2 of that document, one of the improvements really is an improvement -- bring judges back into the process of approving surveillance to be more like traditional warrants.  The bill&apos;s biggest problems have been unbalanced power and lack of controls.  Judges represent that control.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                T616 Camera is Reasonable
            </title>
            <link>
                https://www.hjsoft.com/blog/T616_Camera_Reasonable.html
            </link>
            <pubDate>Fri, 24 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/T616_Camera_Reasonable.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been snapping pictures with my T616 camera phone, and I&apos;ve finally put up a little &lt;a href = &quot;http://www.hjsoft.com/gallery/Camera_Phone/&quot;&gt;gallery&lt;/a&gt; with the pictures.  They look pretty decent.  Now I need to either figure out a way to submit photos directly to the gallery via email, or write my own moblog functionality for my Java blog.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Lazy Disk Partitioning
            </title>
            <link>
                https://www.hjsoft.com/blog/Lazy_Disk_Partitioning.html
            </link>
            <pubDate>Fri, 24 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Lazy_Disk_Partitioning.html
            </guid>
            <description>
                &lt;p&gt;For years, I&apos;ve religiously partitioned the hell out of my drives when installing Linux on a new machine.  It took a while to figure out the proper sizes for my usage, but I&apos;ve gotten pretty good at it.  With my new R40, I got lazy and did only 3 filesystems -- &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;/boot&lt;/code&gt;, &lt;code&gt;/home&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As I&apos;ve discovered, I was well-served to partition my previous machines&apos; filesystems further.  The problem is that if you do get filesystem errors (which I have twice now, due to crashes or whatever), you&apos;re much better off if you can keep the effects isolated.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/var&lt;/code&gt; is a very dynamic part of your filesystem.  Lots of logs, caches, and temp data are being constantly written there.  When you experience a crash, if anything&apos;s going to go wrong, &lt;code&gt;/var&lt;/code&gt; is a likely place for it to happen.  In my laziness, I left &lt;code&gt;/var&lt;/code&gt; as part of &lt;code&gt;/&lt;/code&gt;.  This means that filesystem errors caused by partial data in a &lt;code&gt;/var&lt;/code&gt; file can (and did) also affect other more vital parts of the system.  Not only did I end up having to reconstruct my &lt;code&gt;/var/lib&lt;/code&gt; directory from remnants left in &lt;code&gt;/lost+found&lt;/code&gt;, but chunks of my &lt;code&gt;/etc&lt;/code&gt; turned up lost as well.  I fortunately have backups, so I didn&apos;t even really bother trying to reconstruct &lt;code&gt;/etc&lt;/code&gt; too much.&lt;/p&gt;
&lt;p&gt;Sanity prevails now, and &lt;code&gt;/var&lt;/code&gt; lives on the idle partition I had left free for Windows XP.  A nice reiserfs seems like a better use for that partition anyway.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Morning Coffee Moment
            </title>
            <link>
                https://www.hjsoft.com/blog/Morning_Coffee_Moment.html
            </link>
            <pubDate>Wed, 22 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Morning_Coffee_Moment.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m at work earlier this week than usual, so I ended up needing to make the coffee.  I caught myself opening the individual little coffee packet and proceeding to dump it into the garbage can instead of the filter.  It&apos;s too early.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Harrisburg in Odd Places
            </title>
            <link>
                https://www.hjsoft.com/blog/Harrisburg_in_Odd_Places.html
            </link>
            <pubDate>Wed, 22 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Harrisburg_in_Odd_Places.html
            </guid>
            <description>
                &lt;p&gt;I was flipping through comics and &lt;a href = &quot;http://www.little-gamers.com/index.php?strip_id=933&quot;&gt;this Little Gamers one&lt;/a&gt; caught my eye.  Well, not the comic, but Naku&apos;s little news post.  You don&apos;t often go flipping through Swedish comics and find a picture of your local news station&apos;s weather coverage.  Weird.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Fun with Bluetooth and Linux
            </title>
            <link>
                https://www.hjsoft.com/blog/Fun_Bluetooth_Linux.html
            </link>
            <pubDate>Tue, 21 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Fun_Bluetooth_Linux.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been playing a bit to get my T616 to do slick bluetooth tricks with my notebook.  Besides the normal GPRS/Bluetooth dialup, I can use the phone to remote control the computer and as a proximity sensor.&lt;/p&gt;
&lt;p&gt;My first trick was the proximity sensor -- the computer knew when I walked away and when I returned, so it could activate and deactivate the screensaver accordingly. Here&apos;s my little toy script to do that:&lt;/p&gt;
&lt;pre&gt;#!/bin/sh

STATE=x

while true; do
    if hcitool scan | grep &quot;xx:xx:xx:xx:xx:xx&quot; &amp;amp;&amp;gt; /dev/null; then
        if [ &quot;$STATE&quot; != &quot;present&quot; ]; then
            STATE=present
            echo $STATE
            xscreensaver-command -deactivate
        fi
    else
        if [ &quot;$STATE&quot; != &quot;absent&quot; ]; then
            STATE=absent
            echo $STATE
            xscreensaver-command -activate
        fi
    fi

    sleep 20
done&lt;/pre&gt;
&lt;p&gt;I grep the output of hcitool&apos;s scan for my BD and have it act on state changes, present or absent.&lt;/p&gt;
&lt;p&gt;I finally figured out that I can push files to the phone with &lt;a href = &quot;http://triq.net/obexftp&quot;&gt;obexftp&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;obexftp -b xx:xx:xx:xx:xx:xx -p picture.jpg&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;obexftp -l&lt;/code&gt; can be convinced to list the folders on the phone, but the &lt;code&gt;-g&lt;/code&gt; get option just won&apos;t work.  Luckily, I can start up the &lt;code&gt;obexserver&lt;/code&gt; to accept file transfers initiated by the phone (see its man page for the additional &lt;code&gt;sbptool&lt;/code&gt; command which is required).  That&apos;s enough to allow me to transfer files without necessarily emailing them to myself.  It was disappointing to see that I could not transfer the Java games off the phone.  I&apos;d like to archive the games off the phone and make room for other data.&lt;/p&gt;
&lt;p&gt;The final trick is the bluetooth remote control.  I had looked at a couple tools, but &lt;a href = &quot;http://www.geocities.com/saravkrish/progs/bluemote/index.html&quot;&gt;bluemote&lt;/a&gt; is the most featureful.  It uses &lt;code&gt;AT&lt;/code&gt; commands to push menus and a user interface to the phone screen.  The part that took me the longest to figure out is where these menus actually show up!  It creates itself as an accessory under &lt;strong&gt;Connect-&gt;Accessories&lt;/strong&gt; on the phone.  Once you find it there, it&apos;ll run whatever actions you&apos;ve configured (like &lt;code&gt;rhythmbox --next&lt;/code&gt;), control the PCM volume or even control the mouse pointer.  It&apos;s quite impressive.&lt;/p&gt;
&lt;p&gt;Next I need to figure out how to implement a moblog for my phone pictures.  I don&apos;t expect that to take long.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JBoss 4.0 Released
            </title>
            <link>
                https://www.hjsoft.com/blog/JBoss_4.0_Released.html
            </link>
            <pubDate>Tue, 21 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JBoss_4.0_Released.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.jboss.org/&quot;&gt;JBoss&lt;/a&gt; released &lt;a href = &quot;http://sourceforge.net/docman/display_doc.php?docid=24779&amp;amp;group_id=22866&quot;&gt;version 4.0.0&lt;/a&gt; of their server yesterday.  I&apos;ve been using the JBoss from the 2.x days with good results.  I look forward to trying out 4.0.0.  I&apos;m not sure when I&apos;ll get around to it though.  Upgrades haven&apos;t been painful, but they&apos;ve been time consuming.  I expect a major release like this to be considerably more work.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                SonyEricsson T616
            </title>
            <link>
                https://www.hjsoft.com/blog/SonyEricsson_T616.html
            </link>
            <pubDate>Mon, 20 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/SonyEricsson_T616.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve &lt;a href = &quot;http://www.hjsoft.com/blog/link/A_New_Phone_Lust_T616&quot;&gt;wanted a T616&lt;/a&gt; for a while, and I finally went out and got one.  The reception is much better in my house than my T68i or Siemens S46, since it has the newer bands that AT&amp;amp;T has been deploying.&lt;/p&gt;
&lt;p&gt;Now I&apos;ll have to find time to learn J2ME, but in the meantime &lt;a href = &quot;http://myt610.lasyk.net/&quot;&gt;MyT610&lt;/a&gt; will keep me busy customizing my phone.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                RoboSapien
            </title>
            <link>
                https://www.hjsoft.com/blog/RoboSapien.html
            </link>
            <pubDate>Mon, 20 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/RoboSapien.html
            </guid>
            <description>
                &lt;p&gt;I stumbled upon an article on Slashdot about &lt;a href = &quot;http://slashdot.org/article.pl?sid=04/09/19/0155219&amp;amp;tid=216&amp;amp;tid=222&amp;amp;tid=1&quot;&gt;hacking the RoboSapien toy robot&lt;/a&gt;.  I saw these things at the local BJ&apos;s Wholesale Club.  I smell a Christmas list brewing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JW: Struts Best Practices
            </title>
            <link>
                https://www.hjsoft.com/blog/JW_Struts_Best_Practices.html
            </link>
            <pubDate>Fri, 17 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JW_Struts_Best_Practices.html
            </guid>
            <description>
                &lt;p&gt;JavaWorld has an &lt;a href = &quot;http://www.javaworld.com/javaworld/jw-09-2004/jw-0913-struts.html&quot;&gt;Struts Best Practices&lt;/a&gt; article which I&apos;d just like to note here, so I can get back to it when I have a moment.&lt;/p&gt;
&lt;p&gt;I still struggle with Struts on occassion, and there are certain tasks I avoid, because I don&apos;t know how to do it in Struts.  I have occassional break-throughs, though, like when I figured out that I should just implement my own CoR framework instead of trying to cram it into a chain of Struts actions.
I look forward to a re-release of Struts 1.2.x, so maybe I can try Struts-Chain instead and maybe absorb more of the framework&apos;s concepts.  I still have yet to even play with the validator.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Not Studying AOP
            </title>
            <link>
                https://www.hjsoft.com/blog/Not_Studying_AOP.html
            </link>
            <pubDate>Thu, 16 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Not_Studying_AOP.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve dug up a few AOP links, and I&apos;ve read about it repeatedly in weblogs, but I&apos;ve just not found the motivation to really learn it.  I&apos;ve had no need for it, and it seems that &lt;a href = &quot;http://beust.com/weblog/archives/000180.html&quot;&gt;the rest of the world hasn&apos;t needed it much either.&lt;/a&gt;  I have plenty of time to absorb it when I finally recognize its use beyond what I can do with simple proxies.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ishkur&apos;s Guide to Electronic Music
            </title>
            <link>
                https://www.hjsoft.com/blog/Ishkurs_Guide_to_Electronic_Music.html
            </link>
            <pubDate>Thu, 16 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ishkurs_Guide_to_Electronic_Music.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.ishkur.com/&quot;&gt;Ishkur&lt;/a&gt; has long maintained an excellent (and entertaining) &lt;a href = &quot;http://www.di.fm/edmguide/edmguide.html&quot;&gt;guide to electronic music&lt;/a&gt; complete with a map of relationships and lots of samples.  It&apos;s fun to click around and see what clips you actually recognize.  I may have to start listening to some of the streams that are associated with the types I recognize (&lt;i&gt;from my youth, but that&apos;s a different story, sonny....&lt;/i&gt;).&lt;/p&gt;
&lt;p&gt;I had seen the old version years ago, and &lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&apos;s&lt;/a&gt; interest in electronic music sparked my interest enough to dig up this link again.  Now I&apos;ll never lose it again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Replacement HD
            </title>
            <link>
                https://www.hjsoft.com/blog/Replacement_HD.html
            </link>
            <pubDate>Thu, 16 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Replacement_HD.html
            </guid>
            <description>
                &lt;p&gt;I have the replacement drive installed into my R40 now.  I backed up everything with tar to my NFS share where I keep the rest of my backups, and now I&apos;m watching the IBM Recovery disks slowly waste my disk space with Windows XP.  The first pass had put the (somewhat useful) pre-desktop area in place, but before I could really intervene, it was asking for the other 3 restoration CDs, so I guess I&apos;m getting windows on here.  I&apos;m curious if I could allocate a small (5G) partition where Windows &lt;i&gt;could&lt;/i&gt; go if needed, but I&apos;d otherwise mount a more useful filesystem there.  Then I could clear it only if I need it.&lt;/p&gt;

&lt;p&gt;I&apos;m pretty sure I&apos;ve done something less than efficient already (maybe copied the CD contents to a recovery area, but then ended up installing the C: drive off the CDs anyway).  This thing is going to kill me -- I&apos;ve been watching this restore and swapping discs for over 2 hours!  I haven&apos;t even gotten to restoring my Linux system.  I need sleep, but I also need this machine working.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (16 September 2004):&lt;/strong&gt;
I did get it mostly done on Monday night.  I was up until 5AM watching my backed up Linux partitions untar.  NFS just got stuck trying to mount from Knoppix, so I ended up using &lt;code&gt;scp&lt;/code&gt; to copy my tar.bz2 files to my drive.&lt;/p&gt;
&lt;p&gt;QParted and &lt;code&gt;ntfsresize&lt;/code&gt; both reported that the smallest size to which I could shrink my newly installed WinXP partition was 18G, instead of the 5G I was expecting.  I had turned off windows swap and defragmented the drive, but I guess it wasn&apos;t good enough.  I gave up on resizing the partition and just wiped it off the drive again (after watching it be setup for 2 hours), and recreated it as the 5G I had on the old drive.  I still haven&apos;t bothered actually going to the trouble to restore Windows.  I have space if the need arises though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Static Final String Constants
            </title>
            <link>
                https://www.hjsoft.com/blog/Static_Final_String_Constants.html
            </link>
            <pubDate>Fri, 10 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Static_Final_String_Constants.html
            </guid>
            <description>
                &lt;p&gt;Mr Brunning found the &lt;a href = &quot;http://www.brunningonline.net/simon/blog/archives/001548.html&quot;&gt;inlining issue with static finals&lt;/a&gt; recently.  I saw the exact same issue, and went through many of the same steps.  Our application is exploded in the filesystem, so we hoped to be able to change one class and not have to redploy the whole thing.  This interesting side effect caused us the same headaches of having to redeploy anything that may have used our Constants class.
&lt;ol&gt;
&lt;li&gt;Taking &quot;&lt;code&gt;final&lt;/code&gt;&quot; off keeps it from happening, but also doesn&apos;t protect it from accidental changes.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;new String(&quot;principal&quot;)&lt;/code&gt; would have avoided the actual value being inlined, since it&apos;s more dynamic.&lt;/li&gt;
&lt;li&gt;Externalizing the strings in the Constants object into a properties file can fix this as well, and allows reconfiguration without recompilation.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;This is an odd case where the compiler inlines the actual value instead of the normal reference to the object. I&apos;m not sure ant should have been expected to recognize that to know to recompile --  Everything else is dynamically linked at runtime, so it normally wouldn&apos;t have required a recompile.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gamma Correction
            </title>
            <link>
                https://www.hjsoft.com/blog/Gamma_Correction.html
            </link>
            <pubDate>Thu, 9 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gamma_Correction.html
            </guid>
            <description>
                &lt;p&gt;Looking at the new design for &lt;a href = &quot;http://insanity.lost-angel.com/blog/&quot;&gt;Stacey&apos;s site&lt;/a&gt;, I noticed that the colors appeared quite differently on my notebook&apos;s LCD and my work computer&apos;s CRT.&lt;/p&gt;
&lt;p&gt;This &lt;a href = &quot;http://trikuare.cx/art/tut/gamma/&quot;&gt;monitor calibration&lt;/a&gt; site helped me tune my display&apos;s individual RGB gamma corrections, so the colors really show as they&apos;re meant to be seen.  I used &lt;code&gt;xgamma&lt;/code&gt; to adjust my gamma settings on the fly and saved the settings into my &lt;code&gt;XF86Config-4&lt;/code&gt; file.  My LCD looks much richer now and not as washed out.&lt;/p&gt;
&lt;p&gt;I expect this will greatly improve the quality of images that I edit on my notebook as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                hda: { UncorrectableError }
            </title>
            <link>
                https://www.hjsoft.com/blog/hda_UncorrectableError.html
            </link>
            <pubDate>Tue, 7 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/hda_UncorrectableError.html
            </guid>
            <description>
                &lt;p&gt;On Saturday night, my notebook locked up, so I rebooted it, and it just failed with a kernel OOPS somewhere in the VM code.&lt;/p&gt;
&lt;p&gt;I suspected a corrupted swap space, so I booted the Knoppix CD, recreated my swap space (&lt;code&gt;mkswap -c&lt;/code&gt;), and sure enough, there were a couple bad blocks in the middle.  It flagged them accordingly and works around them.&lt;/p&gt;
&lt;p&gt;Following that, I needed to do a whole &lt;code&gt;reiserfsck --rebuild-tree&lt;/code&gt; on my root partition before the machine would successfully boot.  Luckily the bad blocks are in the swap (which can flag and skip them) instead of the reiserfs (which cannot).&lt;/p&gt;
&lt;p&gt;Once bad blocks start showing up, the drive is on its way out, so I created a login at IBM&apos;s website, logged a request, they called me back about 30 minutes later, but I missed the call.  I called back on Monday night around 10pm, talked to a tech, and they&apos;re shipping me a new drive, no charge, and a return-postage box included.  Disregarding the hassle of hardware failure, IBM is making the whole thing pretty easy -- no sitting on hold, and no low-tier tech support insisting I conduct a bunch of tests I already did.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                China&apos;s Labor Shortage
            </title>
            <link>
                https://www.hjsoft.com/blog/China_Labor_Shortage.html
            </link>
            <pubDate>Fri, 3 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/China_Labor_Shortage.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve &lt;a href = &quot;http://www.hjsoft.com/blog/link/Simple_View_of_Globalization&quot;&gt;said before&lt;/a&gt; that foreign economies and our own will balance out, and we may be seeing a bit of that now.  &lt;a href = &quot;http://www.techcentralstation.com/083104A.html&quot;&gt;China&apos;s starting to experience a labor shortage.&lt;/a&gt;  They&apos;re producing so much that they actually don&apos;t have enough people working in factories.  The &lt;i&gt;worker&lt;/i&gt; is in demand, so he now has more power.  Factories and other employers are looking for ways to retain their workforces, so they&apos;re offering benefits and competitive pay.  If they don&apos;t, the workers move on and find a better job.&lt;/p&gt;
&lt;p&gt;We&apos;ve been suffering from our businesses moving  their operations to China, India, Mexico, etc, but those places are booming, their economies are elevating, the people are making more.  It&apos;s economic assistance in its most sustainable form.  As labor costs rise in these poorer countries, the cost of doing business in the United States can be competetive again, and the jobs will return. Plus other parts of the world are better off than they were, providing for themselves, requiring less economic assistance, and maybe someday spreading the wealth and assistance themselves.  It&apos;s a long-term picture.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Making Vim Look Difficult
            </title>
            <link>
                https://www.hjsoft.com/blog/Making_Vim_Look_Difficult.html
            </link>
            <pubDate>Thu, 2 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Making_Vim_Look_Difficult.html
            </guid>
            <description>
                &lt;p&gt;David Rayner&apos;s &lt;a href = &quot;http://www.rayninfo.co.uk/vimtips.html&quot;&gt;Vim Tips&lt;/a&gt; show off all sorts of neat tricks, but make Vim look more difficult than it should.  I guess these are all things I wouldn&apos;t have even expected to do in my editor.  Some of this I would have had trouble writing Perl scripts to do.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                /usr/bin/perl Music
            </title>
            <link>
                https://www.hjsoft.com/blog/Perl_Music.html
            </link>
            <pubDate>Thu, 2 Sep 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Perl_Music.html
            </guid>
            <description>
                &lt;p&gt;When I used to regularly frequent clubs and parties, I&apos;d occasionally bring my notebook out and just chill in the corner coding.  Via &lt;a href = &quot;http://slashdot.org/&quot;&gt;Slashdot&lt;/a&gt;, I saw this article about &lt;a href = &quot;http://www.perl.com/pub/a/2004/08/31/livecode.html&quot;&gt;Hacking Perl in Nightclubs&lt;/a&gt;.  It&apos;s not about people like me, but a musician using Perl scripts to sequence and perform music.&lt;/p&gt;
&lt;p&gt;I&apos;ve always been curious about this sort of thing.  On more than one occassion, I&apos;ve installed the latest free software offerings of trackers and music sequencers to see what I could do, but I&apos;ve never gotten far.  The tools seem to have come a long way.  I&apos;ve installed Supercollider and Ecasound as this article happens to mention, but when I get around to actually playing with them, I doubt I&apos;ll find my musical ability has progressed much beyond my 4 years playing a trumpet.  I can appreciate music, but I don&apos;t understand all the complex structures, and the music that interests me most seems to have redefined all the rules.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Serial Experiments Lain
            </title>
            <link>
                https://www.hjsoft.com/blog/Serial_Experiments_Lain.html
            </link>
            <pubDate>Tue, 31 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Serial_Experiments_Lain.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m apparently developing a new obsession with Serial Experiments Lain.  I somehow stumbled upon a tiny little phone-sized Lain background, so I have that on my phone, then I named my notebook &quot;navi&quot; (the navigational personal computers used in Lain).  Digging around for an interesting desktop background for the notebook, I found that the absolutely wonderful theme song is a song called &lt;i&gt;Duvet&lt;/i&gt; by Boa.  That&apos;s good to know, because I wouldn&apos;t mind having that song.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bluetooth Working on the R40
            </title>
            <link>
                https://www.hjsoft.com/blog/Bluetooth_Working_on_the_R40.html
            </link>
            <pubDate>Tue, 31 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bluetooth_Working_on_the_R40.html
            </guid>
            <description>
                &lt;p&gt;Referring back to my &lt;a href = &quot;http://www.hjsoft.com/blog/link/Using_Bluetooth&quot;&gt;previous notes&lt;/a&gt; on configuring my DBT-120 bluetooth dongle, I got it working on my new ThinkPad R40.  Either Debian or Knoppix had dropped some default example PPP configs into /etc, so it already had a GPRS example.  With that example and my notes, I got it working within 30 minutes.&lt;/p&gt;
&lt;p&gt;I saw my USB dongle for sale at OfficeMax for $40.  I got mine off EBay  for $17 -- pretty good.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux on ThinkPad R40 (2897-B4U)
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_on_ThinkPad_R40_2897-B4U.html
            </link>
            <pubDate>Mon, 30 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_on_ThinkPad_R40_2897-B4U.html
            </guid>
            <description>
                &lt;p&gt;I have an IBM ThinkPad R40 with a 1.4GHz Pentium M, 256M RAM, ATI Radeon 7500 (32MB), Intel Pro 2100 Wireless.  I have another 256M of RAM arriving for it tomorrow.&lt;/p&gt;
&lt;p&gt;I&apos;d like to preserve the Windows XP partition on the machine, so I&apos;m trying to be careful.  I&apos;ve already blown away the XP partition once with a typo in Gnoppix&apos; Partition Morpher (those MB, not GB).  It took way too long to restore from the rescue partition, and doing so seems to have done away with all my free unpartitioned space I had.  This could have been due to an error on my part though.&lt;/p&gt;
&lt;p&gt;Knoppix has proven to be a pretty slick way to install Debian, so I thought I&apos;d give Gnoppix 0.8 a try (the Gnome equivalent to Knoppix) since it had newer kernels and such.  It takes a long time to boot from the CD.  (Update: I eventuallly ended up watching Gnoppix install with no feedback on anything actually working.  It was a huge waste of time, so I fell back to my old Knoppix 3.3 CD.  The following directions demonstrate Knoppix.)&lt;/p&gt;
&lt;p&gt;
Here are my steps I think were most successful:
&lt;ol&gt;
&lt;li&gt;Boot Windows XP, disable the swap file.&lt;/li&gt;
&lt;li&gt;Reboot into Windows again.&lt;/li&gt;
&lt;li&gt;Defragment the drive.&lt;/li&gt;
&lt;li&gt;Note the amount of used disk space, so you know what to leave later when resizing the ntfs partition.  With a little unmovable section, I&apos;m hoping it fits within 5GB.&lt;/li&gt;
&lt;li&gt;I booted Gnoppix and did manage to get its QParted to resize my ntfs partition.  Knoppix, if it doesn&apos;t have QParted, may have ntfsresize or some similar command-line tool.&lt;/li&gt;
&lt;li&gt;Use QParted to manipulate your partitions.  I cheated a bit and dropped back to only 4 Linux partitions: /boot, /, /home, and a swap.  I usually do more than that, but I&apos;m seeing less reason for it.  I had read some warnings that IBM may have put their rescue info on the end of the disk in an unpartitioned area.  I saw this free area (2.86GB) at the end of my disk before I repartitioned.  There also seemed to be 3G before the Windows XP partition, so to be safe, I was sure to leave both in place. I actually left 2.9G on the end to be safe.  If I blow that away, then I&apos;ll not be able to restore Windows.  I hear you can get IBM to send a CD though in the cases where you&apos;ve inadvertently destroyed it.  I may just call them up and order the CD to be safe.&lt;/li&gt;
&lt;li&gt;I dropped to a shell and ran the &lt;code&gt;knx-hdinstall&lt;/code&gt;.  I had another option of running &lt;code&gt;knoppix-install&lt;/code&gt;, but that one didn&apos;t present me with the option of using reiserfs.&lt;/li&gt;
&lt;li&gt;Knoppix did not give me a proper option to mount all my partitions into the tree the way I liked, so I ended up installing everything to a single /, and moving /boot and /home afterward.  I probably could have gotten away with mounting them by hand before it started copying if I had needed.&lt;/li&gt;
&lt;li&gt;Knoppix didn&apos;t have ACPI support, but Gnoppix had the option.  I looked around /proc/acpi to find everything looked good, cpu power states were enumerated, battery stats showed, ac_adapter was working, etc.  The NIC was also working right out of the box.  It&apos;s an Intel 82801BD PRO/100 VE supported by the e100 module.&lt;/li&gt;
&lt;li&gt;Once the install was done, I changed my /etc/apt/sources.list to unstable, did the apt-get update, and brought it all up-to-date.
&lt;li&gt;Based on my Dell config, I managed to get a good 2.6.8.1 kernel built for the ThinkPad in one try.  I enabled ACPI and the Radeon DRI module.  At this point, ACPI still looks pretty good, but I&apos;m not seeing any of the button events, not even the power button.  I know there are projects to make these work, but I figured I&apos;d at least see the basics (power?) work.&lt;/li&gt;
&lt;li&gt;cpudynd is up and running to change my CPU speed depending upon load.  It seamlessly shifts between 600Mhz and 1400MHz as necessary without the audio skips that the Dell exhibited.  I had to load the &lt;code&gt;cpufreq_powersave&lt;/code&gt; kernel module by hand to give it the option to shift down to slow mode.  Otherwise, it just stuck in high speed.&lt;/li&gt;
&lt;li&gt;Laptop mode is nice, since it allows cpudynd to configure the drive to spin down.  The drive is much quieter than the old Dell, so it&apos;s not as noticable as it spins up and down.&lt;/li&gt;
&lt;li&gt;I built the &lt;a href = &quot;http://ipw2100.sf.net&quot;&gt;ipw2100&lt;/a&gt; 802.11b wireless driver outside the kernel, installed it, restarted hotplug, and it loaded it for me.  I had to download the firmware available from the site.  Monitor mode even works, which is a big reason I wanted to stick with the older chipset, instead of the 2200 with b/g support.&lt;/li&gt;
&lt;li&gt;3D acceleration is working out of the box with the stock radeon kernel module and Debian&apos;s XFree86 4.3.  It seems to run better (800fps in glxgears) in 16bit mode than 24bit mode, but 24bit is very usable, so I&apos;m running it there.&lt;/li&gt;
&lt;li&gt;The pc speaker on here is &quot;stupidly loud&quot; as put by someone else on the mailing lists, and it doesn&apos;t have a mixer to adjust it.  Compiling PC Speaker support as a module, and then blacklisting  &lt;code&gt;pcspkr&lt;/code&gt; in hotplug (so it doesn&apos;t load) disables it completely.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                ThinkPad R40 on the Way, or Is It?
            </title>
            <link>
                https://www.hjsoft.com/blog/ThinkPad_R40_on_the_Way.html
            </link>
            <pubDate>Wed, 25 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ThinkPad_R40_on_the_Way.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve ordered the replacement to my deteriorating Inspiron, a &lt;a href = &quot;http://www.electrodiscounts.com/computer/discr25068.htm&quot;&gt;ThinkPad R40 1.4GHz Pentium M&lt;/a&gt; with 802.11b and everything.  That&apos;s pretty exciting.  As you can see, the price is relatively budget-minded, since this was an unplanned purchase.  Once I get it and see the RAM configuration, I&apos;ll order more memory to bring it up to at least 512M.&lt;/p&gt;
&lt;p&gt;It could have a number of 802.11b cards, but I expect it to be the Centrino Intel Pro 2100, which has &lt;a href = &quot;http://ipw2100.sf.net/&quot;&gt;experimental support&lt;/a&gt; from Intel, or I can use &lt;a href = &quot;http://ndiswrapper.sourceforge.net/&quot;&gt;ndiswrapper&lt;/a&gt; around the XP drivers.  ndiswrapper is obviously a last resort, though I hear it does work.&lt;/p&gt;
&lt;p&gt;I was terribly tempted to buy a Dell 600m from their refurb site, but from what I could gather, I&apos;d be lucky to get half the battery life out of the Dell as I will the ThinkPad (6hrs!).  ThinkPad&apos;s are supposed to be built like tanks as well.&lt;/p&gt;
&lt;p&gt;I first got really interested in ThinkPads at IBM&apos;s &lt;a href = &quot;http://www-132.ibm.com/webapp/wcs/stores/servlet/CategoryDisplay?sortBy=Price&amp;storeId=1&amp;langId=-1&amp;catalogId=-840&amp;categoryId=2576396&amp;dualCurrId=73&quot;&gt;certified used site&lt;/a&gt;, but the T40/T41s which interested me jumped $100 yesterday, then 2 of the 3 disappeared today, so I was sent scrambling to find one elsewhere.  The R40 seems very similar to the T40 series, just not quite as lightweight.&lt;/p&gt;
&lt;p&gt;Next-day shipping only costs $30 more, so I went for it. I couldn&apos;t really be expected to be patient to save that nominal fee.  ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (11:25AM):&lt;/strong&gt; Ugh!  It&apos;s back-ordered! &lt;font color = &quot;red&quot;&gt;(!#$%#)&lt;/font&gt;  I could &quot;upgrade&quot; to an R50 for $100 more, but I really preferred the R40&apos;s price, features, and battery life -- The R50 only gets 4.5 hours. It comes with the ipw2200 (802.11b/g) instead of the ipw2100 (802.11b), but the 2200 doesn&apos;t have as many features working in the Linux driver.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (12:54PM):&lt;/strong&gt; I found the &lt;a href = &quot;http://www.mpsuperstore.com/computer/discr92963.htm&quot;&gt;same machine&lt;/a&gt; at another retailer for $20 more.  I shipped it ground, which is $30 cheaper, so I&apos;m saving $10 for accepting 5-7 days ground shipping from NY.  You&apos;ll notice that the 2 product listings look strangely similar.  My guess is that ElectroDiscounts is a reseller for Marine Park, and they just use a customized version of the site, only MP knows they can deliver it.  I&apos;m back on track.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (19 August 2004 9:00pm):&lt;/strong&gt; Not all that surprisingly, MP called and said they couldn&apos;t get the R40 model anymore.  They too offered the less attractive R50.  &lt;a href = &quot;http://www.newegg.com/&quot;&gt;NewEgg&lt;/a&gt; has a &lt;a href = &quot;http://www.newegg.com/app/ViewProductDesc.asp?description=34-146-022R&amp;catalog=23&amp;manufactory=BROWSE&amp;depa=0&quot;&gt;the same refurbished R40&lt;/a&gt;, so I placed my order for  a third time.  They had the extra 256M of RAM I&apos;d need as well, so I ordered that.  Let&apos;s see if I actually get a notebook now.  With any luck, it&apos;ll be delivered Saturday.&lt;/p&gt;
&lt;p&gt;I must really want this particular model.  No others quite compare for the price.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (20 August 2004 7:30am):&lt;/strong&gt; My  link above to the product has ceased to work, and I don&apos;t see it any longer in their listings.  Did I get the last one or did yet another retailer yank it out from under me?  Let&apos;s see if I get a phone call...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (24 August 2004):&lt;/strong&gt; My order sat at NewEgg on the &quot;Address Verification Pending&quot; step for days.  I called yesterday (Monday), they said they verified my address, and that it&apos;ll ship Tuesday (today).  This morning, it still said &quot;Pending&quot;, so I called again and they said I need to call from my home number on file with the credit card company.  I had Claire call from home just now and the order is on track again.&lt;/p&gt;
&lt;p&gt;I got no emails or phone calls stating this need, and the first CSR didn&apos;t didn&apos;t even tell me this was necessary and falsely told me it would be on its way.  The first CSR did knock off the overnight shipping, but obviously didn&apos;t rectify the situation.  I have no issue with having to call from home, but I really wish they would have let me know, so I could get my new notebook in a reasonable time.&lt;/p&gt;
&lt;p&gt;I&apos;ve still not ruled out the possibility that they&apos;ll call me back to tell me they sold them all out in the time they&apos;ve been wasting.  More likely, it&apos;ll sit for days in the &quot;Preparing Order&quot; state until I finally call, and they tell me it&apos;s out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (25 August 2004):&lt;/strong&gt;  A little FedEx birdy told me that there&apos;s an R40 riding around in Lancaster this morning!  w00t!  I can&apos;t tell that the RAM is on its way yet, though.  I can at least get started without it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (5:00pm):&lt;/strong&gt; The machine has been delivered, so I&apos;m headed home to hopefully find everything in fine working order.  I expect to see the extra RAM tomorrow.&lt;/p&gt;
&lt;p&gt;The big question now, is &quot;What should I name this new box?&quot;  Comment or email your suggestions.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                I Finally Got Around to Editing Beach Pics
            </title>
            <link>
                https://www.hjsoft.com/blog/I_Finally_Got_Around_to_Editing_Beach_Pics.html
            </link>
            <pubDate>Tue, 24 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/I_Finally_Got_Around_to_Editing_Beach_Pics.html
            </guid>
            <description>
                &lt;p&gt;...and then I unpacked all the original images over top the edited pictures, so I wasted 40 minutes of work.  Maybe you&apos;ll see the beach pictures in another month. :(&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Power of Advertising
            </title>
            <link>
                https://www.hjsoft.com/blog/Power_of_Advertising.html
            </link>
            <pubDate>Fri, 20 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Power_of_Advertising.html
            </guid>
            <description>
                &lt;p&gt;The marketing people really seem to know how to get my attention these days.  I see so many billboards on my drive with 10-foot tall burgers, subs, etc.  By the time I get to work all I want is a 10-foot burger, and a 20-foot Pepsi!&lt;/p&gt;
&lt;p&gt;Oddly, I always miss the directions to find the places with the 10-foot food.  That&apos;s probably for the best -- normal food is usually large enough.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                PHP4/Apache 2 Troubles
            </title>
            <link>
                https://www.hjsoft.com/blog/PHP4_Apache_2_Troubles.html
            </link>
            <pubDate>Thu, 19 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/PHP4_Apache_2_Troubles.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.kimquigley.com/&quot;&gt;Kim&lt;/a&gt; alerted me this morning to the severe brokenness of my whole web server.  I did manage to dig up a reported bug in Debian&apos;s bug database, but the solution was to downgrade a small pile of packages or wait for the fixed PHP modules to hit the Debian package mirrors.  I&apos;ve downgraded and I&apos;m waiting now.&lt;/p&gt;
&lt;p&gt;It seems to have been broken since about 3pm yesterday -- even my static or perl pages were broken.  The only thing that happened to work were the proxies (like to my JBoss server), so I hadn&apos;t noticed the trouble right away.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Phone Outage
            </title>
            <link>
                https://www.hjsoft.com/blog/Phone_Outage.html
            </link>
            <pubDate>Mon, 16 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Phone_Outage.html
            </guid>
            <description>
                &lt;p&gt;Our landline stopped working Thursday night during some storms/flooding, so I didn&apos;t think too much about it.  That doesn&apos;t often happen, but it seemed believable enough.  Friday morning, it was still not working, so I checked out it Saturday, and it was dead at the old box outside.  I scheduled repair service through Verizon&apos;s website, which was pretty convenient -- it did a line test and all.&lt;/p&gt;
&lt;p&gt;A Verizon tech came out Sunday (a day early, actually), found it was just my box that was the problem and hooked up a new one.  This one sits just barely over the deck, instead of under it like the old one.&lt;/p&gt;
&lt;p&gt;While I had it open, I connected up an extension line which only reaches the garage at the moment, and I tried to find where my main line comes into the house, since it&apos;s terribly worn and in need of replacement.  I had no luck in that endeavor, so I&apos;ll have to pull up a few pieces of the deck at least once more when I get around to that.&lt;/p&gt;
&lt;p&gt;Since the computer is on cablemodem, and we have cell phones, the phone outage was surprisingly not urgent.  It&apos;s all fine now, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Understanding an IDE
            </title>
            <link>
                https://www.hjsoft.com/blog/Understanding_an_IDE.html
            </link>
            <pubDate>Tue, 10 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Understanding_an_IDE.html
            </guid>
            <description>
                &lt;p&gt;I may be doomed to an early obsolescence.  My years in this field could be numbered before I really get started.  I can&apos;t figure out integrated development environments.  I get curious every once in a while and try to fire up a Java IDE (Eclipse or NetBeans), and I just get lost and distracted.  I just give up after deciding I don&apos;t want to spend any time re-architecting my entire build environment -- setting classpaths, setting up projects, etc.  I have to work so hard just to get it to stop flagging everything as unknown and to maybe start completing some syntax.&lt;/p&gt;
&lt;p&gt;I did get slightly further with NetBeans this time.  I quickly mounted my source filesystem and a pile of jars, and it actually seemed to be working.  I might actually be able to start using that one, but with the RefactorIT module being crippleware, I&apos;m not sure what use I&apos;ll have for NetBeans at all.  RefactorIT also seemed to like to block up the whole IDE anytime I tried to use it.&lt;/p&gt;
&lt;p&gt;I looked at Eclipse for the very first time and was immediately stuck creating a project and importing (aka duplicating) all my code into the project.  PowerJ insisted on doing that too.  It wouldn&apos;t just work on my local VSS directory I already had.  Maybe I&apos;ll get further in 2 months when I care to look again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Bad Notebook, No RAM For You!
            </title>
            <link>
                https://www.hjsoft.com/blog/Bad_Notebook_No_RAM_For_You.html
            </link>
            <pubDate>Tue, 10 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Bad_Notebook_No_RAM_For_You.html
            </guid>
            <description>
                &lt;p&gt;My second RAM slot seems to be going bad in my notebook.  At first, I&apos;d reboot occassionally, and it would say &quot;Amount of memory has changed.&quot;, then I&apos;d reseat the chip, and it would be OK.  Twice now, it seems to have lost that second chip &lt;i&gt;while running&lt;/i&gt;.  That causes bad noises in place of music, black screens, and computer-death otherwise. &lt;/p&gt;
&lt;p&gt;I think I need a new machine, or at the very least, one big stick of RAM to replace the 2 I have now.&lt;/p&gt;
&lt;p&gt;I&apos;m trying to run the machine with only 256M RAM (in the first slot only) and it&apos;s terrible!  Gnome, Mozilla, XFree86, and JBoss really require more RAM than this to be perform nicely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (10 August 2004):&lt;/strong&gt;
It seems that PC100 SODIMMs only go up to 256M, and I&apos;ve found no indication that my Inspiron 3800 can take PC133 RAM (which does go to 512M).  I&apos;ve bought RAM from &lt;a href = &quot;http://www.kahlon.com/&quot;&gt;Kahlon&lt;/a&gt; before, and their cool memory configurator (by notebook model) doesn&apos;t list any PC133 RAM.  Does anyone know any differently or possibly have a piece of 144-pin PC133 RAM that I could try?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Backup Media
            </title>
            <link>
                https://www.hjsoft.com/blog/Backup_Media.html
            </link>
            <pubDate>Thu, 5 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Backup_Media.html
            </guid>
            <description>
                &lt;p&gt;I currently do nightly incremental backups of my server and laptop to a 3rd computer.  That computer is sitting next to the others, so it&apos;s no safer from natural disaster than the others.&lt;/p&gt;
&lt;p&gt;My internet connection is too slow for full offsite backups, so I need to figure out a removable media for my backups, so I can hand them off to someone else.  Tape drives are too expensive, and the one I have now is tiny.&lt;/p&gt;
&lt;p&gt;Digging for a tool to backup across multiple CDs, a tool called &lt;a href = &quot;http://www.muempf.de/&quot;&gt;cdbackup&lt;/a&gt; seems promising as it allows any datastream (tar, dump, cpio, etc) to be dumped to CD.  I&apos;ll have to give it a try real soon.&lt;/p&gt;
&lt;p&gt;After glancing at &lt;a href = &quot;http://www.pricewatch.com/&quot;&gt;Pricewatch&lt;/a&gt;, though, I must wonder if it&apos;s worth the trouble, since I could just by a DVD+RW burner for ~$50.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Terrorism is a Sin, MMMKay?
            </title>
            <link>
                https://www.hjsoft.com/blog/Terrorism_is_a_Sin_MMMKay.html
            </link>
            <pubDate>Thu, 5 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Terrorism_is_a_Sin_MMMKay.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.sinfest.net/d/20040717.html&quot;&gt;This comic&lt;/a&gt; too closely resembles some President&apos;s and senators&apos; attitudes.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                2004 Vacation Highlights
            </title>
            <link>
                https://www.hjsoft.com/blog/2004_Vacation_Highlights.html
            </link>
            <pubDate>Tue, 3 Aug 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2004_Vacation_Highlights.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m back from vacation and I accomplished much of what I had hoped.  I took 3 fiction/recreational reads (Cryptonomicon, Pattern Recognition, Art of Deception) along, but didn&apos;t touch them.  I studied my design patterns books and wrote some great blog code (which I&apos;ve just deployed).&lt;/p&gt;
&lt;p&gt;Here are some highlights of my past week:
&lt;ul&gt;
&lt;li&gt;Went to the beach 3 times to play with Paige a bit.  She loved the beach and spent lots of time there with Claire.&lt;/li&gt;
&lt;li&gt;One day I constructed and consumed 2 10-inch sandwiches in one lunch.  While it subdued my hunger, it didn&apos;t stuff me, so I bet I could have actually eaten a third sandwich!&lt;/li&gt;
&lt;li&gt;Sean taught me how to make excellent fried rice.  We had seafood and chicken fried rice.&lt;/li&gt;
&lt;li&gt;I won at Scrabble.&lt;/li&gt;
&lt;li&gt;I ran up a hell of a GPRS data bill.&lt;/li&gt;
&lt;li&gt;I learned to hate AT&amp;T Wireless&apos; customer dis-service for putting me on 1hr hold at 9:30pm on a weekday.&lt;/li&gt;
&lt;li&gt;I made my blog code a bit easier to extend and maintain through a few well-placed patterns.&lt;/li&gt;
&lt;li&gt;My Timex Helix WRKS altimiter doesn&apos;t like to slip into negative altitudes which can happen when the weather changes near sea level.  I found that calibrating the simple altimeter 1000ft high solved the problem of it just reading &apos;LO&apos; and not being able to be recalibrated.  Air pressure seems to be linearly related to altitude as I had expected, so the real altitude can still be determined easily.&lt;/li&gt;
&lt;li&gt;Sean taught me how to play Prince of Persia on the GameCube.&lt;/li&gt;
&lt;li&gt;I actually sat down and played single-player video games (Prince of Persia and Double Dash) while everyone else had wandered off to the beach.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Vacation
            </title>
            <link>
                https://www.hjsoft.com/blog/Vacation.html
            </link>
            <pubDate>Mon, 26 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Vacation.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m actually off on vacation this week.  I&apos;m in Sea Isle City, NJ dangling at the end of a Bluetooth/GPRS connection -- quite useful, really.&lt;/p&gt;
&lt;p&gt;Claire and Paige plan to hit the beach a good bit, and I plan to read, code, and relax a bit.&lt;/p&gt;

&lt;p&gt;I got off to a slow start, but I&apos;m doing pretty well now.  I&apos;m ripping through blog code applying appropriate patterns where possible and adding management screens for an admin to customize the weblog without having to change the JSP or poking at the underlying database.  This includes new lists to just view comments independent of articles, management of the referer blacklist, and finally configuring the left-side link panes -- that&apos;s all hardcoded at this point.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Pictures of Excitement
            </title>
            <link>
                https://www.hjsoft.com/blog/Pictures_of_Excitement.html
            </link>
            <pubDate>Thu, 22 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Pictures_of_Excitement.html
            </guid>
            <description>
                &lt;p&gt;Here are some pictures I randomly found on friends&apos; sites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://x.hjsoft.com/open.php?pic=/pics/Kyleigh/lores/DSCN0846.JPG&quot;&gt;Kyleigh!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://imaginativepeople.com/gallery/animals/act&quot;&gt;Tux!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see, they are very excited.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Video around the Gallery
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Video_around_the_Gallery.html
            </link>
            <pubDate>Wed, 21 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Video_around_the_Gallery.html
            </guid>
            <description>
                &lt;p&gt;I found lots of raw video on my harddrive, so I finally sat down and editted and encoded it all.  I have a camera-full to do again after this.  You&apos;ll find the new clips here:
&lt;ul&gt;
&lt;li&gt;&lt;a href = &quot;http://www.hjsoft.com/gallery/Paige_10_Months&quot;&gt;Paige 10 Months&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://www.hjsoft.com/gallery/Paige_11_Months?page=5&quot;&gt;Paige 11 Months&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href = &quot;http://www.hjsoft.com/gallery/Deck?page=3&quot;&gt;First Fire&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;Kino seems to be getting pretty nice, so editting is much easier these days.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Conflicted Right
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Conflicted_Right.html
            </link>
            <pubDate>Fri, 16 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Conflicted_Right.html
            </guid>
            <description>
                &lt;p&gt;Terry Gross of &lt;a href = &quot;http://www.npr.org/&quot;&gt;NPR&lt;/a&gt;&apos;s &lt;a href = &quot;http://freshair.npr.org/&quot;&gt;Fresh Air&lt;/a&gt; &lt;a href = &quot;http://freshair.npr.org/day_fa.jhtml?display=day&amp;todayDate=07/15/2004&quot;&gt;interviewed Stephen Moore&lt;/a&gt; of the &lt;a href = &quot;http://www.clubforgrowth.org/&quot;&gt;Club for Growth&lt;/a&gt; and Cato Institute.  He&apos;s the president of the Club for Growth which is a conservative Republican political group.  The Cato Institute is a Libertarian organization spouting the reasonable mantra of &quot;Keep the government out of our boardrooms and bedrooms.&quot;&lt;/p&gt;

&lt;p&gt;Moore pretty much calls anyone left of center elitists who think they need to tell everyone what to do.  He sort of tries again and again to redefine the word elite to be derogatory.  He lumps into his elitist group: journalists, university professors, the Volvo-driving, NPR-listening, etc.  He insulted his audience and host making it painfully obvious that he did not fit in this venue.&lt;/p&gt;
&lt;p&gt;His Libertarian side says government should be smaller and stay out of private and corporate affairs, and his Club side says that Republicans lower taxes!  The Club used to define Republicans by a second fundamental quality as well -- smaller government -- but he admits Bush doesn&apos;t get that, so they&apos;ll overlook that part and support him anyway.&lt;/p&gt;
&lt;p&gt;His Club for Growth flat out refuses to talk about the social issues that the Republicans are getting wrong -- they just want to focus on the economics.  They don&apos;t even focus on the full economic picture though.  They just say lower taxes are good, but they ignore that it hasn&apos;t shrunken the government like they intended.  Bush doesn&apos;t get that part -- he lowers taxes like a good Republican, but then he turns around and spends us into a &lt;a href = &quot;http://www.cnn.com/2004/US/01/26/budget.deficits.ap/&quot;&gt;record deficits&lt;/a&gt; growing government to erode our liberties and force our will on other nations.  Bush is still their man somehow, so they just express some slight &lt;i&gt;frustration&lt;/i&gt; with the President, but mostly  look the other way.&lt;/p&gt;
&lt;p&gt;He doesn&apos;t seem to understand that he has to take the whole agenda, not just the economics (which he doesn&apos;t agree with totally either). Reelecting Bush will allow him to continue his assault on his Libertarian values, and still just ignore half the Republican values as well.  He&apos;s too blindly hopeful that his one tiny piece of the puzzle will solve the rest.  He&apos;ll promote a mismatch Republican before a Democrat who may actually support more of his agenda.  I guess it&apos;s a matter of priority and perception.&lt;/p&gt;
&lt;p&gt;I don&apos;t really want my taxes lowered if the government can&apos;t keep up with funding for social programs like Section 8 housing or social security.  Then again, I&apos;d be perfectly happy taking a cut in taxes if it actually meant they&apos;d have less to spend on war.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Referer Spam from Blog Sites
            </title>
            <link>
                https://www.hjsoft.com/blog/Referer_Spam_from_Blog_Sites.html
            </link>
            <pubDate>Fri, 16 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Referer_Spam_from_Blog_Sites.html
            </guid>
            <description>
                &lt;p&gt;I guess in an attempt to get around referer blacklists, I&apos;ve noticed a couple porn spammers creating blogspot.com accounts and posting referers from there.  I&apos;ve been deleting them when I see them.  I&apos;ve already coded a cute little action to allow me to do that, but I guess I&apos;ll have to get around to more sophisticated management, maybe a blacklist just to make my life slightly easier.&lt;/p&gt;
&lt;p&gt;It&apos;s about time for me to get back to coding.  I&apos;ve taken a bit of a hiatus as I&apos;ve been reading Design Patterns.  I&apos;m collecting lots of good ideas, and I think I&apos;ll be able to redesign some aspects of my blog in a much cleaner fashion.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Using Bluetooth
            </title>
            <link>
                https://www.hjsoft.com/blog/Using_Bluetooth.html
            </link>
            <pubDate>Tue, 13 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Using_Bluetooth.html
            </guid>
            <description>
                &lt;p&gt;My friend Ben gave me his old &lt;a href = &quot;http://www.sonyericsson.com/t68i/&quot;&gt;SonyEricsson T68i&lt;/a&gt; (which is one of the phones I&apos;ve really wanted when it was new).  It supports Bluetooth and &lt;a href = &quot;http://www.attwireless.com/&quot;&gt;AT&amp;T Wireless&lt;/a&gt; provides my GPRS network, so this gives me something new with which to experiment.&lt;/p&gt;
&lt;p&gt;I found a nicely-priced &lt;a href = &quot;http://www.d-link.com/products/?pid=34&quot;&gt;D-Link DBT-120&lt;/a&gt; USB-BT dongle on eBay, and now I&apos;m set.  I thought it would be convenient just to be able to access the phone&apos;s modem functionality while it was still in my pocket, but it gets better than that -- I can put the phone on the other side of the house, where the GPRS signal is stronger and still access it from another room.&lt;/p&gt;
&lt;p&gt;I recompiled my Linux 2.6.7 kernel with modules for: &lt;code&gt;bluetooth&lt;/code&gt;, &lt;code&gt;l2cap&lt;/code&gt;, &lt;code&gt;rfcomm&lt;/code&gt;, &lt;code&gt;hci_usb&lt;/code&gt;.  I then installed Debian Unstable&apos;s latest &lt;code&gt;bluez-utils&lt;/code&gt; package.  I think the only bluetooth-specific configurations I needed to change was to add this section to the &lt;code&gt;/etc/bluetooth/rfcomm.conf&lt;/code&gt;:
&lt;pre&gt;rfcomm0 {
    bind yes;
    device 00:0A:D9:13:0B:1B;
    channel 1;
    comment &quot;T68i&quot;;
}&lt;/pre&gt;
Restarting &lt;code&gt;/etc/init.d/bluez-utils&lt;/code&gt; yielded a working &lt;code&gt;/dev/rfcomm0&lt;/code&gt; device which allows me to talk to the phone as a modem (just like ircomm0 in case of IRDA).  I ran pppconfig and configured up a pretty standard modem-like PPP session using &lt;code&gt;/dev/rfcomm0&lt;/code&gt; as the device, bogus login and passwords, and relatively bogus default chat scripts.  The important part is to dial to the right number: &lt;code&gt;*99#&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;My PPP connection kept dropping out after about 2 minutes, due to the lcp-echo requests not being answered.  I had to disable lcp-echo requests with these 2 lines added to the &lt;code&gt;/etc/ppp/peer/provider&lt;/code&gt; options file:
&lt;pre&gt;lcp-echo-failure 0
lcp-echo-interval 600&lt;/pre&gt;
This disables failure, and additionally tells it to not ping so often (every 5 minutes now).&lt;/p&gt;
&lt;p&gt;In my initial tests, I&apos;m seeing about 4.5KiB/s, which isn&apos;t terrible for a completely mobile connection.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Dynamic Proxies
            </title>
            <link>
                https://www.hjsoft.com/blog/Dynamic_Proxies.html
            </link>
            <pubDate>Mon, 12 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Dynamic_Proxies.html
            </guid>
            <description>
                &lt;p&gt;DevX has an article on &lt;a href = &quot;http://www.devx.com/Java/Article/21463&quot;&gt;dynamic proxies&lt;/a&gt; provided by J2SE.  They claim it&apos;s the first step to understanding AOP, and I think it does shed some light and give you a simple starting point to understanding where the AOP folks are taking us.&lt;/p&gt;

&lt;p&gt;I was in the process of experimenting with writing a static proxy to wrap JDBC interfaces, but I may be able to implement it this way, instead, if I can probably understand dynamic proxies.  It looks powerful and not even all that complex, but i suspect I&apos;ll find the complexities once I start playing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Blog Speed: Implementing Some Old Standards
            </title>
            <link>
                https://www.hjsoft.com/blog/Blog_Speed_Implementing_Some_Old_Standards.html
            </link>
            <pubDate>Wed, 7 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Blog_Speed_Implementing_Some_Old_Standards.html
            </guid>
            <description>
                &lt;p&gt;I had overlooked a few standard optimizations which I should have included from the beginning:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cache Homes&lt;/strong&gt; -- This included telling the xdoclet-generated utility classes to cache homes they lookup and to explicitly code my ejbCreate() to cache homes of my entities in the session facade.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use DAO to bypass EJB finders when analyzing large lists&lt;/strong&gt; -- Getting the latest comment.&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;I have to say, it feels pretty fast again -- I&apos;ll have to go screwing it up again real soon.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                PostgreSQL Tuning: BIGINT
            </title>
            <link>
                https://www.hjsoft.com/blog/PostgreSQL_Tuning_BIGINT.html
            </link>
            <pubDate>Tue, 6 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/PostgreSQL_Tuning_BIGINT.html
            </guid>
            <description>
                &lt;p&gt;I luckily stumbled upon this  &lt;a href = &quot;http://fishbowl.pastiche.org/2004/06/17/i_love_postgres&quot;&gt;blog about PostgreSQL indexing&lt;/a&gt;.  I never really considered that it would be my database holding me back much, but it seems I should really analyze the queries my app server is creating.&lt;/p&gt;
&lt;p&gt;Basically, searching against &lt;code&gt;BIGINT&lt;/code&gt; keys doesn&apos;t take advantage of the index, since it has to cast internally from &lt;code&gt;INT4&lt;/code&gt; (integer) in the query to an &lt;code&gt;INT8&lt;/code&gt; (bigint).  I&apos;m using &lt;code&gt;java.lang.Long&lt;/code&gt; in my Java code for my keys, so I wouldn&apos;t want to just drop back to &lt;code&gt;integer&lt;/code&gt; in the database -- I could get away with it for now, but it&apos;s not very future-proof.&lt;/p&gt;
&lt;p&gt;In spite of &lt;code&gt;NUMERIC(18,0)&lt;/code&gt; index scans being slower than &lt;code&gt;BIGINT&lt;/code&gt; index scans, they&apos;ll beat out sequential scans of &lt;code&gt;BIGINT&lt;/code&gt;, which is what my blog is doing now.  I&apos;m testing it out in my development copy, but I&apos;ll probably have to test it in the production version of my blog to get a real feel for it.&lt;/p&gt;
&lt;p&gt;At this point, I must settle for &lt;code&gt;NUMERIC(18,0)&lt;/code&gt; instead of casting my input parameters to bigint, since I know of no way to tune my queries created by JBoss&apos; CMP implementation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (6 July 2004):&lt;/strong&gt; I haven&apos;t done any real benchmarks, but I really must wonder how to really test the plan for prepared statements in Postgres&apos; JDBC driver.  Many of the links I had read referred to Postgres 7.3, but I&apos;m running 7.4 these days.  Using Numeric also didn&apos;t feel much faster, so I&apos;m trying Integer now, but I may revert back to Bigint down the road, since I really am using Long in my java code.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java Generics
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_Generics.html
            </link>
            <pubDate>Sun, 4 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_Generics.html
            </guid>
            <description>
                &lt;p&gt;I had expressed in an &lt;a href = &quot;http://www.hjsoft.com/blog/link/Java_2_SDK_1.5_Language_Changes&quot;&gt;old article&lt;/a&gt; that I didn&apos;t see the point of generics.  Having started reading Design Patterns, I do actually see the point now.&lt;/p&gt;
&lt;p&gt;I had originally thought I could just programatically enforce the types of objects I insert into my collections, but it&apos;s not primarily  about enforcing what&apos;s in the collection. It&apos;s more about being able to recognize the collection by the types it contains.  I can have a method which accepts a List of ObjectX and not a List of ObjectY (those could be handled by another method by the same name but with a different parameterized input type).  Enforcing what gets inserted into the list just helps facilitate using that signature later.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Slowly Declining State of Email
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Slowly_Declining_State_of_Email.html
            </link>
            <pubDate>Fri, 2 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Slowly_Declining_State_of_Email.html
            </guid>
            <description>
                &lt;p&gt;&lt;strong&gt;Losing Faith in Email&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I used to insist that email was the best way to communicate with me, and I still do for the most part.  I hate being on the telephone, because it doesn&apos;t allow me to time shift comprehending and responding to whatever the person on the other side requests -- I have to do it on their schedule, not mine.&lt;/p&gt;
&lt;p&gt;Unfortunately, I&apos;ve slowly been slipping into the mindset of disregarding email for anything important due to the spam problem.  As I have no other preferred form of communication for passing important messages and making important plans, I&apos;ve just stopped doing anything that requires any reliability.&lt;/p&gt;
&lt;p&gt;As everyone has experienced, the spam problem is that you completely lose any meaningful email in the glut of garbage.  It&apos;s a wonder anybody finds anything.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Providers Deal with Spam&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In an attempt to make email usable again and conserve resources (disk, bandwidth, etc), many email providers started blocking hosts they knew were sending or relaying spam.  It&apos;s too much of a job for each host to maintain their own lists, so they build shared black lists of spamming hosts, and this forces legitimate email hosts who want to send real email to clean up their acts to get their names off the list.  Another tactic for dealing with the mass of spam hosts is to block entire network subnets.&lt;/p&gt;
&lt;p&gt;That brings me to my problem.  I&apos;m not a spammer, but I sit on Comcast&apos;s network, so some hosts block my email, since it comes from this network.  To ensure my email gets out, I had to tell my sendmail to send everything out through Comcast&apos;s relay (my SMARTHOST).  Using my mailertable, I could make exceptions to the SMARTHOST on a per-host basis.  This allows me to be an MX host for another host.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Relaying and DSN&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The spammers have continued to get more sophisticated (hence degrading email even more) by checking MX records and sending email directly to those machines, knowing that relays will eventually try to forward the message along.  The relay accepts it and tries to forward it along, and when it bounces off the intended host (for being to an unknown user, being known spam, etc),  the relay (my machine) generates a Delivery Status Notification (DSN) to the originating account which never exists either.  The DSN sits there in the queue trying to be sent for however long the host is configured to queue messages.  Some of us have seen the piles and piles of DSN mail in our mail queues.&lt;/p&gt;
&lt;p&gt;To complicate the problem in MY case.  I&apos;m using my smarthost to try to send all these DSNs.  I effectively flood Comcast&apos;s mail host until it stops talking to me for a bit (effectively rate limiting me.)  My legitimate outgoing mail now gets stuck as well, since my smarthost won&apos;t send anything.  Spam is not only slowing my incoming mail but also my outgoing mail!  I&apos;m not sure what to do to eliminate the DSNs.  I&apos;ve read that fake DSNs should not be sent by user agents because it&apos;s just clutter and wasted bandwidth, but I&apos;m seeing that real DSNs are similarly wasted bandwidth when spam senders never exist.&lt;/p&gt;
&lt;p&gt;I&apos;d like to figure out how to get sendmail to not generate DSN for relayed mail, but I haven&apos;t found it yet.  I&apos;m toying with a script to grep out mail in the queue from MAILER-DAEMON, and just outright delete it from the queue, since it most likely will never get anywhere when it&apos;s failed once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Client Filtering&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As they&apos;ve turned our mail servers against us, they also work to turn our client-side Bayesian filters to do bad things as well.  By embeding gobs of legitimate sounding literature or whatever into hidden parts of spam emails, they confuse our filters into thinking these words are commonly part of spam, and our filters start deleting email we actually want to see.&lt;/p&gt;
&lt;p&gt;On the other side, anyone sending me HTML email probably ends up deleted.  This could be my bank, credit card companies, ebay, whatever.  This is what&apos;s led me to expect my bank to just call me, not email me when they need important things.  (Hell, postal mail suffers the same thing.  I throw so much of it away, because I can&apos;t tell -- it all says &quot;Important information enclosed&quot;.  I figure they&apos;ll just call if it really matters, and I&apos;ll send them to voicemail, because I never answer the phone either. ;) )&lt;/p&gt;
&lt;p&gt;So, there&apos;s no way to reliably contact me.  I generally ignore people in the street yelling too, so if you want to contact me, put it in your blog or something, because who knows if and when I&apos;ll find any other correspondence.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Switch to Mozilla or the Terrorists Will Win!
            </title>
            <link>
                https://www.hjsoft.com/blog/Switch_to_Mozilla_or_the_Terrorists_Will_Win.html
            </link>
            <pubDate>Fri, 2 Jul 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Switch_to_Mozilla_or_the_Terrorists_Will_Win.html
            </guid>
            <description>
                &lt;p&gt;The Department of Homeland Security says we should &lt;a href = &quot;http://story.news.yahoo.com/news?tmpl=story&amp;cid=74&amp;e=3&amp;u=/cmp/20040702/tc_cmp/22103407&quot;&gt;stop using MSIE&lt;/a&gt;. (Ugh, they&apos;ve absorbed CERT?!  hmmm, but that&apos;s another story, I guess.)&lt;/p&gt;
&lt;p&gt;I happen to agree this time, but I&apos;m still awaiting the end of the world that&apos;s been promised every holiday weekend since September of 2001 or since 1 January 2000 for that matter.  I definitely have a morbid curiosity about how bad the world can get because of people using IE.  I wouldn&apos;t even bother with the big fat &quot;You were warned!&quot; that could be due.  I&apos;d just smile and walk to where ever I need (because the gas pumps will be shutdown in all the chaos).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                GoF Design Patterns
            </title>
            <link>
                https://www.hjsoft.com/blog/GoF_Design_Patterns.html
            </link>
            <pubDate>Wed, 30 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/GoF_Design_Patterns.html
            </guid>
            <description>
                &lt;p&gt;I ordered a paperback copy of the &quot;Gang of Four&quot; &lt;a href = &quot;http://www.aw-bc.com/catalog/academic/product/0,1144,0201633612,00.html&quot;&gt;Design Patterns&lt;/a&gt; textbook from an ebay vendor.  This is an attempt to make myself smart again, so I&apos;m anxiously awaiting its arrival in the mail.  I feel like I&apos;ve been falling behind in higher-order thought.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Looking at Blojsom
            </title>
            <link>
                https://www.hjsoft.com/blog/Looking_at_Blojsom.html
            </link>
            <pubDate>Wed, 23 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Looking_at_Blojsom.html
            </guid>
            <description>
                &lt;p&gt;Last night at the &lt;a href = &quot;http://www.harrisburgjug.org/&quot;&gt;Harrisburg JUG&lt;/a&gt; meeting, &lt;a href = &quot;http://www.petmystone.com/&quot;&gt;Tim Stone&lt;/a&gt; presented his development copy of the JUG blog preview based on &lt;a href = &quot;http://blojsom.sf.net/&quot;&gt;Blojsom&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Blojsom is very easy to install and get running, since it&apos;s file-backed by default.  I got an instance running in my JBoss (well, Tomcat was only needed) instance in about 20 minutes.&lt;/p&gt;

&lt;p&gt;I don&apos;t much care for the file-backed storage though.  It just feels like a scalability/synchronization problem.  All the storage backend is abstracted behind a fetcher inteface, though, so I could really be tempted to create a fetcher to get data from the EJBs that run my current weblog.&lt;/p&gt;
&lt;p&gt;As I&apos;ve said in the past, I&apos;d start working to extend these other blog packages, if I wasn&apos;t using mine to learn all these technologies.  I could, on the other hand, start using Blojsom or Roller for my weblog, and pick up another project to learn Struts.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Now TrackBack Pingable
            </title>
            <link>
                https://www.hjsoft.com/blog/Now_TrackBack_Pingable.html
            </link>
            <pubDate>Fri, 18 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Now_TrackBack_Pingable.html
            </guid>
            <description>
                &lt;p&gt;After lots and lots of work in several directions as &lt;a href = &quot;http://www.hjsoft.com/blog/link/Blog_Refactoring_No_More_Action_Chaining&quot;&gt;mentioned previously&lt;/a&gt;, I have full TrackBack support, so people can ping my weblog as well.  I&apos;m up way too late, but I think it&apos;s worthwhile.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                G4TechTV Impressions
            </title>
            <link>
                https://www.hjsoft.com/blog/G4TechTV_Impressions.html
            </link>
            <pubDate>Fri, 18 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/G4TechTV_Impressions.html
            </guid>
            <description>
                &lt;p&gt;Since the merge of TechTV and G4, I&apos;ve been trying to watch &lt;a href = &quot;http://www.g4techtv.com/&quot;&gt;G4TechTV&lt;/a&gt; a bit.  Mostly the old TechTV carry-overs are worthwhile and the rest are not so much.  I watched quite a bit last night while finishing up my major blog refactoring.  Actually, it&apos;s pretty much the only TV I&apos;ve been watching over the past week (10pm-1am).&lt;/p&gt;

&lt;p&gt;I&apos;ve frequently watched &lt;a href = &quot;http://www.g4techtv.com/show.aspx?show_key=44&quot;&gt;Anime Unleashed&lt;/a&gt; which has been featuring the &lt;a href = &quot;http://www.cjas.org/~leng/open.htm&quot;&gt;Serial Experiments Lain&lt;/a&gt; series, which I absolutely love.&lt;/p&gt;
&lt;p&gt;A recent &lt;a href = &quot;http://www.g4techtv.com/episode.aspx?episode_key=1314&quot;&gt;Icons episode about the history of Tetris&lt;/a&gt; was incredibly educational -- just like good old TechTV.  I&apos;m almost positive this one had to come from TechTV.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://www.g4techtv.com/episode.aspx?episode_key=1466&quot;&gt;Filter&apos;s Controversial Games&lt;/a&gt; episode was entertaining more as a social commentary.  It was probably about the most informative thing G4 could put together.  It had the scantly-clad hostess chick in leather with a whip -- mostly funny.  Carmageddon made the countdown, which may have been one of the only games I had played.&lt;/p&gt;
&lt;p&gt;Martin Sargent&apos;s &lt;a href = &quot;http://www.g4techtv.com/show.aspx?show_key=42&quot;&gt;Unscrewed &lt;/a&gt; is entertaining enough, but not required viewing by any stretch of the imagination.  It&apos;s just designed to be shocking.&lt;/p&gt;
&lt;p&gt;They&apos;re still running &lt;a href = &quot;http://www.g4techtv.com/show.aspx?show_key=43&quot;&gt;Fresh Gear&lt;/a&gt;, which is, again, decent programming from TechTV.  This along with X-Play could be closer to the bottom of the TechTV barrel.&lt;/p&gt;
&lt;p&gt;I haven&apos;t really caught any of the Screensavers on the new channel, though.  It&apos;s too bad &lt;a href = &quot;http://leo.typepad.com/&quot;&gt;Leo Laporte&lt;/a&gt; couldn&apos;t stay.&lt;/p&gt;
&lt;p&gt;Having tried to find all these links to their site and all, I&apos;ve realized that they don&apos;t have much content on there, and it&apos;s quite difficult to navigate.  It really does amount to &quot;We mentioned this game in the show, here&apos;s a link to buy it.&quot;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Blog Refactoring: No More Action Chaining
            </title>
            <link>
                https://www.hjsoft.com/blog/Blog_Refactoring_No_More_Action_Chaining.html
            </link>
            <pubDate>Fri, 18 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Blog_Refactoring_No_More_Action_Chaining.html
            </guid>
            <description>
                &lt;p&gt;I previously found that &lt;a href = &quot;http://www.hjsoft.com/blog/link/Struts_Action_Chaining_Is_So_Damn_Tempting&quot;&gt; Struts action chaining is bad&lt;/a&gt;, but I forged on implementing &lt;a href = &quot;http://www.hjsoft.com/blog/link/TrackBack_Support&quot;&gt;TrackBack support&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now I&apos;m stuck in the middle of trying to &lt;i&gt;accept&lt;/i&gt; TrackBacks and completely refactoring my web tier logic to avoid action chaining completely.  This means lots of code still unfit to check back into CVS. :)&lt;/p&gt;

&lt;p&gt;My refactoring could be a perfect opportunity to test out some &lt;a href = &quot;http://www.hjsoft.com/blog/link/Automatic_Refactoring&quot;&gt;refactoring tools&lt;/a&gt;, but that requires me to waste time trying to work in an IDE.  I&apos;m pulling all my methods for sticking data in the &lt;code&gt;HttpServletRequest&lt;/code&gt; to be displayed by JSP into their own View classes.  With a bit more thought, these can be coupled with actual JSP views as the one-stop method to populate everything a JSP needs to display properly.  Secondly, I&apos;m pulling other methods to retrieve and manipulate state data into Logic classes.  The standard Action can then get its form input, call a Logic method or 2 to do some state work, call the BlogDelegate (which calls EJB tier) to get or commit data, then call a few View methods to setup for the next JSP.  Similar Actions can just call the same methods in the same sequence instead of implementing the logic themselves, and I won&apos;t be tempted to chain to another Action, since I can just call the same Logic methods.&lt;/p&gt;
&lt;p&gt;The Logic methods include build ArticleRequests, evaluating paging, and finding cookie data.  The View methods mostly set Collections and Strings into the request, along with some formatting for display.  Since I&apos;m not using any refactoring tools besides, I blow things up then work to get them to compile again.  I&apos;m starting to see where a tool could be useful.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Artists and Programmers
            </title>
            <link>
                https://www.hjsoft.com/blog/Artists_and_Programmers.html
            </link>
            <pubDate>Wed, 16 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Artists_and_Programmers.html
            </guid>
            <description>
                &lt;p&gt;Fortune spit a nice little quote at me this morning:
&lt;i&gt;Everyone can be taught to sculpt: Michelangelo would have had to be
taught how not to.  So it is with the great programmers.&lt;/i&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JAAS: More to Learn
            </title>
            <link>
                https://www.hjsoft.com/blog/JAAS_More_to_Learn.html
            </link>
            <pubDate>Fri, 11 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JAAS_More_to_Learn.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.ftponline.com/javapro/&quot;&gt;JavaPro&lt;/a&gt; has a pretty extensive &lt;a href = &quot;http://www.ftponline.com/javapro/2004_06/magazine/features/kjones/default.aspx&quot;&gt;article on JAAS&lt;/a&gt; (Java Authentication and Authorization Service).  The idea is to have a pluggable authentication system, so your application doesn&apos;t have to implement it, and it can easily be changed later.  The article calls it &quot;simple&quot;, but I&apos;m not convinced just yet.  I need to study up on it a bit more.&lt;/p&gt;
&lt;p&gt;I had used it on my first successful personal J2EE application, my wedding website.  JBoss provided a couple JAAS modules, one of which was driven by database tables, so I could easily get it to look up users in my wedding guest table.  I hadn&apos;t realized it at the time, but that module was very JBoss-specific, and when I tried to do similar things in Weblogic, their DB module was much more complicated, and I couldn&apos;t quite figure it out.&lt;/p&gt;
&lt;p&gt;I looked into writing my own, but Weblogic&apos;s support for standard APIs didn&apos;t seem to be complete, and they relied upon some Weblogic-specific interfaces, so I became completely disgruntled with JAAS and abandoned it.  Maybe now that it&apos;s had a few years, it&apos;ll be better supported.  Of course, I&apos;d only be testing against JBoss these days, so I may not learn much new.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java Screensavers
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_Screensavers.html
            </link>
            <pubDate>Fri, 11 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_Screensavers.html
            </guid>
            <description>
                &lt;p&gt;Neat!  We can now easily &lt;a href = &quot;http://java.sun.com/developer/technicalArticles/J2SE/Desktop/saverbeans.html&quot;&gt;write screensavers in Java&lt;/a&gt; with this new little opensource package from Sun.&lt;/p&gt;
&lt;p&gt;The desktop will be ours finally!  After all those years of trying to crack the desktop market, Java will finally do it through screensavers -- &quot;Write once, waste cpu anywhere.&quot;&lt;/p&gt;
&lt;p&gt;I must admit, it is sort of curious, and will most likely be fun to see.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Forgetting the Science to Keep Up with Technology
            </title>
            <link>
                https://www.hjsoft.com/blog/Forgetting_the_Science_to_Keep_Up_with_Technology.html
            </link>
            <pubDate>Fri, 11 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Forgetting_the_Science_to_Keep_Up_with_Technology.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve spent the morning reading (and blogging), and I&apos;ve only found that all the things I&apos;m learning are just leading to more questions and the need to learn even more.  I feel as if I&apos;ve been ignoring the some of the higher thought processes of software design just to chase the low-level details of the latest technology.&lt;/p&gt;

&lt;p&gt;It started out with reading about &quot;&lt;a href = &quot;http://nat.truemesh.com/archives/000316.html&quot;&gt;Refuctoring&lt;/a&gt;&quot;, which led me to wonder why you&apos;d really need a tool to refactor code.  Via a short excursion into &lt;a href = &quot;http://www.netbeans.org&quot;&gt;Netbeans&lt;/a&gt; IDE (which I&apos;ve had on my disk for a while), I landed at Joshua Kerievsky&apos;s &lt;a href = &quot;http://industriallogic.com/xp/refactoring/catalog.html&quot;&gt;Refactoring to Patterns Catalog&lt;/a&gt; based on the book.&lt;/p&gt;
&lt;p&gt;I was still just trying to figure out what could be so complex that it couldn&apos;t be done by hand.  I recognized some of the ideas in the catalog, while others seemed loftier, but useful if I elevate my code to those stronger designs.  I doubt a tool could really introduce most of the more thoughtful patterns.&lt;/p&gt;
&lt;p&gt;When I was still studying the mechanisms of J2EE, I read the J2EE Patterns book, but I&apos;ve realized that much of it went over my head at the time.  I need to go back and reread it now that I have a strong basis.&lt;/p&gt;
&lt;p&gt;Now it seems I need to step back even further and refresh my knowledge of non-enterprise patterns as well.  As I tried to adapt to the less object-oriented EJB interfaces, I abandoned much of the benefits of object-oriented code.  I didn&apos;t realize that the whole OO system still exists underneath the EJB and behind the servlet.  Roller code opened my eyes to this recently as well.  I code so simply on the complex J2EE platform, and it&apos;s keeping my code from being reusable.  I&apos;m tempted to buy this &lt;i&gt;Refactoring to Patterns&lt;/i&gt; book, but I still never get around to reading everything in my list.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Automatic Refactoring
            </title>
            <link>
                https://www.hjsoft.com/blog/Automatic_Refactoring.html
            </link>
            <pubDate>Fri, 11 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Automatic_Refactoring.html
            </guid>
            <description>
                &lt;p&gt;I completely don&apos;t know what an automatic refactoring tool can do for me, but &lt;a href = &quot;http://nat.truemesh.com/archives/000316.html&quot;&gt;this account&lt;/a&gt; is more what I&apos;d expect.&lt;/p&gt;
&lt;p&gt;I don&apos;t use too many programming tools beyond Ant and vi(1), so I think really hard about everything and try to avoid refactoring, and if I end up doing any refactoring, it&apos;s by hand.  This could very well be the reason I get overwhelmed at times and wonder if I&apos;m doing things the right way.  I&apos;m tempted to grab Netbeans or Eclipse and just see what they can do to my projects automatically.  Maybe it&apos;ll lend some clarity, or maybe I&apos;ll break things or get hung up on not having &quot;vi keys&quot;. :)&lt;/p&gt;
&lt;p&gt;I wonder if with proper refactoring tools, I could more easily grow an application from simplicity to complexity. I&apos;ve just been starting with an overly-complex design to accomodate it later.  I&apos;d write my whole app in JSP first, then refactor the logic into servlets, then refactor the business logic into session beans, then refactor the data persistence into entity beans.  That doesn&apos;t sound so likely, but some middle ground could be more appropriate.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Thinking in Filesystems
            </title>
            <link>
                https://www.hjsoft.com/blog/Thinking_in_Filesystems.html
            </link>
            <pubDate>Wed, 9 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Thinking_in_Filesystems.html
            </guid>
            <description>
                &lt;p&gt;Since the latest &lt;a href = &quot;http://www.gnome.org/projects/nautilus/&quot;&gt;Gnome Nautilus&lt;/a&gt; upgrade and its change to a &lt;a href = &quot;http://www.bytebot.net/geekdocs/spatial-nautilus.html&quot;&gt;spatial navigation&lt;/a&gt;, I&apos;ve read glimpses of discussion about &lt;a href = &quot;http://www.livejournal.com/users/arvindn/2004/06/06/&quot;&gt;users working better when they don&apos;t need to think about filesystems&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From the day I first saw the spatial Nautilus screenshots, I thought to myself, isn&apos;t this sort of how old MS Windows showed us stuff?  It looks like cluttered piles of overlapping windows.  There must be more to it than seeing piles of overlapping &quot;objects&quot; representing directories.  I was so relieved when I found tree-based views in various file managers -- it flattened the view and made it quicker to navigate anywhere.&lt;/p&gt;
&lt;p&gt;The other thing I don&apos;t quite get yet is how I could &lt;i&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/i&gt; think in filesystems and directory structures.  Maybe I&apos;ve just been doing things the &quot;computer way&quot; for too long and can&apos;t think &quot;human&quot;.  Organizing my data in hierarchies and having control of what applications I use (not just magically start), and where they find their data just makes sense to me.  It also seems awfully presumptuous that someone else could provide integrated applications that do everything I want the way I want every time (in reference to apps seemlessly starting others to introduce this computing bliss).&lt;/p&gt;
&lt;p&gt;I&apos;ve actually made a point of firing up Nautilus every once in a while just to see if I&apos;ll  &quot;get it&quot;.  RhythmBox is another application that&apos;s trying to eliminate the filesystem dependency, but I &lt;i&gt;like&lt;/i&gt; Unix and filesystems, so now it&apos;s making it difficult to find my music by my filesystem-based organization.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Disclaimer: I use &lt;code&gt;vi&lt;/code&gt; in Linux (and Windows) to code J2EE applications -- I have a certain level of comfort with bare-metal, unguided access to complexity.&lt;/i&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JOnAS: JBoss Alternative?
            </title>
            <link>
                https://www.hjsoft.com/blog/JOnAS_JBoss_Alternative.html
            </link>
            <pubDate>Tue, 8 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JOnAS_JBoss_Alternative.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://jonas.objectweb.org/&quot;&gt;JOnAS 4.1&lt;/a&gt; has been released and looks pretty advanced by the descriptions -- J2EE 1.4 support.  I&apos;ve also been curious about Tomcat 5, which it has integrated already.  JBoss is getting a little stale in these areas, but it &lt;i&gt;is&lt;/i&gt; working.&lt;/p&gt;
&lt;p&gt;I don&apos;t even know if XDoclet has support for it, but it may be interesting to download it and see how it performs in relation to the JBoss 3.2.3 server I usually use.&lt;/p&gt;
&lt;p&gt;I got it running pretty quickly.  It&apos;s memory footprint looks similar to JBoss.  The web console looks very nice at first glance -- actual monitoring with updating graphs, etc.  I haven&apos;t figured out how to deploy to it yet, and my enthusiasm has slipped as I&apos;m faced with figuring out how to create new message queues and data sources.  I generally like to do this for myself in the config files, but maybe I&apos;ll have to take a serious look at the console.  It&apos;s really not that big of a deal to type the stuff interactively as opposed to copying or cutting and pasting config files.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TrackBack Support
            </title>
            <link>
                https://www.hjsoft.com/blog/TrackBack_Support.html
            </link>
            <pubDate>Sun, 6 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TrackBack_Support.html
            </guid>
            <description>
                &lt;p&gt;I have my first TrackBack ping support built into my weblog now.  When saving the article, if the &quot;Ping TrackBack&quot; checkbox is checked, the save action will send a message to the TrackBackPing MDB.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://www.ryangrier.com/&quot;&gt;Ryan&lt;/a&gt; has seen a couple of my tests in his weblog, since he actually implements trackback, and I figured he wouldn&apos;t mind too much.  Thanks Ryan.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                History of Electronic Watches
            </title>
            <link>
                https://www.hjsoft.com/blog/History_of_Electronic_Watches.html
            </link>
            <pubDate>Fri, 4 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/History_of_Electronic_Watches.html
            </guid>
            <description>
                &lt;p&gt;I stumbled upon an interesting little read about &lt;a href = &quot;http://www.si.edu/lemelson/Quartz/index.html&quot;&gt;Quartz Watches&lt;/a&gt; and how they took over the world.  There&apos;s even mention of Hamilton of Lancaster, PA producing the &lt;a href = &quot;http://www.si.edu/lemelson/Quartz/coolwatches/hamilton.html&quot;&gt;first battery-powered watch&lt;/a&gt; to start the movement toward today&apos;s 87% penetration of digital watches into the watch market.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Lancaster Emergency Response
            </title>
            <link>
                https://www.hjsoft.com/blog/Lancaster_Emergency_Response.html
            </link>
            <pubDate>Fri, 4 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Lancaster_Emergency_Response.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.rockpointonline.com/&quot;&gt;Todd&lt;/a&gt; (not &lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt;, because he never tells me anything I guess) showed me the public web page for Lancaster&apos;s &lt;a href = &quot;http://www.lcwc.co.lancaster.pa.us/lcwc/lcwc/publiccad.asp&quot;&gt;computer-aided dispatch (CAD)&lt;/a&gt; system.  This is definitely interesting for information junkies.&lt;/p&gt;

&lt;p&gt;Emergency dispatch has come a long, long way from my radio scanner days.  Several years ago, I had developed a bit of reporting software for fire incident tracking and quarterly reporting, then web-enabled it later.  I never even could have imagined really having this information in real-time.  I&apos;d love to work with these systems again.  I can add this to my list of things I&apos;d like to implement just for the sake of doing it myself  (along with weblog software, bug tracking, the rave database, etc).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Break Loose
            </title>
            <link>
                https://www.hjsoft.com/blog/Break_Loose.html
            </link>
            <pubDate>Wed, 2 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Break_Loose.html
            </guid>
            <description>
                &lt;p&gt;On Saturday night, Claire and  I actually got to go out to &lt;a href = &quot;http://www.kidzthatgroove.com/fliershtml/2004/jerramey/breakloose.htm&quot;&gt;Break Loose&lt;/a&gt; at York&apos;s Waterway Raw Bar and Grill.  It was a nice venue -- plenty of room in 3 separate areas.  I&apos;ve been out of the scene mostly, so all the music seemed pretty new to me.  Since I&apos;m a huge dnb head, and there was none of that here, I wasn&apos;t compelled to dance myself to extreme exhaustion.&lt;/p&gt;
&lt;p&gt;It looks like &lt;a href = &quot;http://www.ultraworld.net/&quot;&gt;Ultraworld&lt;/a&gt; has Starscape 2004 coming up in July.  &lt;a href = &quot;http://www.hjsoft.com/blog/showArticle.java?id=35&quot;&gt;Last year&apos;s&lt;/a&gt; was worthwhile, so maybe I&apos;ll try to get to this one as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Interaction with Weblogs
            </title>
            <link>
                https://www.hjsoft.com/blog/Interaction_with_Weblogs.html
            </link>
            <pubDate>Wed, 2 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Interaction_with_Weblogs.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been coding this weblog just for practice with all the fun J2EE stuff, but as I get into coding some of the standard interactions with other weblogs (Trackback), I don&apos;t always care to figure out every little detail -- it&apos;s just not as important to me, so I&apos;ve been browsing other weblog software packages to see how they do it and using that code for reference.&lt;/p&gt;

&lt;p&gt;&lt;a href = &quot;http://rollerweblogger.org/&quot;&gt;Roller&lt;/a&gt; looks pretty slick.  It&apos;s all implemented in the web tier using Struts, so it&apos;s of particular interest.  It even uses Xdoclet.  Roller doesn&apos;t do anything in EJB, so at that point, it&apos;s very different from mine.  If I wasn&apos;t studying Struts so intently right now, I could be tempted to take Roller and reimplement the backend in EJB (session and entity), and let the Roller code-base take care of the web side which it does well already.  I still expect Roller to be a great reference for me to learn, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gnome 2.6 in Debian
            </title>
            <link>
                https://www.hjsoft.com/blog/Gnome_2.6_in_Debian.html
            </link>
            <pubDate>Tue, 1 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gnome_2.6_in_Debian.html
            </guid>
            <description>
                &lt;p&gt;Gnome 2.6 has been migrating slowly into Debian unstable over the past couple days.  I had to remain patient for a bit as my desktop was minorly broken, but it seems to be intact now.  I think most the problems came from the XFree86 upgrade in reality.&lt;/p&gt;

&lt;p&gt;The Gnome config daemon was dying randomly, because it couldn&apos;t load the bad keymaps distributed with X, and the system monitor was broken at one point due to missing libraries.  Unthemed GTK isn&apos;t very exciting, so I was pleased when the config daemon came back.&lt;/p&gt;
&lt;p&gt;The new keyboard mapping applet is much more featureful and friendly than the old one.  I think the less experienced users will find it useful.&lt;/p&gt;
&lt;p&gt;I also noted a few games on my system recently as well.  I&apos;ve always been a nut for &lt;a href = &quot;http://www.frozen-bubble.org/&quot;&gt;Frozen Bubble&lt;/a&gt;, but I had rediscovered Same Gnome this weekend and SuperTux, which is a side-scroller like Super Mario Brothers.  I&apos;m really not good at playing games, though.  I thought it would be a nice change, but I keep thinking the whole time I&apos;m playing that I should be coding or fine-tuning some other system I use.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Renewed Backing for Faith-based Initiatives
            </title>
            <link>
                https://www.hjsoft.com/blog/Renewed_Backing_for_Faith-based_Initiatives.html
            </link>
            <pubDate>Tue, 1 Jun 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Renewed_Backing_for_Faith-based_Initiatives.html
            </guid>
            <description>
                &lt;p&gt;Bush has &lt;a href = &quot;http://news.yahoo.com/news?tmpl=story&amp;u=/ap/20040601/ap_on_el_pr/bush_faith_based_1&quot;&gt;renewed his push to fund faith-based organizations&lt;/a&gt; to help the less fortunate.  Way back when this first came up I very liberally thought to myself, &quot;Sure, if they want to do the job, fine,&quot; but these days I don&apos;t support it.  At every step, Bush is trying to erase the lines between religion and government annd hand this country to the religious right.  This is just another step, and he must be stopped.  They can do the job with their own money, or we can come up with our own social programs without relying on faith groups as a crutch.&lt;/p&gt;
&lt;p&gt;Letting the government fund faith groups is just too gray.  I can&apos;t see how the faith groups could actually take the money in realiity, because it would come with an expectation of equal treatment, employment, etc of people their group probably condemns and would otherwise discriminate.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                And Someone Pays These People
            </title>
            <link>
                https://www.hjsoft.com/blog/And_Someone_Pays_These_People.html
            </link>
            <pubDate>Fri, 28 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/And_Someone_Pays_These_People.html
            </guid>
            <description>
                &lt;p&gt;Digging through Google referers, I found a forum link of someone &lt;a href = &quot;http://www.experts-exchange.com/Web/Web_Languages/JSP/Q_20720211.html&quot;&gt;asking for a Perl to JSP conversion tool&lt;/a&gt;.  &lt;i&gt;*Sigh*&lt;/i&gt;  How can you not recognize that it&apos;s a completely different programming paradigm (OO), or how about just a completely different syntax for function calls, etc?&lt;/p&gt;
&lt;p&gt;If anyone had actually bothered to respond and tell them that they actually need to code, not just take 10 minutes and feed the large and complex source code to a tool (step 3: Profit!), I bet the next question would be, &quot;How do I write JSP?&quot;.&lt;/p&gt;
&lt;p&gt;The worst part is that they probably already have the contract to do this job with their unwitting customer.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                IBM&apos;s J2EE Best Practices
            </title>
            <link>
                https://www.hjsoft.com/blog/IBM_J2EE_Best_Practices.html
            </link>
            <pubDate>Wed, 26 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/IBM_J2EE_Best_Practices.html
            </guid>
            <description>
                &lt;p&gt;IBM has a list of &lt;a href = &quot;http://www-106.ibm.com/developerworks/websphere/techjournal/0405_brown/0405_brown.html?ca=dgr-lnxw02J2EEtop12&quot;&gt;J2EE Best Practices&lt;/a&gt;, and I agree with the whole thing at every point, though I must admit that I haven&apos;t followed it strictly.  I haven&apos;t been using unit tests or J2EE container security on recent projects.&lt;/p&gt;

&lt;p&gt;Point #5, &lt;i&gt;Build what you know&lt;/i&gt; is my number one tip right now given my current work environment.   Some people are trying to design an entire subsystem based on several complex structures of queues and message-driven beans when we&apos;ve never even seen &lt;strong&gt;one&lt;/strong&gt; in action.  We have a good bit to learn here, and we should really do this in a few iterations and evolve it as necessary.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Comcast Dealing with Spam
            </title>
            <link>
                https://www.hjsoft.com/blog/Comcast_Dealing_with_Spam.html
            </link>
            <pubDate>Tue, 25 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Comcast_Dealing_with_Spam.html
            </guid>
            <description>
                &lt;p&gt;Comcast is trying to clean up spam coming from their networks without the blanket tactics of blocking all outgoing port 25 connections.  Instead, they&apos;re looking to &lt;a href = &quot;http://news.com.com/Attack+of+Comcast&apos;s+Internet+zombies/2010-1034_3-5218178.html&quot;&gt;just block it at individual cablemodems&lt;/a&gt;.  I&apos;m not a virused up spam-zombie, so I should stay open.  Comcast continues to do well by me -- they don&apos;t suck.&lt;/p&gt;
&lt;p&gt;Unfortunately, I still need to send most my mail through their mail servers, since some hosts out there are blocking anything coming from Comcast&apos;s dynamic IP range.  It&apos;s nice I can at least make the exceptions when I want, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Inspiron 3800 Keyboards Are Garbage
            </title>
            <link>
                https://www.hjsoft.com/blog/Inspiron_3800_Keyboards_Are_Garbage.html
            </link>
            <pubDate>Tue, 25 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Inspiron_3800_Keyboards_Are_Garbage.html
            </guid>
            <description>
                &lt;p&gt;I really don&apos;t think I compute too much, but I keep wearing out keyboards on my Inspiron 3800.  Luckily Ebay keeps me stocked in replacement parts.  I just dropped a 3rd replacement keyboard into the machine, and I expect this one to eventually wear like all the others.  The springs get loose and it starts double typing or not typing some keys.&lt;/p&gt;
&lt;p&gt;Now that I have 2 defunct keyboards, I can take the less-used springs from the oldest and replace the worn ones on the other keyboard.  Maybe I&apos;ll be able to rebuild them into one working keyboard, and I&apos;ll avoid hitting Ebay a bit longer.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Struts Action Chaining Is So Damn Tempting
            </title>
            <link>
                https://www.hjsoft.com/blog/Struts_Action_Chaining_Is_So_Damn_Tempting.html
            </link>
            <pubDate>Sun, 23 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Struts_Action_Chaining_Is_So_Damn_Tempting.html
            </guid>
            <description>
                &lt;p&gt;The Chain of Responsibility pattern is so useful for what I&apos;m doing.  I&apos;m displaying a blog article, its associated comments, and a form to post more comments.  I implement it as a ShowArticle action, which upon success forwards to ListComments, and that forwards to the view JSP.  When I try to submit  a new comment, the SaveComment action grabs the ActionForm, twiddles it for a preview, then forwards back into this previously detailed sequence of actions.  This is called &lt;a href = &quot;http://www.jguru.com/faq/view.jsp?EID=1057613&quot;&gt;action chaining, and it&apos;s bad&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My first sequence works fine, because I&apos;m only committing changes to the request object, but I illustrated a problem when I tried to propogate changes to the Struts Action Form.  The ActionForm gets reset() to its submitted values for each action in the chain, so I lose my modifications from the first Action when it jumps to the second Action.&lt;/p&gt;
&lt;p&gt;Struts doesn&apos;t intend to implement the Chain of Responsibility pattern.  I&apos;m supposed to do that for myself in my business logic.  This means I need to be smarter about all this and refactor more of my presentation logic further down into the EJB business tier or into its own modularized logic tier between business and straight web stuff.  It&apos;s going to be a bit difficult to keep straight for a bit, but I&apos;ll figure it out, and it&apos;ll hopefully make maintenance easier.&lt;/p&gt;
&lt;p&gt;Once I get my preview stuff working nicely again and the tiers seperated further, I can get back to my track back message bean.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Webservices: Reading for Spare Time
            </title>
            <link>
                https://www.hjsoft.com/blog/WebServices_Spare_Time.html
            </link>
            <pubDate>Fri, 21 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/WebServices_Spare_Time.html
            </guid>
            <description>
                &lt;p&gt;Sometime when I have some spare time (yeah, right!), I&apos;d like to get around to studying this recommended tutorial on &lt;a href = &quot;http://java.sun.com/webservices/docs/1.3/tutorial/doc/index.html&quot;&gt;web services&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                First Message Driven Bean
            </title>
            <link>
                https://www.hjsoft.com/blog/First_Message_Driven_Bean.html
            </link>
            <pubDate>Fri, 21 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/First_Message_Driven_Bean.html
            </guid>
            <description>
                &lt;p&gt;I just implemented my first simple message-driven bean.  It&apos;s the shell of a trackback ping service which will be used to asynchronously (in the background) ping a weblog to which I&apos;m replying.  Right now it just prints parts of the article to the log, sleeps, prints some more -- just enough to see it&apos;s running in the background concurrently.&lt;/p&gt;
&lt;p&gt;It&apos;ll be a while until you see it here in the production code, since I&apos;ve not implemented or figured out actually trackback functionality yet, and I&apos;m in the middle of refactoring my Struts actions out into seperate logic beans, so I can eliminate some chaining.  I think I&apos;m learning enough to be dangerous at work though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Playing with Comments
            </title>
            <link>
                https://www.hjsoft.com/blog/Playing_with_Comments.html
            </link>
            <pubDate>Wed, 19 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Playing_with_Comments.html
            </guid>
            <description>
                &lt;p&gt;Doug likes when I point out blog enhancements, so I&apos;ll note that I&apos;ve added a little block on the left that shows the last comment posted to any article.  I&apos;ve also made comments preview first, then the second time you hit &lt;i&gt;Submit&lt;/i&gt;, it&apos;ll save it.  This should keep Doug from posting really badly formatted HTML in the future.&lt;/p&gt;


&lt;p&gt;I&apos;ve also pulled many of the field labels and java block comment-style border characters into the application.properties file, so they can be made to go away or change if desired. (If the darkside gets me and I want to make it look like VB, I can change the borders to apostrophe characters.)&lt;/p&gt;
&lt;p&gt;Next, I think I&apos;ll look into implementing metadata (users, topics, links) management, so some of this can be made more dynamic, or maybe implement &lt;i&gt;trackback&lt;/i&gt; to help link articles together, since I&apos;m often commenting or referring to others&apos; weblogs.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux 2.6.6
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_2.6.6.html
            </link>
            <pubDate>Wed, 19 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_2.6.6.html
            </guid>
            <description>
                &lt;p&gt;Linux 2.6.6 was released recently, and there looked to be some interesting enhancements included.  The first thing that caught my eye was the option for a 4KiB stack instead of 8KiB.  This is designed specifically for machines running a large number of threads, which is common with java app servers.  I can&apos;t say I&apos;ve noticed anything too different here, though.  Maybe my long-term swap usage will be lower with my JBoss server running.  It&apos;s still occupying the usual ~300MiB of virtual memory.&lt;/p&gt;
&lt;p&gt;The surprise feature is that laptop mode has been merged into the kernel.  I had looked at this patch previously, but my laptop didn&apos;t really give it a chance to spin down the drive.  It actually seems to work these days, and it can spend a considerable amount of time spun down.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Update (19 May 2004):&lt;/strong&gt; It seems that the native FIR IRDA driver (smcc_ircc) is magically now working and finding the right base I I/O addresses.  I&apos;ll have to see if it might communicate faster with my phone now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                1992 Toyota Corolla For Sale
            </title>
            <link>
                https://www.hjsoft.com/blog/1992_Toyota_Corolla_For_Sale.html
            </link>
            <pubDate>Tue, 18 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/1992_Toyota_Corolla_For_Sale.html
            </guid>
            <description>
                &lt;p&gt;We bought Claire a brand new Nissan Quest, so we need to get rid of her old car.  It&apos;s an automatic with working AC, and I&apos;m getting it inspected, so it&apos;ll be current until next summer.  We&apos;re selling it for $1000.&lt;/p&gt;
&lt;p&gt;If you know anyone who would be interested drop me an email or give me a call.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                More AOP Reading
            </title>
            <link>
                https://www.hjsoft.com/blog/More_AOP_Reading.html
            </link>
            <pubDate>Thu, 13 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/More_AOP_Reading.html
            </guid>
            <description>
                &lt;p&gt;I think I understand that duplicate functionality found in multiple methods, like logging is called a &lt;i&gt;crosscutting concern&lt;/i&gt;.  The simple thing to do is to cut and paste it all over your code, and otherwise make a huge mess of your code base.  This is obviously undesirable, so we need a way to encapsulate these behaviors into their own modules called &lt;i&gt;advices&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;I understand the need all too well, but I haven&apos;t grasped the environment yet.  I have another article here about &lt;a href = &quot;http://www.onjava.com/pub/a/onjava/2004/05/12/aop.html&quot;&gt;profiling with AOP&lt;/a&gt;, and its slow start and link to a previous article look promising for cracking this thing wide open for me.&lt;/p&gt;

&lt;p&gt;I just haven&apos;t figured out if this is more of a methodology for me to implement in my code in my own way, or does the implementation lie only in a product I should learn and use (Aspectwerkz, AspectJ, JBoss AOP)?  It&apos;s very much like when I wanted to move from Perl to JSP for web development.  I could plug all this JSP code into my html, rename it &lt;i&gt;.jsp&lt;/i&gt;, and drop it on my Apache web server, but that obviously didn&apos;t run it.  Before even getting started, I had to find a container and start thinking in the terms of a container running my code.  I found Tomcat, and I was in business.  I had to take another leap when I started reading about having my JSPs call EJB.  After figuring out that Tomcat couldn&apos;t run it for  me, I found JBoss.  AOP will be another container leap, I think.&lt;/p&gt;
&lt;p&gt;Trying to think in AOP but stick with my normal APIs, I&apos;ve actually ended up implementing a proxy-based decorator pattern driven by dynamically reloaded properties files.  This allows me to wrap layers of proxies around a core functionality.  Specifically, this allows me to dynamically configure the wrapping of static classes around method invocations of a query manager.  It feels versatile, but sticks to the familiar static strong typing.  I realize it&apos;s not  AOP, though, since a method still remains my smallest unit of execution.&lt;/p&gt;
I expect I&apos;ll find that AOP is going to based on something overly simplistic like a preprocessor substituting in code bits at compile time, or a framework which uses BCEL to plug the functionality right into the bytecode of my compiled classes as they run.  That&apos;s my impression at this point -- I&apos;ll have yet another layer added somewhere to implement this.&lt;/p&gt;
&lt;p&gt;That brings me to another concern of eventually introducing that last layer that sends a project spiraling to its death do to complexity making it too difficult to ever debug or maintain.  I&apos;ve left this Pandora&apos;s box sealed for now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Quiet Nights
            </title>
            <link>
                https://www.hjsoft.com/blog/Quiet_Nights.html
            </link>
            <pubDate>Tue, 11 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Quiet_Nights.html
            </guid>
            <description>
                &lt;p&gt;I know &lt;a href = &quot;http://www.inktank.com/AT/index.cfm?nav=981&quot;&gt;this feeling&lt;/a&gt; at times, especially after Paige has had a couple consecutive rough nights.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Saving Bandwidth
            </title>
            <link>
                https://www.hjsoft.com/blog/Saving_Bandwidth.html
            </link>
            <pubDate>Mon, 10 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Saving_Bandwidth.html
            </guid>
            <description>
                &lt;p&gt;My weblog seems to load slowly over the cablemodem, so I was investigating a bit and found that it was tallying up 76KiB for the whole page.  This was considerably larger than most other pages, like other weblogs or even the busier yahoo.com.&lt;/p&gt;

&lt;p&gt;One trick I noted at yahoo was that they eliminate all white space.  This is probably a good practice, but I couldn&apos;t bare to do it in my actual JSP code -- It would just be too messy for development purposes, but I admit that it doesn&apos;t need to be there in the final page.&lt;/p&gt;
&lt;p&gt;JSP 1.2+ has an XML syntax which uses &lt;code&gt;&amp;lt;jsp:root&amp;gt;&lt;/code&gt; to encapsulate the entire page and necessitates other changes within the JSP.  I successfully applied this to the simplest of cases, my redirecting &lt;code&gt;index.jsp&lt;/code&gt;, but I had trouble with more complex examples.  Once you start using the XML syntax, the entire JSP file must become well-formed XML.  I ended up with lots of &lt;code&gt;&amp;lt;![CDATA[]]&amp;gt;&lt;/code&gt;s all over the place to escape HTML tags I wanted to construct from dynamic data, like this old style code:
&lt;br/&gt;
&lt;code&gt;&amp;lt;a href = &amp;quot;&amp;lt;%= request.getContextPath() + &amp;quot;/home&amp;quot; %&amp;gt;&amp;quot;&amp;gt;&lt;/code&gt;
&lt;br/&gt;
It got very ugly.  On top of that, the browser got the idea that the whole page was &lt;code&gt;text/xml&lt;/code&gt; instead of &lt;code&gt;text/html&lt;/code&gt; and refused to render it correctly.  I had to abandon it for now, even though it was successfully rendering the XML bits  nicely without the extra whitespace.&lt;/p&gt;
&lt;p&gt;While a filter could eliminate whitespace, I doubt it would ultimately work, since the whitespace would actually need to be preserved in content which uses &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; tags.  I had read a rumor that Tomcat may have such a functionality, but I haven&apos;t found it documented anywhere.  Lastly, I still hope to find a preprocessor ant task which can eliminate the whitespace in JSP files before they are packaged.  This would leave my source intact as I like to see it.&lt;/p&gt;
&lt;p&gt;My front-end Apache 2 server has the &lt;code&gt;deflate&lt;/code&gt; module loaded as well.  I would expect standard compression to lessen the effects of my extra whitespace, but I&apos;ve not proven to myself that it&apos;s actually working.&lt;/p&gt;
&lt;p&gt;The good news was that I managed to trim 30KiB from the file by eliminating the Struts &lt;code&gt;&amp;lt;html:javascript/&amp;gt;&lt;/code&gt; tag from the layout file, since I&apos;m not using any of the Struts Validation stuff yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Ah ha!  I had Apache&apos;s &lt;code&gt;mod_deflate&lt;/code&gt; loaded, but not enabled.  I can definitely tell a difference with it enabled, and it accomplishes the same thing that the GZip servlet filter does.  Implementing that compression at the application layer just doesn&apos;t seem quite right.  If it&apos;s something every application should have, then it should be applied at the web server level.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (10 May 2004):&lt;/strong&gt; More advice: don&apos;t skimp on the recommended configurations.  In particular, I&apos;ve added these lines:
&lt;pre&gt;
SetEnvIfNoCase Request_URI \
   \.(?:gif|jpe?g|png|js|css)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
&lt;/pre&gt;
Without these, I was getting random failures and corruptions in mozilla-firefox, since it seemed to sometimes not get the whole gzip stream.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TechTV Gutted
            </title>
            <link>
                https://www.hjsoft.com/blog/TechTV_Gutted.html
            </link>
            <pubDate>Fri, 7 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TechTV_Gutted.html
            </guid>
            <description>
                &lt;p&gt;Comcast seems to be &lt;a href = &quot;http://news.com.com/2100-1026_3-5207821.html?tag=nefd.top&quot;&gt;gutting TechTV&lt;/a&gt; completely.  I guess they just bought it to shut it down?  What they&apos;ve done obviously doesn&apos;t make sense if they were really trying to draw the TechTV viewership.&lt;/p&gt;
&lt;p&gt;Maybe it&apos;s not as bad as it sounds though, since it says they&apos;re posting the jobs back to the San Francisco staff who want to relocate to Los Angeles.  Maybe some of the key people will move, and the new programming they develop will tend less towards games.  Either way, it looks like I may soon get some of the old shows into my cable line-up.&lt;/p&gt;
&lt;p&gt;Maybe I&apos;ve become apathetic, but I don&apos;t feel like cancelling my cable over this yet.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                SUV Psychology and Studies
            </title>
            <link>
                https://www.hjsoft.com/blog/SUV_Psychology_and_Studies.html
            </link>
            <pubDate>Thu, 6 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/SUV_Psychology_and_Studies.html
            </guid>
            <description>
                &lt;p&gt;Here&apos;s an interesting read: &lt;a href = &quot;http://www.gladwell.com/2004/2004_01_12_a_suv.html&quot;&gt;Big and Bad: How the SUV Ran Over Automotive Safety&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&apos;s interesting to see the points about minivans and cars being designed to a standard which minimizes injury, while SUVs are based on pickup trucks which are crude and engineered less for passenger safety and more for hauling capacity.  The article also points out that active participation in driving and a responsive vehicle can be safer for drivers, pedestrians, and passengers, since it can better avoid accidents in the first place.  Too many people have resigned to the thought that they can&apos;t avoid it and may as well hope to run over it.&lt;/p&gt;
&lt;p&gt;Many aspects of the SUV cater to our deepest notions of safety, but not the facts, statistics, or engineering that can prove a vehicle&apos;s safety.  It&apos;s a false feeling of safety, as statistically, injuries are more common, and it&apos;s inconsiderate, as the handling endangers other people (see the Consumer Reports part of the article).&lt;/p&gt;
&lt;p&gt;I&apos;m definitely still buying a minivan.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cross-Gender Gaming
            </title>
            <link>
                https://www.hjsoft.com/blog/Cross-Gender_Gaming.html
            </link>
            <pubDate>Wed, 5 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cross-Gender_Gaming.html
            </guid>
            <description>
                &lt;p&gt;After reading another little weblog about &lt;a href = &quot;http://weblogs.java.net/pub/wlg/1256&quot;&gt;cross-gender gaming characters&lt;/a&gt;, I had to think why I usually play female characters myself.&lt;/p&gt;
&lt;p&gt;It&apos;s nothing nearly as complicated as the article explains, since I&apos;m just looking at console or computer games, not intense role-playing.  I just find that the female characters are sleeker and seem faster (even when they&apos;re not).  They also tend to be smaller and maybe a bit harder to hit in the first-person shooters.  Many of them remind me of what I&apos;d expect from William Gibson&apos;s cyberpunk female characters, like Molly.  Who wouldn&apos;t want to be slick like Molly?&lt;/p&gt;
&lt;p&gt;I also like to differentiate myself in the FPS from the other manly-men*, so I&apos;ll play a faerie or something cutesy.  People have just come to expect it from me, and I think it&apos;s a humorous way to poke fun at the whole game.&lt;/p&gt;
&lt;p&gt;* (I also differentiate myself by sucking horribly at most games.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Integrating IlohaMail and  Bogofilter
            </title>
            <link>
                https://www.hjsoft.com/blog/Integrating_IlohaMail_Bogofilter.html
            </link>
            <pubDate>Tue, 4 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Integrating_IlohaMail_Bogofilter.html
            </guid>
            <description>
                &lt;p&gt;Claire uses the IlohaMail webmail client on my server, and got lots of spam, like most people with an email address today.  I needed to provide an effective way to filter her email.&lt;/p&gt;
&lt;p&gt;I use the &lt;a href = &quot;http://bogofilter.sourceforge.net/&quot;&gt;bogofilter&lt;/a&gt; Bayesian filter with mutt, and it &lt;a href = &quot;http://www.hjsoft.com/blog/link/Basic_Bogofilter_Magic&quot;&gt;works wonderfully for me&lt;/a&gt;, so I needed to figure out how to get &lt;a href = &quot;http://ilohamail.org/&quot;&gt;IlohaMail&lt;/a&gt; to be able to use bogofilter.&lt;/p&gt;
&lt;p&gt;Bogofilter runs from procmail, so that was easy enough to setup in the &lt;code&gt;.procmailrc&lt;/code&gt;:
&lt;pre&gt;
# filter mail through bogofilter, tagging it as spam and
# updating the word lists
:0fw
| bogofilter -u -e -p -o 0.50

# if bogofilter failed, return the mail to the queue, the MTA will
# retry to deliver it later
# 75 is the value for EX_TEMPFAIL in /usr/include/sysexits.h

:0e
{ EXITCODE=75 HOST }

# file the mail to caught-spam if it&apos;s spam.
:0
* ^X-Bogosity: Yes, tests=bogofilter
/home/claire/Mail/caught-spam
&lt;/pre&gt;
This runs all incoming mail through bogofilter as it&apos;s delivered, tagging anything over the 0.50 threshold as spam (&lt;code&gt;-o 0.50&lt;/code&gt;), and otherwise analyzing all incoming mail to update its statistics (&lt;code&gt;-u&lt;/code&gt;) and better learn how to recognize spam.  The last rule just files all spam into its own mailbox to be checked and deleted by hand at a later time.&lt;/p&gt;

&lt;p&gt;Bogofilter must be trained as to what you consider spam and what is not.  I have macro keys in mutt that do this for me, but it&apos;s not that simple in a webmail client:
&lt;ol&gt;
&lt;li&gt;The client may not be running directly on the mail server, instead over IMAP.&lt;/li&gt;
&lt;li&gt;It&apos;s running as a web server user, not the mail user.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;To allow the Claire with her web mail client to designate &quot;spam&quot; and &quot;not spam&quot;, I first tried to have her forward spam messages to a special address which would trigger her procmail to call bogofilter to train itself.  The whole process of showing headers, forwarding, and typing in the spam address for each message was cumbersome, so I needed another way.&lt;/p&gt;
&lt;p&gt;IlohaMail and other webmail clients are adequate at tagging multiple messages and deleting or moving them to other mailboxes, so I created 2 new folders for her, one for spam and one not.  She moves spam from her Inbox to &quot;spam-to-delete&quot;, and then she checks her &quot;caught-spam&quot; box for false positives and copies those messages to the &quot;not-spam&quot; mailbox.&lt;/p&gt;
&lt;p&gt;I then setup a cronjob to run a little script every 5 minutes to run bogofilter on these mailboxes, then clear them:
&lt;pre&gt;
#!/bin/sh

bogofilter -Ns &lt; /home/claire/Mail/spam-to-delete \
        &amp;&amp; :&gt; /home/claire/Mail/spam-to-delete

bogofilter -Sn &lt; /home/claire/Mail/not-spam \
        &amp;&amp; :&gt; /home/claire/Mail/not-spam
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;Considering it a bit, such methods could be used to establish personalized server-side filtering for any IMAP mail client, like Outlook.  For slow client connections, it could save time and bandwidth, but still allow the user to control their filtering.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Mess Threshold
            </title>
            <link>
                https://www.hjsoft.com/blog/Mess_Threshold.html
            </link>
            <pubDate>Mon, 3 May 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mess_Threshold.html
            </guid>
            <description>
                &lt;p&gt;People definitely have &lt;a href = &quot;http://www.little-gamers.com/index.php?strip_id=834&quot; &gt;different mess thresholds&lt;/a&gt;.  Claire occasionally experiments to see where my threshold is.  It most often proves to be well beyond hers, so it just ends up driving her nuts.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Summer Is Coming
            </title>
            <link>
                https://www.hjsoft.com/blog/Summer_Is_Coming.html
            </link>
            <pubDate>Fri, 30 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Summer_Is_Coming.html
            </guid>
            <description>
                &lt;p&gt;...and I need one of &lt;a href = &quot;http://www.penny-arcade.com/view.php3?date=2004-04-30&quot;&gt;these helmets&lt;/a&gt;.  Claire may be less adamant about getting me on the beach then.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Maybe I&apos;ll Actually Learn Groovy
            </title>
            <link>
                https://www.hjsoft.com/blog/Maybe_Actually_Learn_Groovy.html
            </link>
            <pubDate>Thu, 29 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Maybe_Actually_Learn_Groovy.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt; JSR (&lt;a href = &quot;http://www.jcp.org/en/jsr/results?id=2490&quot;&gt;JSR-241&lt;/a&gt;) has been &lt;a href = &quot;http://today.java.net/pub/n/GroovyJSRRBApproved&quot;&gt;approved&lt;/a&gt;, so I guess it may actually become a standard scripting language for Java.&lt;/p&gt;
&lt;p&gt;I had said before that I regarded these scripting languages as passing fads, and they may still be, but it seems this one may have a few more moments to live.  I&apos;ll have to follow that link and check it out.  The idea is intriguing, but I don&apos;t have time to waste studying methods that won&apos;t last.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                How Useful Are Altimeters?
            </title>
            <link>
                https://www.hjsoft.com/blog/How_Useful_Are_Altimeters.html
            </link>
            <pubDate>Thu, 29 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/How_Useful_Are_Altimeters.html
            </guid>
            <description>
                &lt;p&gt;The altimeter on my watch seems to serve as something to continually adjust while I walk to the bathroom or wait for any other moment.  I&apos;m not sure how long one really expects to go between calibrations, but I recalibrate mine every couple hours it seems.  If I let it go for a couple days and the air pressure spikes high, I have to be concerned with it going negative.  Then it just reads &quot;LO&quot;, and won&apos;t let me adjust it.&lt;/p&gt;

&lt;p&gt;I suppose it&apos;s just the nature of weather here, that the air pressure is constantly changing over me, so the watch can&apos;t tell if it&apos;s ascending, descending, or sitting still.  The barometer function serves more purpose in my relatively stationary lifestyle.  I&apos;m usually at home or at work, and that&apos;s when I&apos;m always calibrating the altimeter, since I know my altitude from maps.  If I didn&apos;t think to calibrate it before leaving either of these places, I can&apos;t trust its accuracy due to this drift.&lt;/p&gt;
&lt;p&gt;I must wonder if it&apos;s just this season, or my location, or more likely, while it reads to the nearest 10ft, I really can only trust it to the nearest 50 or so due to the turbulent atmosphere.&lt;/p&gt;
&lt;p&gt;It seems to hold calibration most of the time for my drive home, but I completely expect I could be changing weather systems in my 45-mile trek.  I&apos;m not surprised when it doesn&apos;t hold.  Maybe I&apos;ll really see it become useful when I get out biking again.&lt;/p&gt;
&lt;p&gt;No matter which display is active, barometer or altimeter, I can always tell you when the clouds are rolling in or out!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                What have they done to poor Ranko?
            </title>
            <link>
                https://www.hjsoft.com/blog/Poor_Ranko.html
            </link>
            <pubDate>Mon, 26 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Poor_Ranko.html
            </guid>
            <description>
                &lt;p&gt;This story about &lt;a href = &quot;http://www.hacknot.info/hacknot/action/showEntry?eid=52&quot;&gt;Poor Ranko&lt;/a&gt;, the phone guy, and his likeness to a maintenance programmer is excellently recounted.  It&apos;s a lesson many of us have learned (or should have learned?) about coding shortcuts or having to deal with others&apos; shortcuts.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://www.hacknot.info/hacknot/action/home&quot;&gt;HackNot&lt;/a&gt; will definitely be going into my blog roll to be watched in the future.  I&apos;d also be interested in digging around to see what code he&apos;s using or if he indeed wrote his own, as I am.  It&apos;s a pretty clean site.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Here&apos;s a Talent I Wish I Had
            </title>
            <link>
                https://www.hjsoft.com/blog/Talent_I_Wish_I_Had.html
            </link>
            <pubDate>Mon, 26 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Talent_I_Wish_I_Had.html
            </guid>
            <description>
                &lt;p&gt;Check out &lt;a href = &quot;http://insanity.lost-angel.com/gallery/20040424-2&quot;&gt;Stacey&apos;s random Altoona pictures&lt;/a&gt;.  They are just amazing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                SCSI Trouble on My Server
            </title>
            <link>
                https://www.hjsoft.com/blog/SCSI_Trouble_on_My_Server.html
            </link>
            <pubDate>Sun, 25 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/SCSI_Trouble_on_My_Server.html
            </guid>
            <description>
                &lt;p&gt;I got the good idea that I needed to mount up an extra 18G drive on my server to store music.  I knew the block length was set to 516 instead of the normal (and usable) 512, so I&apos;d have to low-level format it.  I started at about 11:00pm and much trouble ensued.&lt;/p&gt;
&lt;p&gt;I got curious in the SCSI BIOS and kicked off a low-level format in there.  This, of course, meant the box wasn&apos;t serving anything, and I had no idea how long it would take.  After 10 minutes, I got impatient, and killed it to see what Linux would do with it.  It was not pleased with me (MEDIUM ERROR), so I went back into the BIOS and did it again, but waited.&lt;/p&gt;
&lt;p&gt;While I waited, I got impatient again regretting using the BIOS for this.  Instead of touching the server, I took out my impatience on the backup gentoo box, and formatted another drive using &lt;a href = &quot;http://www.hjsoft.com/blog/link/Backup_Space&quot;&gt;my directions from the last time&lt;/a&gt;.  I stayed the hell away from the BIOS this time, and just used &lt;code&gt;scu&lt;/code&gt;.  Specifically, I did this:
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;# scu -f /dev/sg0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scu&amp;gt; set bypass on&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scu&amp;gt; set device block-length 512&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scu&amp;gt; time format defects primary options dcrt&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
About the time I got this started, the BIOS format on the server finished, so I could boot up, find that it didn&apos;t change the block length for me, and  then I kicked off the same scu process on the server.&lt;/p&gt;
&lt;p&gt;I made file systems on it, mounted it up, but got disconnect and reset errors from my SCSI interface for that drive.  I rebooted, tried again, but had the same issue.  I ripped the case apart again and swapped in my other drive.  It&apos;s about 2:00AM by now.&lt;/p&gt;
&lt;p&gt;That drive worked, so I copied 10G of music to it.  I left it at 3:00AM and continued a bit in the morning at 7:00AM.  I unmounted it, tried to remount it in a new place, and got the disconnect errors again.  I ripped open the case again, unplugged the drive from the adapter, booted the machine again and left it.&lt;/p&gt;
&lt;p&gt;Having had a moment to think about it now, these drives work fine in my older server with the slower SCSI card.  That card tries to talk to them at something like 10Mb/s.  My card in the new server seemed to think it could talk 40Mb/s to the drive.  I have to wonder if I just need to tune the access speed down a bit to get it working reliably.  I&apos;ll have to try that tonight.&lt;/p&gt;
&lt;p&gt;In the beginning of all this, when I rebooted, my computer seems to have decided it can release its IP to the DHCP server, so I got a new IP address after 1.5 years of having the same one.  My handy DNS update script worked fine, but the script that puts my IP in the /etc/hosts file and makes it available to my firewall scripts didn&apos;t work -- my firewall script used the old IP and pretty much locked up any outgoing traffic.  That took a moment to figure out, and I still don&apos;t have the script working properly.&lt;/p&gt;
&lt;p&gt;I just wanted to collect all my music in one place instead of being distributed across several CDs and a laptop.  Ultimately, I hope to be able to just load up anything I want on my laptop and be good for a while.  When I get tired of it, just delete it and load it again.  The server will have the central repository.  I&apos;m even toying with the idea of have a process to burn random mix CDs for in the car.  First, though, I must get this drive working.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (25 April 2004):&lt;/b&gt; I bumped the speed in the SCSI BIOS down to 10Mb, just like the gentoo box, and now the drive is working fine.  It&apos;s been mounted up and functioning for over a day now with no incidents.  That&apos;s a relief.&lt;/p&gt;
&lt;p&gt;For everyone&apos;s reference, here&apos;s the ID of the drive, in case someone else looks for this sort of information:
&lt;pre&gt;
Host: scsi0 Channel: 00 Id: 03 Lun: 00
  Vendor: FUJITSU  Model: MAA3182SCX       Rev: 2412
  Type:   Direct-Access                    ANSI SCSI revision: 02
&lt;/pre&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Win32 Makes Me Feel Unclean
            </title>
            <link>
                https://www.hjsoft.com/blog/Win32_Makes_Me_Feel_Unclean.html
            </link>
            <pubDate>Sun, 25 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Win32_Makes_Me_Feel_Unclean.html
            </guid>
            <description>
                &lt;p&gt;I spent yesterday setting up a shiny new Gateway desktop for my mother-in-law.  I got to see the insides before I even booted it, since I dropped the old harddrive into the new machine to facilitate faster copying of her old data.&lt;/p&gt;
&lt;p&gt;The construction and layout on the inside was very standard and clean -- it seemed to be built for easy disassembly.  They also did away with those little seal stickers. (It&apos;s been a long time since I&apos;ve worked with consumer-grade machines.)&lt;/p&gt;

&lt;p&gt;I booted it up, answered a bunch of Gateway/setup questions, got it to a very clean desktop -- There was nothing but the Recycling Bin, no pollution.  The Start Menu is a different story, but it still wasn&apos;t too bad!&lt;/p&gt;
&lt;p&gt;The dirty parts come from using AOL all day, punching in licensing keys, staving off product registrations and advertisements from Gateway, Norton, Microsoft, AOL, etc.  I think I wasted more time doing that stuff than real work at times.  I couldn&apos;t help but realize how long it&apos;s been since I&apos;ve had to do those things.  It&apos;s a good feeling. :)&lt;/p&gt;
&lt;p&gt;Anyway, the machine&apos;s up and running nicely, and I&apos;m pretty sure she&apos;s got the hang of it, so all is well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                After JavaBlogs
            </title>
            <link>
                https://www.hjsoft.com/blog/After_JavaBlogs.html
            </link>
            <pubDate>Fri, 23 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/After_JavaBlogs.html
            </guid>
            <description>
                &lt;p&gt;Now that I have topic-based RSS feeds and I could publish to java.blogs, it feels like I&apos;m done coding for the blog -- time to just burn out for a while.&lt;/p&gt;
&lt;p&gt;I&apos;m almost wrong, though.  I have plenty that could still be done:
&lt;ul&gt;
&lt;li&gt;Clean out old finders now that I&apos;ve switched to an &lt;code&gt;ArticleRequest&lt;/code&gt; search object to encapsulate all the filtering parameters.&lt;/li&gt;
&lt;li&gt;Implement a DAO method to select articles by &lt;code&gt;ArticleRequest&lt;/code&gt;, instead of filtering it through Java code.&lt;/li&gt;
&lt;li&gt;Preview comments before posting.  Selectable HTML formatting for comments.&lt;/li&gt;
&lt;li&gt;Spellchecking.&lt;/li&gt;
&lt;li&gt;User/password management.&lt;/li&gt;
&lt;li&gt;Multiple-author support.  I eliminated most the code that supported having more than one login, since it complicated the entire system before I clarified some things.&lt;/li&gt;
&lt;li&gt;Trackback/Ping.&lt;/li&gt;
&lt;li&gt;Data-driven links.&lt;/li&gt;
&lt;li&gt;Smarter login behavior for remembering your location, instead of always sending you back to the article list page.&lt;/li&gt;
&lt;li&gt;Topic management.&lt;/li&gt;
&lt;li&gt;Apply struts validation where possible.&lt;/li&gt;
&lt;/ul&gt;
I basically want to start making the whole system more generic so it may be suitable for public release and re-use someday.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                A New Phone Lust: T616
            </title>
            <link>
                https://www.hjsoft.com/blog/A_New_Phone_Lust_T616.html
            </link>
            <pubDate>Thu, 22 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/A_New_Phone_Lust_T616.html
            </guid>
            <description>
                &lt;p&gt;The &lt;a href = &quot;http://www.sonyericsson.com/spg.jsp?cc=us&amp;lc=en&amp;ver=4000&amp;template=pp1_loader&amp;zone=pp&amp;lm=pp1&amp;php=php1_10076&amp;pid=10076&quot;&gt;SonyEricsson T616&lt;/a&gt; has caught my eye recently.  It does everything I&apos;d want from a phone, and it probably even allows me to talk to people if I must.  The price is even reasonable.&lt;/p&gt;
&lt;p&gt;It does Java, and I&apos;ve been wanting to get into &lt;a href = &quot;http://java.sun.com/j2me/index.jsp&quot;&gt;J2ME&lt;/a&gt; for a while now, but I had been looking in the direction of a PDA.  Now I can stick with one device and do it on a phone, though I don&apos;t actually have time to learn J2ME right now. :(&lt;/p&gt;

&lt;p&gt;Additionally, it has the little camera feature I&apos;ve wanted, the standard WAP web browsing, plus IRDA to talk to my laptop.  It even has bluetooth, which will make talking to the computer even easier, as I&apos;ll not need to even take it out of my pocket to connect to it!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The only obstacle is convincing myself to replace my current Siemens S46.  I don&apos;t have time to learn J2ME, my current phone does IRDA just fine, the WAP browser sucks but it&apos;s usable, and I don&apos;t mind black and white.  While it is relatively cheap for all the features, I don&apos;t need to spend the money on it.  Getting new (and different) phones for Claire and I would help me avoid mistakenly swiping her phone in the morning, though.&lt;/p&gt;
&lt;p&gt;I&apos;ve managed to put off buying a PDA for years now, and I never did buy the SonyEricsson T68i, so I may even be able to avoid buying this one too.  The toys just keep getting better and cheaper the longer I wait.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Yay JavaBlogs
            </title>
            <link>
                https://www.hjsoft.com/blog/Yay_JavaBlogs.html
            </link>
            <pubDate>Wed, 21 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Yay_JavaBlogs.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve finally gotten all the code in place to facilitate adding my weblog to &lt;a href = 
&quot;http://www.javablogs.com/ViewBlog.action?id=12262&quot;&gt;java.blogs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href = &quot;http://www.churchillobjects.com/c/13005.html&quot;&gt;rss4j&lt;/a&gt; library seems to be a bit funny at times, so I had to modify it a bit to get it to stop inserting an empty &lt;code&gt;xmlns&lt;/code&gt; attribute on each element, doubling up the &lt;code&gt;xmlns:rdf&lt;/code&gt; attribute in the root, or sticking &lt;code&gt;Z&lt;/code&gt; into the date format instead of the proper &lt;code&gt;+00:00&lt;/code&gt; for the timezone.  I expect it may be a bad interaction between j2sdk1.4&apos;s xml support and the library, which is showing its age a bit and may have been relying upon behaviors of an older xerces.&lt;/p&gt;
&lt;p&gt;Can anyone recommend a better RSS lib for java?  I guess I should go take a look at what roller uses, or just do my own.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (13 July 2004):&lt;/strong&gt; A recent upgrade to JBoss 3.2.4 apparently brought a newer xml api implementation, and stock rss4j started behaving much more appropriately.  Of course, it was broken for a week or so until I noticed that the behavior had changed.  I&apos;m still maintaining the +00:00 change, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Icky Code Feeling
            </title>
            <link>
                https://www.hjsoft.com/blog/Icky_Code_Feeling.html
            </link>
            <pubDate>Tue, 20 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Icky_Code_Feeling.html
            </guid>
            <description>
                &lt;p&gt;This Java stuff is pretty slick, but the complexity to which I&apos;ve grown accustomed makes me uneasy.  There are so many layers and technologies pieced together that I wonder if each layer is the best choice.  Even when I have a pretty good feeling that something isn&apos;t a perfect fit, I&apos;ve been sticking with the larger, more standard technology just for the sake of following something to a conclusion of my own.&lt;/p&gt;
&lt;p&gt;Struts was difficult to start, but now it&apos;s facilitating pretty rapid development.  There are still corners of it that I haven&apos;t used yet, and I keep seeing articles and other blogs touting Spring or Webwork2, etc.  Many of the improvements these frameworks have over Struts make me say, &quot;Yeah, why is that so hard anyway?&quot;, but Struts is a much more established standard, and I haven&apos;t fully explored it yet.  I don&apos;t want to jump frameworks for every small project and never fully learn anything -- &lt;i&gt;Jack of all trades, master of none&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;That&apos;s probably my greatest concern -- I have to read about frameworks and pick one on others&apos; descriptions, then actually implement a project on it to evaluate the framework.  Ultimately, I have to see everything for myself, because I never trust anyone else&apos;s assessment. (Claire can attest to that.)  I&apos;m still using Entity Beans for this very reason -- I haven&apos;t proven them useless for myself yet, and I figure the J2EE server vendors will implement performance improvements someday, and my time studying them will prove to be well-spent. (JBoss could lead the way to high-performance entity beans by reimplementing their persistence layer using Hibernate.)&lt;/p&gt;
&lt;p&gt;Java gives me so many options that I could very well spend all my time evaluating ways to do something and never actually get anything done, if  I&apos;m not careful.  I could dump Java and move onto something like PHP or go back to Perl.  Those don&apos;t have all the frameworks and complexity -- I could just code again, but over-simplicity gives me the same icky feeling.&lt;/p&gt;
&lt;p&gt;I trust complexity will provide me solutions to unforeseen problems where simplicity will just leave me recoding from scratch.  I take comfort in knowing I have software options for scaling my application, not just &quot;buy a bigger box&quot; to make it run faster.  Splitting a simpler application across servers could also entail wide-spread code changes, instead of simpler configuration changes in my Java apps.  I also like being able to apply my Java knowledge to all other sorts of applications, not just web apps.  I know Perl can do lots, including GUI (see &lt;a href = &quot;http://www.frozen-bubble.org/&quot;&gt;Frozen Bubble&lt;/a&gt;), but I still question if it should. ;)  Besides, Perl is so 1995.&lt;/p&gt;
&lt;p&gt;All other languages, especially these scripting languages, like Ruby or Python, seem to just be fads.  These would seem like much riskier jumps than just switching Java frameworks, since I really wouldn&apos;t expect to use these professionally.  Java&apos;s worked out nicely like that, and that&apos;s why I jumped to Java in the first place -- I wanted to be viable in the inevitable Microsoft workplace without having to have bought into Microsoft myself.  Microsoft languages will morally remain off-limits for me.  Java programmers are also expected to do more complex things and there are fewer of us, so we get paid better than your run-of-the-mill Microsoft VB  programmers!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ambitions Elsewhere
            </title>
            <link>
                https://www.hjsoft.com/blog/Ambitions_Elsewhere.html
            </link>
            <pubDate>Mon, 19 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ambitions_Elsewhere.html
            </guid>
            <description>
                &lt;p&gt;Looking back over the past couple weblog entries, I can see I&apos;ve not been very productive in the technology or Java world.&lt;/p&gt;
&lt;p&gt;I have been doing cool things at home and work though.&lt;/p&gt;
&lt;p&gt;At home, this past weekend, I:
&lt;ul&gt;
&lt;li&gt;
patched the bare spots in the lawn with this odd  grass seed, fertilizer, dryer lint stuff from Scott&apos;s.
&lt;/li&gt;
&lt;li&gt;
did a bit of rewiring at the breaker box to make room for future circuits to support more air conditioners this summer.
&lt;/li&gt;
&lt;li&gt;
completed the deck (again!) -- covered the cinder blocks supporting the deck, and connected the 3 sets of deck outlets to power.
&lt;/li&gt;
&lt;li&gt;
shopped lots -- We purchased most of a summer wardrobe for Paige at the cool Girls&apos; Clothing Outlet in Columbia.
&lt;/li&gt;
&lt;li&gt;
replaced my bike tire innertube, so now I can actually go biking.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;I did eventually yesterday crash out and started to fall back into my more familiar immovable lump state.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Long Reading List
            </title>
            <link>
                https://www.hjsoft.com/blog/Long_Reading_List.html
            </link>
            <pubDate>Mon, 19 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Long_Reading_List.html
            </guid>
            <description>
                &lt;p&gt;My reading list has been getting longer recently.  I&apos;ve had &lt;a href = &quot;http://www.williamgibsonbooks.com/books/pattern.asp&quot;&gt;William Gibson&apos;s &lt;i&gt;Pattern Recognition&lt;/i&gt;&lt;/a&gt; and &lt;a href = &quot;http://www.cryptonomicon.com/&quot;&gt;Neal Stephenson&apos;s &lt;i&gt;Cryptonomicon&lt;/i&gt;&lt;/a&gt; laying around for a while, but haven&apos;t gotten to them.  (&lt;i&gt;Cryptonomicon&lt;/i&gt; is just intimidating in its size.)&lt;/p&gt;
&lt;p&gt;I also have a &lt;i&gt;WAP Servlets&lt;/i&gt; book I&apos;ve been browsing, and &lt;a href = &quot;http://www.wiley.com/WileyCDA/WileyTitle/productCd-0471237124.html&quot;&gt;Kevin Mitnick&apos;s &lt;i&gt;Art of Deception&lt;/i&gt;&lt;/a&gt; which I bought recently.&lt;/p&gt;

&lt;p&gt;Additionally, a beer afficionado friend of mine lent me &lt;i&gt;Michael Jackson&apos;s Guide to Beer&lt;/i&gt; (no, not the King of Pop).  I hope to learn a bit about the components of beer and its taste, so I can better describe, note, remember, and recognize beers I like.&lt;/p&gt;
&lt;p&gt;The list is destined to stay pretty long, since any time I might think about picking up a book (which is often recently), I end up instead doing server maintenance, laptop maintenance, house maintenance, cleaning, playing with Paige, or sleeping.  On computer things, I always have a list of systems I could improve, newly implement, or on which I just need to study a bit and stay current.  That, of course, brings me back to my technical reading list and magazines.&lt;/p&gt;
&lt;p&gt;I&apos;d also like to pick up Linus Torvalds&apos; &lt;i&gt;Just for Fun&lt;/i&gt;, but I guess I have enough on my list for now.  Beyond even that, I&apos;d like to get around to the classics by Orwell, Asimov, Bradbury, Wells, etc.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Oh No, Fortune!
            </title>
            <link>
                https://www.hjsoft.com/blog/Oh_No_Fortune.html
            </link>
            <pubDate>Fri, 16 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Oh_No_Fortune.html
            </guid>
            <description>
                &lt;p&gt;My &lt;code&gt;fortune&lt;/code&gt; program spit this at me today:&lt;br/&gt;
&lt;cite&gt;I am dyslexic of Borg.  Prepare to have your ass laminated.&lt;/cite&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                OS Quiz (or Bored at Work)
            </title>
            <link>
                https://www.hjsoft.com/blog/OS_Quiz.html
            </link>
            <pubDate>Fri, 16 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/OS_Quiz.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href=&quot;http://bbspot.com/News/2003/01/os_quiz.php&quot;&gt;&lt;img
src=&quot;http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/windows_95.jpg&quot; width=&quot;300&quot; height=&quot;90&quot;
border=&quot;0&quot; alt=&quot;You are Windows 95.  You look better than your older brother, but your communication skills are still lacking.  You start well, but often zone out.&quot;&gt;&lt;br&gt;Which OS are You?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&apos;s a really slow day...I guess this is what I get for telling it &quot;&lt;i&gt;Someone&apos;s getting hurt, if it says I&apos;m Windows ME!&lt;/i&gt;&quot;.  I really wanted to be OS/390 -- megapowered, crazy, and missing vowels.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                AT&amp;T Wireless Music ID Service
            </title>
            <link>
                https://www.hjsoft.com/blog/ATT_Wireless_Music_ID_Service.html
            </link>
            <pubDate>Thu, 15 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/ATT_Wireless_Music_ID_Service.html
            </guid>
            <description>
                &lt;p&gt;I just read &lt;a href = &quot;http://www.dailywireless.com/modules.php?name=News&amp;file=article&amp;sid=179&amp;mode=&amp;order=0&amp;thold=0&quot;&gt;an article&lt;/a&gt; about AT&amp;T Wireless&apos; new music identification system, so I had to try it out.  I dialed &quot;#ID&quot; (#43), held the phone up to my tinny little laptop speaker, and about 30 seconds later it sent me a message correctly identifying Concrete Blonde&apos;s &lt;i&gt;Everybody Knows&lt;/i&gt;.  Awesome!&lt;/p&gt;
&lt;p&gt;The only problem is that it costs $0.99 per successful song ID.  I&apos;m sure I&apos;ll have fun with this when I go clubbing!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                One More Day, Please?
            </title>
            <link>
                https://www.hjsoft.com/blog/One_More_Day_Please.html
            </link>
            <pubDate>Mon, 12 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/One_More_Day_Please.html
            </guid>
            <description>
                &lt;p&gt;Claire and I are exhausted, and it&apos;s Monday.  We&apos;ve had a busy, busy weekend and forgot to rest.&lt;/p&gt;
&lt;p&gt;Over the 3-day weekend, we&apos;ve run to Philadelphia, gone to Karen&apos;s baby shower, an Easter lunch, Hayden&apos;s birthday party, thrown a small deck party, and shopped and shopped finding supplies (and firewood) for that party.  We also bought Paige a cute little car of her very own. :)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Simple Blog Optimizations for JBoss
            </title>
            <link>
                https://www.hjsoft.com/blog/Simple_Blog_Optimizations_for_JBoss.html
            </link>
            <pubDate>Thu, 8 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Simple_Blog_Optimizations_for_JBoss.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been tuning my blog for JBoss recently, and hopefully you can feel it a bit in this site&apos;s load time.&lt;/p&gt;
&lt;p&gt;JBoss 3.2.3 has a &lt;a href = &quot;http://www.darkwolf.ws/blog/blojsom/java/?permalink=48A305960F60C205C14F6E6B23A5C630.txt&quot;&gt;little bug&lt;/a&gt; causing it to always write dates back to the database, even though they didn&apos;t change after every transaction.  I noticed even on my dual Athlon, this could take a full second to commit everything back.&lt;/p&gt;
&lt;p&gt;Instead of installing the a 3.2.4RC version of JBoss or patching up the source myself, I just tagged all my getter methods as read-only: &lt;code&gt;@jboss.method-attributes read-only = &quot;true&quot;&lt;/code&gt; (in Xdoclet).&lt;/p&gt;
&lt;p&gt;Additionally, I merged in a container config which enables commit-option A (allows more caching, since JBoss can assume the database won&apos;t change out from under it).  Lastly, I enabled read-ahead on find.  This causes more data to be read, but it does it in fewer queries.  The values are loaded now in the single find statement, not in subsequent load queries. (&lt;code&gt;@jboss.read-ahead strategy = &quot;on-find&quot;&lt;/code&gt;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Leo Laporte Left TechTV
            </title>
            <link>
                https://www.hjsoft.com/blog/Leo_Laporte_Left_TechTV.html
            </link>
            <pubDate>Mon, 5 Apr 2004 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Leo_Laporte_Left_TechTV.html
            </guid>
            <description>
                &lt;p&gt;It looks like &lt;a href = &quot;http://leo.typepad.com/tlr/2004/04/end_of_line.html#0001147717&quot;&gt;Leo is done with TechTV&lt;/a&gt;.  He had decided earlier to leave &lt;a href = &quot;http://www.techtv.com/screensavers&quot;&gt;ScreenSavers&lt;/a&gt; and continue doing &lt;a href = &quot;http://www.techtv.com/callforhelp/&quot;&gt;Call for Help&lt;/a&gt;, but now the outgoing TechTV owners have gotten rid of him when he wouldn&apos;t sign over his share of the network.&lt;/p&gt;
&lt;p&gt;I think Vulcan (the owner) has really just sabotaged the value of the network a bit for Comcast.  That&apos;s too bad.  With some luck, Comcast will get this whole transition right, and invite Leo back to the new network.&lt;/p&gt;
&lt;p&gt;It really won&apos;t be the same without him.  I made a point to watch every on-demand show that Leo hosted, since they were guaranteed to be interesting.  He had expected to make guest appearances on ScreenSavers specials, which would have been great, since those are the shows they offer on-demand.  I guess not anymore.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Apache 2
            </title>
            <link>
                https://www.hjsoft.com/blog/Apache_2.html
            </link>
            <pubDate>Fri, 2 Apr 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Apache_2.html
            </guid>
            <description>
                &lt;p&gt;I now have Apache 2 running on the server.  It does many of the webpages and proxies to JBoss and Tomcat servers around the box.  If you notice any troubles, please let me know.  Thanks.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (09:36):&lt;/b&gt; I had some things broken.  It seems none of the proxied sites were working from the outside world.  I had to change my &amp;lt;Directory proxy:${url}&amp;gt; directives into &amp;lt;Proxy url&amp;gt; directives.  I apologize for any inconveniences.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Top April Fools Hoaxes
            </title>
            <link>
                https://www.hjsoft.com/blog/Top_April_Fools_Hoaxes.html
            </link>
            <pubDate>Fri, 2 Apr 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Top_April_Fools_Hoaxes.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://leo.typepad.com/tsn/2004/04/thursdays_throw.html#0001140555&quot;&gt;Leo&lt;/a&gt; had a great link to the &lt;a href = &quot;http://www.museumofhoaxes.com/aprilfool2.html&quot;&gt;Top 100 April Fools Hoaxes&lt;/a&gt;.  Imagine, most of these didn&apos;t require computers or stupid website changes! ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Virtual Private Servers Revisited
            </title>
            <link>
                https://www.hjsoft.com/blog/Virtual_Private_Servers_Revisited.html
            </link>
            <pubDate>Thu, 1 Apr 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Virtual_Private_Servers_Revisited.html
            </guid>
            <description>
                &lt;p&gt;With Lynn &lt;a href = &quot;http://x.hjsoft.com/viewArticle.php?id=38&quot;&gt;gearing up to move&lt;/a&gt;, I need to figure out a new place to host my DNS.  Virtual private servers running user-mode linux seem to be a good option.  I&apos;ll have root, and I&apos;ll be able to do anything I want to the machine.  This initially would only be running DNS and maybe a mail relay, but I figure for the right price, I could maybe a cram a JBoss and an Apache server in there while I&apos;m at it.&lt;/p&gt;
&lt;p&gt;I had &lt;a href = 
&quot;http://www.hjsoft.com/blog/showArticle.java?id=18&quot;&gt;originally&lt;/a&gt; liked &lt;a href = &quot;http://www.pdxcolo.net&quot;&gt;PDXColo&lt;/a&gt;, but they&apos;re at  capacity right now and aren&apos;t adding any accounts.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://mirroredsolutions.com/servers/index.htm&quot;&gt;These guys&lt;/a&gt; seem to have attractive prices.  For $15/month, I could have 128M RAM, 2G of disk, and 20G of bandwidth.  &lt;a href = &quot;https://www.jvds.com/virtuallist.php&quot;&gt;JVDS&lt;/a&gt; has cheap and tiny machines starting at $12.50.  These would not be good for a JBoss server, but their setup prices are cheaper.&lt;/p&gt;
&lt;p&gt;Does anyone have any good thoughts on this?  See any other packages that look nice?  Advice?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                This American Life: The Sanctity of Marriage
            </title>
            <link>
                https://www.hjsoft.com/blog/TAL_Sanctity_of_Marriage.html
            </link>
            <pubDate>Mon, 29 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TAL_Sanctity_of_Marriage.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.thisamericanlife.org/&quot;&gt;This American Life&lt;/a&gt;, a weekend show on &lt;a href = &quot;http://www.npr.org/&quot;&gt;NPR&lt;/a&gt;, just broadcasted the most interesting show called the &lt;a href = &quot;http://www.thisamericanlife.org/pages/descriptions/04/261.html&quot;&gt;Sanctity of Marriage&lt;/a&gt;.  (There&apos;s not information on the web page about it yet, but it should come soon.  Streams and downloads should be available soon too.&lt;/p&gt;
&lt;p&gt;They discussed studies trying to find and predict the important factors in happy marriages, happiness in homosexual relationships, and the gay marriage ammendment.  The show ended with an intriguingly twisted story of a woman and her miserably married parents and their eventual divorce.  Twice through the show, I was caught in the car waiting for a break in a segment before I could exit the car!  I&apos;ll most definitely by purchasing the mp3 download of that program, so Claire can hear it.&lt;/p&gt;
&lt;p&gt;One humor segment followed the same tone as one of my &lt;a href = &quot;http://www.hjsoft.com/blog/link/Open_IM_To_The_Opposition&quot;&gt;previous articles here&lt;/a&gt; on the subject of gay marriage.&lt;/p&gt;
&lt;p&gt;I really wish they had their information online for this show, because I just can&apos;t begin to describe it all -- I apologize.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Referer Spam
            </title>
            <link>
                https://www.hjsoft.com/blog/Referer_Spam.html
            </link>
            <pubDate>Fri, 26 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Referer_Spam.html
            </guid>
            <description>
                &lt;p&gt;On rare occassion, I&apos;ll see a referer from livexxxcams.com or whatever.  I couldn&apos;t really do much about it, since the referer list is only stored in the running servlet context, and I couldn&apos;t really manipulate it behind the scenes.&lt;/p&gt;
&lt;p&gt;I&apos;ve added a quick little action (DeleteReferer) which allows me to kill any referer I like while I&apos;m logged into my blog.&lt;/p&gt;
&lt;p&gt;I&apos;ve avoided comment spam just by having a unique code base which doesn&apos;t function like Movable Type or other common packages.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Apache 2 Mod_Proxy
            </title>
            <link>
                https://www.hjsoft.com/blog/Apache_2_Mod_Proxy.html
            </link>
            <pubDate>Wed, 24 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Apache_2_Mod_Proxy.html
            </guid>
            <description>
                &lt;p&gt;I found this link to &lt;a href = &quot;http://wiki.cocoondev.org/Wiki.jsp?page=ApacheModProxy&quot;&gt; configuring Apache mod_proxy&lt;/a&gt; on java.blogs.  I&apos;d like to get around to doing this sometime soon, so this will probably be a good reference.  It has some directives I&apos;ve not seen before, like &lt;code&gt;ProxyPreserveHost&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dealing with Debian&apos;s versatile (and complicated) config structure for Apache 2 should be fun as well.   As far as I can gather, I&apos;ll have to run PHP in CGI mode, since the module doesn&apos;t play well and hasn&apos;t been integrated into Debian&apos;s Apache 2.  I&apos;m testing on my laptop right now.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Corrupted Debian Firefox Install
            </title>
            <link>
                https://www.hjsoft.com/blog/Corrupted_Debian_Firefox_Install.html
            </link>
            <pubDate>Mon, 22 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Corrupted_Debian_Firefox_Install.html
            </guid>
            <description>
                &lt;p&gt;A long time back, I had issues with Mozilla&apos;s XUL files getting corrupted, then simple dialog boxes would no longer show.  Instead, I&apos;d get XUL XML parsing errors.&lt;/p&gt;
&lt;p&gt;Firefox recently did it to me too.  Watching the Debian user mailing list, someone else noted this, and they concluded that /tmp had run out of space during install, and the install script silently failed to build the files correctly.  I cleaned up /tmp and tried again, and now it&apos;s fine.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                RSS 1.0 Feed Now Available
            </title>
            <link>
                https://www.hjsoft.com/blog/RSS_1.0_Feed_Now_Available.html
            </link>
            <pubDate>Mon, 22 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/RSS_1.0_Feed_Now_Available.html
            </guid>
            <description>
                &lt;p&gt;With the help of &lt;a href = &quot;http://www.churchillobjects.com/c/13005.html&quot;&gt;RSS4J&lt;/a&gt;, I have an RSS 1.0 feed now available for my main article list (the latest 10 articles).  Try it out and see if it actually works in your aggregator or whatever.  I expect I&apos;ll be able to improve it in the near future, including adding the ability to filter them by topic.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Birthday Recap
            </title>
            <link>
                https://www.hjsoft.com/blog/Birthday_Recap.html
            </link>
            <pubDate>Mon, 22 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Birthday_Recap.html
            </guid>
            <description>
                &lt;p&gt;Yesterday, I turned 27, so I&apos;m officially out of my mid-20s.&lt;/p&gt;
&lt;p&gt;It was a great day though.  I got up (almost too early) at 7:30AM, did some computer stuff for 30 minutes, then played with Paige for a couple hours while Claire napped.&lt;/p&gt;
&lt;p&gt;We ran out to the mall in the afternoon to wander just a little.  I had a gift card for Sears, so I found 2 nice shirts on sale.  Before I got to purchase them, though, someone announced over the loud speaker that all the cashiers should turn off all the computers (The Great Sears Crash!).  That was shortly followed by, &quot;We have to close Sears.&quot;.  I didn&apos;t get to buy my cool clearance shirts, so now they&apos;re probably gone. :(  Maybe I can make it back out there before work today. (I&apos;m working a later noon-8pm shift.)&lt;/p&gt;
&lt;p&gt;Claire arranged to have a pile of people (like 17  total) convene for dinner at El Serrano.  It&apos;s always nice to see lots of people come out.  Many people came back to keep the party going.  Thanks, everyone!&lt;/p&gt;
&lt;p&gt;Between outtings I managed to get more blog code written, committed, and deployed.  I was quite pleased with myself to have gotten an intial RSS feed going.  It&apos;s only good for all of the front page, but it should be quite easy to get topic filters in place next.  The RSS feed just ends up a simple little struts action strung onto the normal article list action (instead of the list action going to the jsp.  Struts makes things pretty simple.&lt;/p&gt;
&lt;p&gt;I think at this point, I have most things I want, so the best gift can be a few contiguous moments in which to just do one thing -- code a bit, read some email, play with Paige, watch a movie, whatever.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sick Week
            </title>
            <link>
                https://www.hjsoft.com/blog/Sick_Week.html
            </link>
            <pubDate>Fri, 19 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Sick_Week.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been absent from work more in the past week than I&apos;ve been at work.  I started getting fevery before Todd&apos;s wedding, then I lost my voice after the wedding, developed that into a head cold then pink eye.&lt;/p&gt;
&lt;p&gt;I took Friday off to make sure I was available for wedding things, then I missed work on Monday and Thursday due to illness.  I hope the weekend starts off better.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Collection of JSTL References
            </title>
            <link>
                https://www.hjsoft.com/blog/Collection_of_JSTL_References.html
            </link>
            <pubDate>Fri, 19 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Collection_of_JSTL_References.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.brunningonline.net/simon/blog/&quot;&gt;Simon Brunning&lt;/a&gt; has collected links to &lt;a href = &quot;http://www.brunningonline.net/simon/blog/archives/001274.html&quot;&gt;JSTL Info&lt;/a&gt;.  I&apos;ll try to actually read through these when time permits.&lt;/p&gt;
&lt;p&gt;The first quick reference is a whopping 13-pages alone!  That leads me to believe I&apos;ve not even begun to really use this thing.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                L33t Cooking Style
            </title>
            <link>
                https://www.hjsoft.com/blog/L33t_Cooking_Style.html
            </link>
            <pubDate>Fri, 19 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/L33t_Cooking_Style.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been developing my recipe&apos;s recently, and I&apos;ve extended my skills to beef vegetable soup!&lt;/p&gt;
&lt;p&gt;Here&apos;s my beef vegetable soup recipe:
&lt;ol&gt;
&lt;li&gt;Collect soup stuff (beef, vegetables, sauce)&lt;/li&gt;
&lt;li&gt;Throw it in the big pot&lt;/li&gt;
&lt;li&gt;Add water&lt;/li&gt;
&lt;li&gt;Cook&lt;/li&gt;
&lt;li&gt;Season with anything found in the cabinet&lt;/li&gt;
&lt;li&gt;Cook more&lt;/li&gt;
&lt;li&gt;Season more&lt;/li&gt;
&lt;li&gt;Usually ends up serving 20&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;As a bonus, here&apos;s my chili recipe:
&lt;ol&gt;
&lt;li&gt;Collect chili stuff (meat, beans, sauce, peppers, onions, garlic)&lt;/li&gt;
&lt;li&gt;Throw it in the big pot&lt;/li&gt;
&lt;li&gt;Add water&lt;/li&gt;
&lt;li&gt;Cook&lt;/li&gt;
&lt;li&gt;Season with anything found in the cabinet&lt;/li&gt;
&lt;li&gt;Cook more&lt;/li&gt;
&lt;li&gt;Season more&lt;/li&gt;
&lt;li&gt;Usually ends up serving 20&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;And my fried rice recipe:
&lt;ol&gt;
&lt;li&gt;Collect fried rice stuff (meat, cooked rice, sauce, vegetables)&lt;/li&gt;
&lt;li&gt;Throw it in the WOK! (note my versatility)&lt;/li&gt;
&lt;li&gt;Add water&lt;/li&gt;
&lt;li&gt;Cook&lt;/li&gt;
&lt;li&gt;Season with anything found in the cabinet&lt;/li&gt;
&lt;li&gt;Cook more&lt;/li&gt;
&lt;li&gt;Season more&lt;/li&gt;
&lt;li&gt;Usually ends up serving 20&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                AGP Broke My Software Suspend
            </title>
            <link>
                https://www.hjsoft.com/blog/AGP_Broke_My_Software_Suspend.html
            </link>
            <pubDate>Thu, 18 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/AGP_Broke_My_Software_Suspend.html
            </guid>
            <description>
                &lt;p&gt;Debian recently put a slicker version of hotplug in place that actually probes the PCI bus and loads all the appropriate drivers for what it finds.  It automatically loaded &lt;code&gt;intel-agp.ko&lt;/code&gt;, which I never before loaded.  This module caused a mysterious failure of swsusp.  I&apos;d end up in a resume-reboot loop.  Once I added the module to the &lt;code&gt;/etc/hotplug/blacklist&lt;/code&gt;, suspend continued functioning.&lt;/p&gt;
&lt;p&gt;I had explored all sorts of possibilities trying to fix this thing:
&lt;ul&gt;
&lt;li&gt;I had added a second swap partition (reclaiming my old S4bios partition).&lt;/li&gt;
&lt;li&gt;I downgraded my kernel to revert the latest ACPI BK patches which fixed my battery monitor.&lt;/li&gt;
&lt;li&gt;I even tried to figure out the alternative pmdisk support, which did absolutely nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;In the end, it was &lt;a href = &quot;http://marc.theaimsgroup.com/?l=swsusp-devel&amp;m=107962155803929&amp;w=2&quot;&gt;this swsusp-devel message&lt;/a&gt; which clued me into the fix.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Radical Platform Changes
            </title>
            <link>
                https://www.hjsoft.com/blog/Radical_Platform_Changes.html
            </link>
            <pubDate>Wed, 17 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Radical_Platform_Changes.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m accustomed to being the person calling to ripping out the JVM or the application server and replacing it with the latest and greatest versions, but I tried to be a little more conservative and less crazy at my current work place.&lt;/p&gt;
&lt;p&gt;Now, I hear all the talk of ripping out JVMs and app servers, but I&apos;m not the one instigating it, and I&apos;m not really included in the process.  They all seem to be good ideas, but it makes me feel uneasy to not be at the forefront.  I&apos;m just a programmer who will live with these changes.  I don&apos;t want to be just a programmer, I want to be an architect too.  Hmm.  Oh well, maybe next time.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Todd&apos;s Wedding
            </title>
            <link>
                https://www.hjsoft.com/blog/Todds_Wedding.html
            </link>
            <pubDate>Sat, 13 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Todds_Wedding.html
            </guid>
            <description>
                &lt;p&gt;Todd&apos;s wedding is today!  I wish him all the best.&lt;/p&gt;
&lt;p&gt;We setup everything last night for the reception, and got back to the hotel by about 11:30pm or so.  Todd needed to assemble the rest of his playlist for the reception, and we needed to pull one or 2 final songs from iTunes.  Pravesh dialed up his handy work account, which was too slow to pull the latest iTunes client and music in a reasonable time.  In the meantime, I fired up airsnort and found a nice wide-open wireless network from a nearby apartment, so we were on, and music collection become much simpler.&lt;/p&gt;
&lt;p&gt; I&apos;d like to thank the nice comcast user who probably didn&apos;t notice us.  Needless to say, once there&apos;s broadband (and Excedrin for sick me), there&apos;s not much need to sleep much.  Unless of course, you are Doug or Michael who didn&apos;t think there was a reason to bring a laptop. ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                More CSS Work
            </title>
            <link>
                https://www.hjsoft.com/blog/More_CSS_Work.html
            </link>
            <pubDate>Thu, 11 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/More_CSS_Work.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://insanity.lost-angel.com/&quot;&gt;Stacey&lt;/a&gt; recently &lt;a href = &quot;http://insanity.lost-angel.com/blog/archives/000404.php&quot;&gt;cleaned up her site&lt;/a&gt; with lots of nice CSS stuff, and she managed to do it much better than I had.  Having studied her code a bit, I&apos;ve implemented some of the same methods, and I eliminated some ugly javascript hacks to deal with page length.&lt;/p&gt;
&lt;p&gt;All 3 sections of the page are now absolutely placed, which was the key to getting the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; to expand to hold it all in IE.&lt;/p&gt;
&lt;p&gt;I&apos;ve also implemented cookies for comment info, extended refer display, fixed sidebar size, etc.&lt;/p&gt;
&lt;p&gt;I&apos;m l33t like Stacey.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Active Living By Design
            </title>
            <link>
                https://www.hjsoft.com/blog/Active_Living_By_Design.html
            </link>
            <pubDate>Wed, 10 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Active_Living_By_Design.html
            </guid>
            <description>
                &lt;p&gt;I found the &lt;a href = &quot;http://www.activelivingbydesign.org/&quot;&gt;Active Living By Design&lt;/a&gt; website with this &lt;a href = &quot;http://www.npr.org/display_pages/features/feature_1686259.html&quot;&gt;story about Boston&apos;s Big Dig&lt;/a&gt; at &lt;a href = &quot;http://www.npr.org/&quot;&gt;NPR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;They&apos;re acknowledging that the current trends of building communities and infrastructures with the automobile in mind has been detrimental to active lifestyles.  Boston&apos;s being afforded the opportunity to correct that now by creating safe bike and walking paths where their congested roads once were.  The alternative commuter will be safer than when they were mixed with all the cars, so maybe more people can walk to work.&lt;/p&gt;
&lt;p&gt;I&apos;ve been complaining about narrow roads (with less room for biking) and our current system of zoning for a while.  It&apos;s put all the residences together and all the convenience stores, grocery stores, any other commercial ammenities just out of reach of a walker or casual biker, so we all hop in our cars to go the 2 miles to the nearest anything.  If these things were more integrated into our communities, we wouldn&apos;t need the cars as much and it could actually be safer to walk to these places.&lt;/p&gt;
&lt;p&gt;I&apos;d love to live more actively, but I have a real problem exercising for the sake of exercising.  I want an active lifestyle where all the activity is part of accomplishing my daily tasks, not something for which I put life on hold, so I can go to the gym.

            </description>
            
        </item>
        <item>
            <title>
                Deck Progress
            </title>
            <link>
                https://www.hjsoft.com/blog/Deck_Progress.html
            </link>
            <pubDate>Mon, 8 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Deck_Progress.html
            </guid>
            <description>
                &lt;p&gt;The deck is coming along nicely.  There are pictures in the &lt;a href = &quot;http://www.hjsoft.com/gallery/Deck&quot;&gt;gallery&lt;/a&gt; of the mostly completed deck with lights and all.&lt;/p&gt;
&lt;p&gt;We&apos;re working on further wiring, which includes outlets on the deck and extending new circuits into the house for AC this summer.  I&apos;m about ready to put down the stone and fire ring within the next week or 2 as well.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (4 March 2004):&lt;/b&gt; I worked last night until about 10:30pm and have  the stone area framed nicely and dug out to make room for the gravel.  Tonight we&apos;ll try to pick some gravel, and early next week, I hope to pick it up and put it in place.  I&apos;ll have the first fire going in no time!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (8 March 2004):&lt;/b&gt; Thanks to Dougie and his borrowed truck, I have less displaced dirt in my lawn, and I have the stone and firepit in place.  Stauffer&apos;s has lots of stone, mulch, brick, etc in large quantities, so I managed to spend a fraction of what I would have had I bought stone by the 0.5 cu ft bag at Lowes or Home Depot.  Here&apos;s a &lt;a href = &quot;http://www.hjsoft.com/gallery/Deck/p3080023&quot;&gt;photo of the completed fire pit&lt;/a&gt;.  Ultimately, I expect we&apos;ll create opportunities for people to stop by within the next month.  (Party!) :)&lt;/p&gt;
&lt;p&gt;I&apos;m really glad my Dad recommended the red stone, because it really does hide the mixed in dirt.  If I had bought the snow-white marble chips, I would have immediately regretted it with the dirt that immediately got mixed with the stone as I made adjustments.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gimp: Delete Configs When Tracking 1.3
            </title>
            <link>
                https://www.hjsoft.com/blog/Gimp_Delete_Configs_When_Tracking_1.3.html
            </link>
            <pubDate>Fri, 5 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gimp_Delete_Configs_When_Tracking_1.3.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been following Gimp 1.3 for several months (as long as Debian has tracked it).  It&apos;s been working pretty nicely, and I&apos;ve made it my primary image tool.&lt;/p&gt;
&lt;p&gt;In the past couple pre-2.0 releases, I&apos;ve found that the &apos;1&apos; shortcut key for 100% zoom would trigger that function even outside the image window. In particular, it would happen in the select tool window where I was trying type &apos;1280&apos; into the fixed-ratio rectangular select.  This kept me from actually typing a &apos;1&apos; in any fields, so I&apos;d have to unbind the hotkey to use it -- quite obnoxious.&lt;/p&gt;
&lt;p&gt;I was about to file a bug against it, but I first decided to just blow away my .gimp-1.3/ directory and let the program rebuild it from scratch.  This fixed the problem!&lt;/p&gt;
&lt;p&gt;Additionally, I got the new default dialog layout which puts all the really useful dialogs into 2 windows on the screen.  I haven&apos;t taken the time to really figure out exactly how the dockable windows work to set that sort of thing up for myself.  The default does things I didn&apos;t even know were possible.&lt;/p&gt;
&lt;p&gt;It&apos;s probably good advice to try resetting configurations when tracking through multiple versions of development/unstable software.  (Reinstalling works for Windows users, so why shouldn&apos;t the rule be applied to any other unstable system?  ;) )&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Applying JSTL to the Blog Code
            </title>
            <link>
                https://www.hjsoft.com/blog/Applying_JSTL_to_the_Blog_Code.html
            </link>
            <pubDate>Wed, 3 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Applying_JSTL_to_the_Blog_Code.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://java.sun.com/products/jsp/jstl/&quot;&gt;JSP Standard Taglibs&lt;/a&gt; have definitely learned a bit from previous efforts like &lt;a href = &quot;http://jakarta.apache.org/struts/&quot;&gt;Struts&lt;/a&gt; taglibs.  Everything is built upon an expression language which makes accessing fields and objects much easier from within JSP.  I&apos;ve been able to trim quite a few bytes from my JSP using this more terse taglib set.  Additionally, these tags can be applied in other web apps without using Struts.&lt;/p&gt;
&lt;p&gt;Since my JBoss instance has Tomcat 4.x integrated instead of 5.x, I&apos;m using &lt;a href = &quot;http://jakarta.apache.org/taglibs/doc/standard-1.0-doc/intro.html&quot;&gt;Jakarta Standard Taglibs 1.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are some examples of the changes:
&lt;font size = &quot;-2&quot;&gt;
&lt;table border = &quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Struts&lt;/th&gt;&lt;th&gt;JSTL&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;bean:write name = &quot;address&quot; property = &quot;state&quot;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;c:out value = ${address.state}&quot;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;logic:notEmpty  name = &quot;pref&quot; property = &quot;paged&quot;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;c:if test = &quot;${pref.paged != null}&quot;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (3 March 2004):&lt;/b&gt; Yay, I&apos;m done and I&apos;ve deployed it.  It shouldn&apos;t look much different except for the last comment time which is new.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                How to Cancel a Meeting
            </title>
            <link>
                https://www.hjsoft.com/blog/How_to_Cancel_a_Meeting.html
            </link>
            <pubDate>Mon, 1 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/How_to_Cancel_a_Meeting.html
            </guid>
            <description>
                &lt;p&gt;Various people around here have found that they can reliably cancel our weekly department meeting by deploying broken code to production.  In all the headless-chicken-like running around, no one has time for meetings.  This has been proven a couple weeks in a row now. ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Name That Browser
            </title>
            <link>
                https://www.hjsoft.com/blog/Name_That_Browser.html
            </link>
            <pubDate>Mon, 1 Mar 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Name_That_Browser.html
            </guid>
            <description>
                &lt;p&gt;I was watching TechTV&apos;s on-demand offerings yesterday and noted that they were using Mozilla for all their on-air web demos.  In particular, they used lots and lots of tabs.  This allowed them to get all their links loaded up ahead of time, and slickly switch between all the sites and links on the sites without having to wait for them to load.  Doing this with a non-tabbed browser could have been a nightmare as they tried to page through 20 separate windows on the windows task bar.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Quizno&apos;s Road Kill
            </title>
            <link>
                https://www.hjsoft.com/blog/Quiznos_Road_Kill.html
            </link>
            <pubDate>Fri, 27 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Quiznos_Road_Kill.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve seen the new Quizno&apos;s Subs commercials a couple times.  The weird little mumbled song (&lt;i&gt;Eat Quizno&apos;s subs!&lt;/i&gt;) sticks in my head, like I&apos;m sure they intend.  That song also conjures the image of that little furry wad of road kill that sings the song.  When I look at it too closely or think about it too much, I just don&apos;t feel like eating anymore.&lt;/p&gt;
&lt;p&gt;What were they thinking?  Marketing execs, please, just say no to drugs.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Code is an Artform
            </title>
            <link>
                https://www.hjsoft.com/blog/Code_is_an_Artform.html
            </link>
            <pubDate>Thu, 26 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Code_is_an_Artform.html
            </guid>
            <description>
                &lt;p&gt;Code really is an artform as much as it is a science.  Code can be elegant and beautiful, so please remember this the next time you&apos;re tempted to &lt;b&gt;&lt;i&gt;completely mangle&lt;/i&gt;&lt;/b&gt; it with your favorite editor&apos;s cut-n-paste function or whatever.&lt;/p&gt;
&lt;p&gt;Pretty code also serves to be more readable and &lt;b&gt;maintainable&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Using an editor (vi) that requires me to think a moment before mangling has made me a better programmer, and the desire to keep any and all code in its finest form has also lead me away from inferior code-generating tools.  I&apos;ll only use generators (like Xdoclet in particular) that are elegant enough to allow me to control everything from &lt;i&gt;my&lt;/i&gt; source.  Xdoclet is usable, because I never have to try modify and maintain generated code -- I can go right back to my source.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Timex Helix WRKS
            </title>
            <link>
                https://www.hjsoft.com/blog/Timex_Helix_Works.html
            </link>
            <pubDate>Wed, 25 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Timex_Helix_Works.html
            </guid>
            <description>
                &lt;p&gt;I ordered my &lt;a href = &quot;http://www.campmor.com/webapp/commerce/command/ProductDisplay?prrfnbr=14072809&amp;prmenbr=226&quot;&gt;Timex Helix WRKS&lt;/a&gt; altimeter/barometer/thermometer/digital compass/watch, and I received it last night in the mail!
The Timex has a countdown timer where the &lt;a href = &quot;http://www.hjsoft.com/blog/link/High_Gear_Axis_Watch&quot;&gt;High Gear Axis&lt;/a&gt; did not, but the Axis had nice bar graphs that helped to more quickly recognize data trends.  The combinations of data on each screen is not quite as intuitive as the Axis.  There&apos;s a button to give quick access to the compass from the normal time function, but I would have preferred to have that quick-access button get me to the temperature or altimeter or just be configurable.  I think I&apos;ll end up leaving it in one of its other modes, like temperature/altitude instead of normal time.&lt;/p&gt;
&lt;p&gt;Most everything is controlled through the i-Control crown, which is reminiscent of the crown on an analog watch.  Wearing the watch on my right wrist (as I am left handed) makes it more difficult to control the watch, since the crown is on the right as well.  It has 2 different pulled-out positions, so it&apos;s a bit sensitive to my wrong-handed fumbling.&lt;/p&gt;
&lt;p&gt;The Timex doesn&apos;t have quite as high precision of the Axis, but I&apos;m hoping all these instruments prove more reliable.  The Timex is a simpler instrument altogether -- it doesn&apos;t have the software to try to represent sea-level air pressure and accommodate for weather-related air pressure changes.&lt;/p&gt;
&lt;p&gt;Interestingly, I can&apos;t seem to find the mode that looks like the pictures on the &lt;a href = &quot;http://www.campmor.com&quot;&gt;Campmor&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (25 February 2004):&lt;/b&gt; I&apos;ve had the watch for nearly a week now, and I&apos;ve gotten  accustomed to it, and it&apos;s working nicely.  I end up calibrating the altimeter often, which I understand is common with normal altimeters.  Weather can skew the measurements, but it won&apos;t accumulate error like the High Gear when the software tried to attribute pressure changes to weather or altitude.  This is a simpler device.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Medical Malpractice Lawsuits
            </title>
            <link>
                https://www.hjsoft.com/blog/Medical_Malpractice_Lawsuits.html
            </link>
            <pubDate>Mon, 23 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Medical_Malpractice_Lawsuits.html
            </guid>
            <description>
                &lt;p&gt;Some level of government (I forget if it&apos;s state or federal.  State makes sense, since PA really has seen an exodus of doctors) is again proposing caps on awards from medical malpractice lawsuits.  They&apos;ve previously not gotten enough votes, but they&apos;re trying it again applying a $250k cap to only obstetrics (baby birth) cases.&lt;/p&gt;
&lt;p&gt;These caps are hard to pass into law, because, in my opinion, they are the wrong thing to do.  If someone has a legitimate case, it&apos;s hard to to tell a person that they&apos;re compensation will be inadequate.&lt;/p&gt;
&lt;p&gt;The current approach has been to limit the impact of garbage lawsuits through an award cap.  Allowing an unfounded suit to proceed and just limit the damages wastes litigation time and cheats the real victims of proper compensation.  New rules and guidelines (for juries, judges, etc) must be enacted to identify the real cases and to stop the bad cases from even proceeding.  Unfounded cases should be awarded nothing.&lt;/p&gt;
&lt;p&gt;Here&apos;s another approach to make plaintiffs regulate themselves:  If you try to abuse the system by asking for exorbitant amounts, it should be kicked out of the system completely.  You&apos;re no longer allowed to go in asking for $10M hoping to get awarded a compromised $3M.&lt;/p&gt;
&lt;p&gt;Something must be done, especially in Pennsylvania.  Our doctors are fleeing the state, and we&apos;ll be left with none.  These are smart people who&apos;ve spent many years studying to help other people, and we need to stop exposing them and their insurance companies to today&apos;s flood of unfounded litigation.  It&apos;s a vicious cycle, and we, the normal people are paying the price in insurance premiums.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Debian Upgraded to XFree86 4.3 (and I feel fine)
            </title>
            <link>
                https://www.hjsoft.com/blog/Debian_Upgraded_to_XFree86_4.3.html
            </link>
            <pubDate>Fri, 20 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Debian_Upgraded_to_XFree86_4.3.html
            </guid>
            <description>
                &lt;p&gt;Yesterday I watchfully allowed &lt;code&gt;aptitude&lt;/code&gt; to upgrade my XFree86 to version 4.3 on my Debian Unstable laptop.  Initially, my Mach64 3D support broke, but I forced the gl/mach64 libs back into place, and it actually works again.  I really did not expect that, as there is a separate branch of the dri-mach64 stuff for XFree86 4.3.&lt;/p&gt;
&lt;p&gt;For some insight on getting these things installed in the first place, &lt;a href = &quot;http://www.hjsoft.com/blog/link/Mach64_DRI_on_Linux_2.6&quot;&gt;read my previous notes&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Search Referers
            </title>
            <link>
                https://www.hjsoft.com/blog/Search_Referers.html
            </link>
            <pubDate>Thu, 19 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Search_Referers.html
            </guid>
            <description>
                &lt;p&gt;I just love this stuff, so I thought I&apos;d note that I&apos;ve now optimized the display of search engine results in my referer list.  Links coming from Google or Yahoo! searches now are prefixed accordingly and show only the search string.  I&apos;ve also added &lt;i&gt;title&lt;/i&gt; attributes to the links, so you can see more of the link name in a mouse-over.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Open IM To The Opposition
            </title>
            <link>
                https://www.hjsoft.com/blog/Open_IM_To_The_Opposition.html
            </link>
            <pubDate>Wed, 18 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Open_IM_To_The_Opposition.html
            </guid>
            <description>
                &lt;p&gt;&lt;b&gt;Pssst!&lt;/b&gt;  Did you hear?  &lt;b&gt;Homosexuals&lt;/b&gt; are marrying right now in San Francisco.  The mayor is touting an equal protection law to justify it.&lt;/p&gt;
&lt;p&gt;Does it hurt?  Have you felt the repercussions in your paycheck, on your kid&apos;s educational television, or in the checkout lines in the supermarket?  Have you begun questioning the quality of your relationships now that gays can share in marriage?  Surely, they&apos;ll cause the whole state of California to slide off into the ocean, right?&lt;/p&gt;
&lt;p&gt;&lt;font size = &quot;+3&quot;&gt;&lt;b&gt;NO!&lt;/b&gt;&lt;/font&gt; Now shut up, live your lives, and let others do the same.&lt;/p&gt;
&lt;p&gt;I&apos;m so pleased with recent news, but at the same time, it angers me incredibly that we&apos;ve created a world where such things make headlines -- &quot;Extra! Extra!  People Win the Same Rights as the Other People!&quot;  It&apos;s hard to believe people will go to the  trouble to hold another group down over differences that are so insignificant in daily life.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                So What Is AOP Anyway?
            </title>
            <link>
                https://www.hjsoft.com/blog/So_What_Is_AOP_Anyway.html
            </link>
            <pubDate>Tue, 17 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/So_What_Is_AOP_Anyway.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://dynaop.dev.java.net/&quot;&gt;dynaop&lt;/a&gt; is an Aspect-Oriented Programing (AOP) framework recently released by &lt;a href = &quot;http://crazybob.org&quot;&gt;Bob Lee&lt;/a&gt;.  Bob seems to be a big thinker in AOP, having been implementing it from the beginning, including a bit of the code in JBoss.&lt;/p&gt;
&lt;p&gt;I&apos;m posting this URL here, because at first glance, it seems to be a great introduction to the concepts of AOP and docs for a well-regarded AOP engine.  This is my own personal reminder to go back and study this when I can, so I can catch up with current innovations.  I&apos;ve been reading about this everywhere, but I haven&apos;t wrapped my head around it yet, so I don&apos;t fully understand the new stuff as it develops.  It feels too much like my Calculus classes in college. :)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Cingular Buys AT&amp;T Wireless
            </title>
            <link>
                https://www.hjsoft.com/blog/Cingular_Buys_AT%26T_Wireless.html
            </link>
            <pubDate>Tue, 17 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Cingular_Buys_AT%26T_Wireless.html
            </guid>
            <description>
                &lt;p&gt;It seems that &lt;a href = &quot;http://www.msnbc.msn.com/id/4283829/&quot;&gt;Cingular won the bid for AT&amp;T Wireless&lt;/a&gt;.  I like my ATTWS service.  They have reasonable data service, and they have lots of slick phones for me to ogle.  I&apos;ve not had to call customer service much, so I can&apos;t complain there too much either.  If all goes well, Cingular will keep AT&amp;T&apos;s network and technology together, add their&apos;s into the mix, and shake up the plans and rates a  bit.  Expansion of the GSM network and some sweetened data rates could inspire me to replace our phones with some nice new GSM-only phones with all the bells and whistles, like MMS, cameras, PIM, etc.  I&apos;m hopeful.&lt;/p&gt;
&lt;p&gt;ATTWS&apos; data rates are more expensive than T-Mobile, but with my dual-mode phone, I have better overall coverage.  I can switch to TDMA when the GSM network is missing.  They&apos;ve already built out enough new GSM to tempt me to give up TDMA, and I hope adding Cingular&apos;s network and universal roaming on T-Mobile, etc will give me good reason to renew my contract and get a new phone.&lt;/p&gt;
&lt;p&gt;Of course, this could just be me being dim and not seeing how this is going to screw me in the end.  The last time my provider got bought out, I ended up ultimately switching away to AT&amp;T.  PCS One had SMS/email and free mobile-to-mobile that I liked.  When Voicestream bought them, they did away with the free air and broke email for months on end.  T-Mobile seems to have served the old PCS One customers much better after buying up Voicestream.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Unreal Tournament 2004 for Linux
            </title>
            <link>
                https://www.hjsoft.com/blog/UT2004_Linux.html
            </link>
            <pubDate>Tue, 17 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/UT2004_Linux.html
            </guid>
            <description>
                &lt;p&gt;I just &lt;a href = &quot;http://icculus.org/news/news.php?id=1879&quot;&gt;downloaded&lt;/a&gt; Unreal Tournament 2004 for Linux, so I can exercise my l33t fragging skills (ok, fine, &lt;a href = &quot;http://ars.userfriendly.org/cartoons/?id=19980326&quot;&gt;falling into lava&lt;/a&gt; skills) without having to find someone else&apos;s computer or (*shudder*) rebooting mine.  I should even have 3D support these days.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; My download was corrupted.  bzip2 complained about it.  I&apos;ve tried several times now via bittorrent (I never knew I had a bittorrent client!) and via http.  It seems I won&apos;t even get a chance to even fall in the lava.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java 2 SDK 1.5 Language Changes
            </title>
            <link>
                https://www.hjsoft.com/blog/Java_2_SDK_1.5_Language_Changes.html
            </link>
            <pubDate>Fri, 13 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java_2_SDK_1.5_Language_Changes.html
            </guid>
            <description>
                &lt;p&gt;Having glanced at a few &lt;a href = &quot;http://zamples.com/JspExplorer/samples/samplesJDK1_5.html&quot;&gt;examples&lt;/a&gt; of the new 1.5 code, I&apos;m not sure I welcome these changes.  It&apos;s probably just a case of knee-jerk concerns about backward compatibility.  I guess they were trying to make the language easier to use, but they&apos;ve introduced complexities.&lt;/p&gt;

&lt;p&gt;Autoboxing looks too much like the String concatenation mess.  Everyday I curse other developers for having concatenated Strings instead of using the StringBuffer.  This just looks like more of the same possibly inefficient behind-the-scenes work done by the language.  Hiding the real object-oriented method calls just breaks the simple paradigm for me.&lt;/p&gt;
&lt;p&gt;Generics also seem complex as well.  I&apos;d rather just implement my own collections that check and enforce a type, instead of having the language magically do it.  This extends Java beyond the realm of simple, easy rules into complex C++ land.  Variable arguments are the same way -- I could have just used an &lt;code&gt;Object[]&lt;/code&gt; array.&lt;/p&gt;
&lt;p&gt;I know when I came to Java from C, I missed my Enums, but after a couple years, I can&apos;t remember for what I would have wanted them.  &lt;code&gt;printf&lt;/code&gt; and importing static methods could be slick without causing me too many headaches.&lt;/p&gt;
&lt;p&gt;I&apos;m probably just clinging to the old familiar limitations like an old assembly language programmer.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mozilla Firefox Extensions
            </title>
            <link>
                https://www.hjsoft.com/blog/Mozilla_Firefox_Extensions.html
            </link>
            <pubDate>Wed, 11 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mozilla_Firefox_Extensions.html
            </guid>
            <description>
                &lt;p&gt;Mozilla released the follow up to Firebird 0.7, which is named Firefox 0.8.  I upgraded, not knowing that all the texturizer.net resource links were going to be non-responding, so I&apos;m searching around now for another source.&lt;/p&gt;
&lt;p&gt;The tabbed-browsing extension is a must-have.  It allows the browser to open your homepage immediately upon opening a new tab, suck popup windows or new browser windows into tabs, etc.&lt;/p&gt;
&lt;p&gt;Update: &lt;a href = &quot;http://extensionroom.mozdev.org/&quot;&gt;MozDev&apos;s Extension Room&lt;/a&gt; has the good stuff.  Texturizer&apos;s site says they&apos;ve temporarily taken down the extensions they host to help maintain a &quot;healthy and responsive&quot; server.  If it&apos;s not serving what people want, who cares if it&apos;s healthy (but useless)?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                javaHispano y Otros
            </title>
            <link>
                https://www.hjsoft.com/blog/javaHispano_y_Otros.html
            </link>
            <pubDate>Wed, 11 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/javaHispano_y_Otros.html
            </guid>
            <description>
                &lt;p&gt;Watching &lt;a href = &quot;http://www.javablogs.com&quot;&gt;java.blogs&lt;/a&gt;, I&apos;ve been quietly getting angry about all the non-english posts I see there.  These posts are taking up valuable page real estate and pushing the articles I understand off the list.&lt;/p&gt;

&lt;p&gt;The &lt;a href = &quot;http://www.javahispano.org&quot;&gt;Hispanic faction&lt;/a&gt; seems especially proud to be posting Java news in their native language.  Instead of gnashing my teeth and skipping over these articles in hopes to find something useful, I&apos;m actually going to start reading them as an opportunity to hone my aging Spanish language skills.  Based on a couple years of high school Spanish and a familiar context (Java), the articles are actually about half intelligible.  Add in a bit of &lt;a href = &quot;http://babelfish.altavista.com&quot;/&gt;the fish&lt;/a&gt;, and I can fill in the parts I didn&apos;t understand initially.  Given a bit of practice, I expect it won&apos;t be long before I&apos;m reading these without assistance.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                High Gear Axis Watch
            </title>
            <link>
                https://www.hjsoft.com/blog/High_Gear_Axis_Watch.html
            </link>
            <pubDate>Mon, 9 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/High_Gear_Axis_Watch.html
            </guid>
            <description>
                &lt;p&gt;For Christmas, I got the &lt;a href = &quot;http://www.highgearusa.com/20014.shtml&quot;&gt;High Gear Axis&lt;/a&gt; compass, thermometer, barometer, altimeter watch.  It&apos;s the coolest gadget in the world, but it&apos;s not perfect.&lt;/p&gt;

&lt;p&gt;I&apos;ve had it go nuts on me twice though.  The temperature usually reads 13 degrees high just from my body temperature, but when it goes weird, it&apos;ll drop to reading 30 or 50 degrees...inside.  The pressure sensor seems to be tied to the temperature as well, because the altitude will shoot up from the usual 320ft in my living room to 10k ft!  After a few hours it comes back down.&lt;/p&gt;
&lt;p&gt;I went to &lt;a href = &quot;http://www.ems.com/&quot;&gt;Eastern Mountain Sports&lt;/a&gt;, and they kindly replaced the watch.  The replacement last night did it again, but not to the degree the other one did.  It had climbed maybe 1000ft beyond where it should have been, and the temperature was reading 10 degrees low.&lt;/p&gt;
&lt;p&gt;I love this watch, and it was a very thoughtful gift from Claire, but it&apos;s just a tad expensive to just accept that it&apos;ll bug out every once in a while.&lt;/p&gt;
&lt;p&gt;Timex and Casio make watches which are comparable with all the features, and not quite as expensive.  I&apos;m curious if they are more or less reliable, though.  I&apos;m thinking it may just be a good idea to abandon the gadgets, as they can tend to be unreliable.  The Timex and Casio watches also don&apos;t have the nice style of this one.&lt;/p&gt;
&lt;p&gt;The altitude/barometer feature does seem to be a weird device, since they both depend upon air pressure, and it just decides which is changing by the rate at which air pressure changes.  Slow changes are generally weather, and fast changes are altitude changes.  The other issue is that I really don&apos;t &lt;b&gt;need&lt;/b&gt; any of these features.  I&apos;m not climbing anything or even spending much time outdoors.  It almost feels like a waste of a good watch.&lt;/p&gt;
&lt;p&gt;Otherwise, I&apos;m stuck on my old &lt;a href = &quot;http://www.hjsoft.com/blog/link/Gadget_Wristwatches&quot;&gt;gadget watch&lt;/a&gt; issue -- I just can&apos;t find a watch that I really want more than this one.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (9 February 2004):&lt;/b&gt; The backlight broke on the Axis Saturday morning.  I searched Saturday evening for &lt;a href = &quot;http://helix.timex.com&quot;&gt;Timex Helix&lt;/a&gt; watches, but found none, and I returned the Axis to EMS on Sunday.  I&apos;ve come to the conclusion that the Axis is just junk, unfortunately.  In a couple weekends, I hope to run out to King of Prussia mall to try to find the &lt;a href = &quot;http://www.campmor.com/webapp/commerce/command/ProductDisplay?prrfnbr=14072809&amp;amp;prmenbr=226&quot;&gt;Timex Helix WRKS&lt;/a&gt; at the EMS out there.  The guy in Lancaster checked inventory and told me they have it out there, and that I could return it in Lancaster if I don&apos;t like this one either.&lt;/p&gt;
&lt;p&gt;In the worst case, I may just stop wearing watches, or maybe just fall back to the &lt;a href  = &quot;http://www.campmor.com/webapp/commerce/command/ProductDisplay?prrfnbr=14072811&amp;amp;prmenbr=226&quot;&gt;Helix TS&lt;/a&gt; (Temperature Sensor), which is considerably cheaper.  I&apos;d be comfortable ordering that one from a web merchant.&lt;/p&gt;
&lt;p&gt;Conclusion: EMS is a great place, since they&apos;re really great about returns.  The High Gear Axis should not be purchased.  I hope I&apos;ll have much better things to report about the Timex Helix, though I don&apos;t understand why availability is so severely limited.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                MS FrontPage: New and Improved
            </title>
            <link>
                https://www.hjsoft.com/blog/MS_Frontpage_Improved.html
            </link>
            <pubDate>Fri, 6 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/MS_Frontpage_Improved.html
            </guid>
            <description>
                &lt;p&gt;Browsing other weblogs, I found a link to a &lt;a href = &quot;http://ads.osdn.com/?ad_id=2026&amp;alloc_id=2509&amp;site_id=2&amp;request_id=2948629&amp;1076027963680&quot;&gt;real ad&lt;/a&gt; showing just how much MS FrontPage has improved.  I copied it &lt;a href = &quot;http://www.hjsoft.com/~glynis/fp_ad.gif&quot;&gt;here&lt;/a&gt; as well, because it&apos;s bound to disappear from OSDN&apos;s ad server.&lt;/p&gt;
&lt;p&gt;If you don&apos;t see the humor, watch a couple more cycles of the animation.  &lt;i&gt;That&apos;s right, we said FrontPage.&quot;&lt;/i&gt;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                XML Baby Monitor
            </title>
            <link>
                https://www.hjsoft.com/blog/XML_Baby_Monitor.html
            </link>
            <pubDate>Fri, 6 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/XML_Baby_Monitor.html
            </guid>
            <description>
                &lt;p&gt;I awoke this morning from a dream to Paige fussing a bit.  As I drifted awake, I noted that I was dreaming that the baby monitor downstairs was converting and streaming all the noises as XML.&lt;/p&gt;
&lt;p&gt;The stream of XML was just spewing out into the air.  I remember just being happy to see the thing was working properly.  It&apos;s probably a good thing that the weekend is coming up.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mailing List Traffic
            </title>
            <link>
                https://www.hjsoft.com/blog/Mailing_List_Traffic.html
            </link>
            <pubDate>Thu, 5 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mailing_List_Traffic.html
            </guid>
            <description>
                &lt;p&gt;I must have learned something, or I&apos;m getting too old to keep up.  I&apos;m dropping subscriptions to a couple mailing lists which I&apos;ve found myself more and more just deleting and not reading.  These include SANE and JBoss mailing lists.&lt;/p&gt;

&lt;p&gt;I was on SANE when support for my CanoScan N670U was just being integrated -- that works fine now, so no need to follow news there.  JBoss has been working pretty nicely for me, and anytime I have troubles, I end up searching the forums anyway.  This will leave some mental bandwidth for things I&apos;m more actively learning, like linux-kernel, jakarta-struts, xdoclet, and Debian.&lt;/p&gt;
&lt;p&gt;I also dropped DCRaves, since that one&apos;s pretty noisy as well, and it&apos;s been a long time since I saw any good info for events I&apos;d go to in my immediate area.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Deck Framing
            </title>
            <link>
                https://www.hjsoft.com/blog/Deck_Framing.html
            </link>
            <pubDate>Tue, 3 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Deck_Framing.html
            </guid>
            <description>
                &lt;p&gt;Most of our new deck is framed, so we can really see the size and shape of it.  It&apos;s quite exciting to see our design actually implemented.  We set the piers and framed two-thirds of the entire deck in about 9 hours on Saturday.  Next comes a bit of electrical work and the decking.  The other one-third of the deck will probably wait a bit until either the ground thaws a bit and/or we can rent big digging tools.&lt;/p&gt;
&lt;p&gt;We also looked at lighting, and we have some great ideas.   I think I&apos;ll push to get the stone work done right away as well, after the deck is done just so I can see the whole thing in all its glory.&lt;/p&gt;
&lt;p&gt;I&apos;ve finally gotten some &lt;a href = &quot;http://www.hjsoft.com/gallery/Deck&quot;&gt;pictures&lt;/a&gt; together, including my &lt;a href = &quot;http://www.hjsoft.com/gallery/Deck/deck&quot;&gt;CAD design&lt;/a&gt; which we are following.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Replacing Kitchen Appliances
            </title>
            <link>
                https://www.hjsoft.com/blog/Replacing_Kitchen_Appliances.html
            </link>
            <pubDate>Mon, 2 Feb 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Replacing_Kitchen_Appliances.html
            </guid>
            <description>
                &lt;p&gt;Our Amana refrigerator which came with the house died over the weekend.  It&apos;s been in the process of a long, slow death for a while, but I had been hoping to correct the problem with some rigorous cleaning and parts jiggling.&lt;/p&gt;
&lt;p&gt;Claire found a cool website with parts diagrams and prices (since it was a parts store), so we knew we were in for $200 in parts (fan and compressor) plus some hefty labor fees, since it would require discharging and recharging the cooling system.&lt;/p&gt;
&lt;p&gt;On this information, we decided to just replace the whole refrigerator with a big, but cheap one from Lowes.  This is how we buy all our appliances -- We pick the &quot;big class&quot; of appliance, then buy the cheapest from that class.&lt;/p&gt;
&lt;p&gt;I&apos;m really torn though.  As a society, we insist on buying everything so cheap that it&apos;s impractical to actually repair anything.  For the cost of even the simplest repair, we just buy a new appliance and ship the old one off to the landfill.  I&apos;ve completely fed into tha cycle with my purchase of an ultra-cheap refrigerator.  I &lt;u&gt;am&lt;/u&gt; going to see if I can find a place which can take the old one and recycle it, but I don&apos;t expect to be successful, and it&apos;ll just end up in the landfill regardless.  The sheer size of the appliance amplifies this concern in my mind.&lt;/p&gt;
&lt;p&gt;Now we&apos;ve replaced the fridge and the dishwasher, and I&apos;ve had to service the garbage disposer.  The only thing left to go is the stove or the plumbing.  I can&apos;t think of a way to break the electric stove, but I fear we&apos;ll find out at some time.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Backup Space
            </title>
            <link>
                https://www.hjsoft.com/blog/Backup_Space.html
            </link>
            <pubDate>Sat, 31 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Backup_Space.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been falling behind on my backup responsibilities, since my files worth backing up have outgrown the 6G drive I have in the backup server.  For the past week or 2 I&apos;ve only been able to fit one week of nightly backups.  I used to do 3 weeks.&lt;/p&gt;
&lt;p&gt;I&apos;ve extensively researched my options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cheap IDE beast that isn&apos;t cheap enough. (&quot;It&apos;s only IDE,&quot; said the SCSI snob.)&lt;/li&gt;
&lt;li&gt;Pile of monster 47G SCSI drives which cost more to ship than they&apos;re worth.&lt;/li&gt;
&lt;li&gt;Cannibalize the 15G drive from Claire&apos;s windows box.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;EBay came to the rescue, and I spent a modest bit of my Paypal fun-money on a few SCSI adaptors and a lot of &lt;b&gt;*10*&lt;/b&gt; 18G Fujitsu SCSI drives.  Yeah!  It really is the most practical solution, since I can rack up as many as I need (maybe 2-3 initially) and keep the others on hand for quick replacement or expansion.  While not as fast as my primary drives in my server, I could use them in either my primary or my backup server as needed.  If I cared about absolute uptime I could get a RAID controller.  This could address my digital video storage problem as well.&lt;/p&gt;
&lt;p&gt;I bet Lynn would have loved to have these things just sitting around last week when he lost one in his array.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; I expect the 23-lb package on my door step this Friday. :)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (31 January 2004):&lt;/b&gt; I got the drives.  They were packaged beautifully and they shipped fast.  Getting them usable is taking a bit longer, though.  They came from a RAID array, so they&apos;re low-level formatted with 516-byte blocks, instead of 512.  Linux won&apos;t recognize the disks like that, so I had to grab a utility called &lt;a href = &quot;http://www.bit-net.com/~rmiller/scu.html&quot;&gt;scu&lt;/a&gt; and followed &lt;a href = &quot;http://doki-doki.net/~lamune/computers/blocksize/&quot;&gt;this advice&lt;/a&gt; to reset the hardware block size and perform a low-level format.  My SCSI BIOS will do the low-level, but I don&apos;t think it&apos;ll change the block size for me.  The format takes about 25 minutes.&lt;/p&gt;
&lt;p&gt;I did manage to get all the existing files on the gentoo box moved from the collection of SCSI drives to the one IDE drive.  Carlos helped me ensure grub would be bootable from the new drive.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Deck Building (or How Winter Plans to Kill Me)
            </title>
            <link>
                https://www.hjsoft.com/blog/Deck_Building.html
            </link>
            <pubDate>Fri, 30 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Deck_Building.html
            </guid>
            <description>
                &lt;p&gt;Last weekend, my Dad and I started building the new deck onto my house.  It&apos;ll look quite nice when it&apos;s done.  The only problem is getting really started.  We did pretty well the first day, but that was followed with lots of snow, so it&apos;s been pretty slow moving since then.  My neighbors probably think I&apos;m out of my mind.&lt;/p&gt;
&lt;p&gt;Really, the weather hasn&apos;t actually been that bad, as long as I keep moving.  If we delay building until Spring, though, I&apos;ll be on my own, which would be bad.  My Dad camps most weekends from early March to October, so this is the time slot in which I have to build.&lt;/p&gt;
&lt;p&gt;Once I get the deck plans redrawn, I&apos;ll see if I can post them here.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Sun Quiz Makes Me Feel Out of Touch
            </title>
            <link>
                https://www.hjsoft.com/blog/Sun_Makes_Me_Feel_Out_of_Touch.html
            </link>
            <pubDate>Thu, 29 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Sun_Makes_Me_Feel_Out_of_Touch.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.sun.com/&quot;&gt;Sun&lt;/a&gt; has a new little &lt;a href = &quot;http://java.sun.com/developer/Quizzes/ejb/applyingejb.html&quot;&gt;EJB quiz&lt;/a&gt; online.  I only scored 60% (9/15).  That&apos;s sort of disappointing.  I should know this stuff better, but I&apos;ve just not taken the time to idly read the specs, and I&apos;ve not had the opportunity to use these things yet.  I&apos;m falling behind.&lt;/p&gt;
&lt;p&gt;At least I&apos;m better at coding EJBs than &lt;a href = &quot;https://www.hjsoft.com/blog/link/Serial_Killer_Language_Inventor&quot;&gt;spotting serial killers&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                2004 State of the Union Address
            </title>
            <link>
                https://www.hjsoft.com/blog/2004_State_of_the_Union.html
            </link>
            <pubDate>Tue, 27 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/2004_State_of_the_Union.html
            </guid>
            <description>
                &lt;p&gt;The entire speech (with applause markers, interestingly) is available &lt;a href = &quot;http://www.whitehouse.gov/news/releases/2004/01/20040120-7.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;ll develop my reactions here in this article as I get time.  To start out, I am &lt;b&gt;not&lt;/b&gt; pleased.&lt;/p&gt;
&lt;p&gt;It wasn&apos;t all bad, really.  I fully appreciated the uproar of applause when GW stated that the Patriot Act was slated to expire -- There are some sane people out there who don&apos;t like limiting the rights of their constituants.  Of course, GW had to immediately follow that up with a plea to RENEW the damn thing, since infringing on the citizen&apos;s rights is supposed to be good for security or any other totalitarian agenda he has.&lt;/p&gt;
&lt;p&gt;The plan to spend money to help reintegrate ex-convicts back into society actually sounds like a good idea.  That got applause from both sides of the house.&lt;/p&gt;
&lt;p&gt;There were lots of pie in the sky budget numbers about magically reducing taxes and the deficit, but increasing spending on war efforts, etc.  No real math could support such conclusions.&lt;/p&gt;
&lt;p&gt;One of the parts that continue to be outrageous included his claims that the Kay report justifies the war, since they found signs of programs to develop weapons of mass destruction, but Kay himself has come out saying he feels there were no programs.&lt;/p&gt;
&lt;p&gt;Finally, I could not believe he brought up the constitutional ammendment to forbid gay marriage.  I could believe such schemes exist as backroom politics and disturbing pet projects, but it&apos;s just not an issue you&apos;d expect someone to seriously propose.  He talks of defending Christian marriage from the liberal judges forcing their opinions on others.  Wow!  Who&apos;s forcing who?  Allowing 2 people of the same sex to pledge their lives to each other and reap the legal benefits does not diminish whatever value is placed on a heterosexual union.  Allowing people of a different sexual orientation the same rights and protections does not rob anyone of their existing rights.  I can only hope that such sentiments will hit home with the modern, freedom-loving citizens and we&apos;ll all band together to vote him the hell out of office!  You just can&apos;t do that to people, and I&apos;ll be sorely disappointed if the nation affirms the notion that a homosexual is sub-human and undeserving of common rights accordingly.  It almost brings tears to my eyes that people are so closed minded and need to control others for no reason.&lt;/p&gt;
&lt;p&gt;Bush is out of control, waging war on other countries and his own citizens, and he has completely lost touch with the reality in the nation he&apos;s supposed to be serving.  (At least I really hope he does not represent the majority in this country.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                10 Commandments
            </title>
            <link>
                https://www.hjsoft.com/blog/10_Commandments.html
            </link>
            <pubDate>Tue, 27 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/10_Commandments.html
            </guid>
            <description>
                &lt;p&gt;There&apos;ve been quite a few stories recently about controversy over the Christian 10 Commandments in schools, government buildings, etc.  It seems some wayward judges and school administrators like to honor the commandments as the basis of our legal system and society.  The truth is that it&apos;s the only code of conduct out there.  Every major religion or philosphy has its rules.  If the state advocates one, to be fair, they must advocate all the others.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Enter law.&lt;/b&gt;  Law is the agnostic codification of the rules by which everyone is expected to abide regardless of your beliefs.  Law is the combination of all the good ideas from  all the religions, so no one religion needs to be recognized above others.  Government doesn&apos;t need to be concerned with one religion&apos;s rules, just with the laws the government itself ratifies -- Order without religious bias.  Our government was founded on religious freedom, so it can&apos;t rightly promote one over any others.&lt;/p&gt;
&lt;p&gt;Post monuments to our laws, not our religions -- the laws themselves represent our compromises and agreement as a people.  Religious monuments disregard the rights of people outside that fold.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Window Managers
            </title>
            <link>
                https://www.hjsoft.com/blog/Window_Managers.html
            </link>
            <pubDate>Fri, 23 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Window_Managers.html
            </guid>
            <description>
                &lt;p&gt;It&apos;s a slow day at work, and I&apos;m sort of burnt out on other things, so I&apos;ve switched from sawfish window manager back to metacity.  I can&apos;t remember why I even switched last time.  I&apos;m also installing icewm and openbox to play a bit.  All 4 of these are supposed to behave nicely with gnome.&lt;/p&gt;
&lt;p&gt;You Windows people don&apos;t know what your missing! ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Serial Killer or Programming Language Inventor?
            </title>
            <link>
                https://www.hjsoft.com/blog/Serial_Killer_Language_Inventor.html
            </link>
            <pubDate>Thu, 22 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Serial_Killer_Language_Inventor.html
            </guid>
            <description>
                &lt;p&gt;Aimie sent me a link to a &lt;a href = &quot;http://www.malevole.com/mv/misc/killerquiz/&quot;&gt;quiz game&lt;/a&gt;.  I sucked, I got a 4 out of 10.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                New Server Instability
            </title>
            <link>
                https://www.hjsoft.com/blog/New_Server_Instability.html
            </link>
            <pubDate>Wed, 21 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/New_Server_Instability.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m not particularly happy.  I just had to reboot my server for the second time within 24 hours.  It just dies with no response.  It&apos;s running the 2.6.1 kernel, and it was up 11 days before the first crash.  I see no logs of anything wrong.&lt;/p&gt;
&lt;p&gt;Nearly a day before the first crash, I plugged in and used my USB CD burner for the first time since I booted the new kernels.  If it crashes again, I&apos;ll try it without the burner.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update (1:56pm):&lt;/b&gt; Andrey volunteered that before each crash, he had issued a stop request to his tomcat instance on my box -- maybe it&apos;s an extreme threading issue or something (as java tends to do).  I&apos;m off to search linux kernel mail list archives to find some clues.  Of course, trying to stop his server again has had no adverse affects.  Thank you Andrey for the hint!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (10:27pm):&lt;/b&gt; After some thorough testing with Andrey, Master of Server Burnination, I got the kernel to OOPS and drop a reference to the &quot;BSD Process Accounting&quot; kernel code.  I recompiled without that option and we&apos;ve been good.  I had also tried without &quot;Preemptive Kernel&quot;, but it still crashed.  I suspect the new process/thread organization could be what&apos;s causing the problem in accounting.  I&apos;ll submit my bug report to lkml.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                CSS Selectors
            </title>
            <link>
                https://www.hjsoft.com/blog/CSS_Selectors.html
            </link>
            <pubDate>Wed, 21 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/CSS_Selectors.html
            </guid>
            <description>
                &lt;p&gt;Tracking through java.net&apos;s weblog links, etc, I found this morsel of good information:
&lt;a href = &quot;http://www.westciv.com/style_master/academy/css_tutorial/selectors/index.html&quot;&gt;CSS Selectors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It explains how to specify nested elements, directly nested elements, adjacent elements, all those weird little notations you may have seen in CSS but not fully understood.  I found it very enlightening.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mach64 DRI on Linux 2.6
            </title>
            <link>
                https://www.hjsoft.com/blog/Mach64_DRI_on_Linux_2.6.html
            </link>
            <pubDate>Tue, 20 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mach64_DRI_on_Linux_2.6.html
            </guid>
            <description>
                &lt;p&gt;I got my Mach64-based video chip (ATI Rage Mobility) doing DRI again on my Inspiron 3800 running Linux 2.6.1.  I installed the applicable Mach64 library debs and module source debs from &lt;a href = &quot;http://people.debian.org/~daenzer/dri-mach64-sid/&quot;&gt;http://people.debian.org/~daenzer/dri-mach64-sid/&lt;/a&gt;&lt;/code&gt;, unpacked the source, patched it up a bit by hand, reconfigured X a bit, and it seems I have 3D support again.&lt;/p&gt;

&lt;p&gt;I had to drop back to 16bpp default depth to get enough memory for DRI to stay enabled.&lt;/p&gt;
&lt;p&gt;To get it to even build against 26, I came up with this minimal patch to the &lt;code&gt;drm-mach64-module&lt;/code&gt; source as unpacked from daenzer&apos;s deb file:
&lt;pre&gt;
diff -rc drm-mach64/Makefile.kernel drm-mach64-2.6/Makefile.kernel
*** drm-mach64/Makefile.kernel	Tue Jan 20 14:21:52 2004
--- drm-mach64-2.6/Makefile.kernel	Tue Jan 20 14:22:29 2004
***************
*** 49,55 ****
  obj-$(CONFIG_DRM_FFB)   += ffb.o
  
  ifeq ($(BELOW2552),y)
! include $(TOPDIR)/Rules.make
  endif
  
  ifeq ($(BELOW25),y)
--- 49,55 ----
  obj-$(CONFIG_DRM_FFB)   += ffb.o
  
  ifeq ($(BELOW2552),y)
! include $(TOPDIR)/debian/rules
  endif
  
  ifeq ($(BELOW25),y)
diff -rc drm-mach64/debian/control.m4 drm-mach64-2.6/debian/control.m4
*** drm-mach64/debian/control.m4	Sun May  4 11:35:50 2003
--- drm-mach64-2.6/debian/control.m4	Tue Jan 20 14:05:10 2004
***************
*** 1,3 ****
--- 1,4 ----
+ Source: drm-mach64-module-KVERS
  Section: graphics
  Priority: extra
  Maintainer: KMAINT &amp;lt;KEMAIL&amp;gt;
diff -rc drm-mach64/drmP.h drm-mach64-2.6/drmP.h
*** drm-mach64/drmP.h	Sun May  4 12:28:46 2003
--- drm-mach64-2.6/drmP.h	Tue Jan 20 13:58:13 2004
***************
*** 48,54 ****
  #include &amp;lt;linux/init.h&amp;gt;
  #include &amp;lt;linux/file.h&amp;gt;
  #include &amp;lt;linux/pci.h&amp;gt;
! #include &amp;lt;linux/wrapper.h&amp;gt;
  #include &amp;lt;linux/version.h&amp;gt;
  #include &amp;lt;linux/sched.h&amp;gt;
  #include &amp;lt;linux/smp_lock.h&amp;gt;	/* For (un)lock_kernel */
--- 48,54 ----
  #include &amp;lt;linux/init.h&amp;gt;
  #include &amp;lt;linux/file.h&amp;gt;
  #include &amp;lt;linux/pci.h&amp;gt;
! /* include &amp;lt;linux/wrapper.h&amp;gt; */
  #include &amp;lt;linux/version.h&amp;gt;
  #include &amp;lt;linux/sched.h&amp;gt;
  #include &amp;lt;linux/smp_lock.h&amp;gt;	/* For (un)lock_kernel */
***************
*** 470,475 ****
--- 470,477 ----
  } drm_device_dma_t;
  
  #if __REALLY_HAVE_AGP
+ typedef struct agp_memory agp_memory;
+ 
  typedef struct drm_agp_mem {
  	unsigned long      handle;
  	agp_memory         *memory;
***************
*** 479,484 ****
--- 481,488 ----
  	struct drm_agp_mem *next;
  } drm_agp_mem_t;
  
+ typedef struct agp_kern_info agp_kern_info;
+ 
  typedef struct drm_agp_head {
  	agp_kern_info      agp_info;
  	drm_agp_mem_t      *memory;
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;Once it builds, the resulting deb package installs the module as &lt;code&gt;/lib/module/2.6.1/kernel/drivers/char/drm/mach64.o&lt;/code&gt;.  It needs to be renamed to &lt;code&gt;mach64.ko&lt;/code&gt;.  I couldn&apos;t figure out how to get the Makefile to do that for me, so I just did it by hand.&lt;/p&gt;
&lt;p&gt;After the X server&apos;s reconfigured, the module is installed and renamed, I restart my X server and I was in business.  Of course, my path to discovering this clear-cut method was not near as direct.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Some people reported having trouble with my patch as presented above, so here&apos;s a link: &lt;a href = &quot;http://www.hjsoft.com/~glynis/mach64/drm-mach64-2.6.patch.txt&quot;&gt;drm-mach64-2.6.patch.txt&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Holidays Are Cool
            </title>
            <link>
                https://www.hjsoft.com/blog/Holidays_Are_Cool.html
            </link>
            <pubDate>Mon, 19 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Holidays_Are_Cool.html
            </guid>
            <description>
                &lt;p&gt;For a bit there, my job afforded me the opportunity to forget how cool these little one-off holidays are.  I&apos;m supposed to get 13 holidays per year, but last year I ended up working through many of them.  This year is shaping up to be better.&lt;/p&gt;
&lt;p&gt;Having a holiday to myself (since Claire didn&apos;t take the day off) wasn&apos;t so bad.  I got to sleep a bit, sat at the computer for extended periods, then played with Paige for a bit in the afternoon.&lt;/p&gt;
&lt;p&gt;My major accomplishment has been to catch up on ALL my video editing.  I wasn&apos;t as picky this time about editing, since I had a huge backload.  I had about 25 minutes sitting on the computer since the beginning of December, and I had another 40 minutes on the camera waiting to be dumped.  I went through it all, broke it into separate little movies, encoded it to VCD mpeg, and uploaded it all to the gallery.  My plate is clean!&lt;/p&gt;
&lt;p&gt;Now I can go back to video taping Paige like a fanatic.  If you want to see the videos, they are spread around a bit.  Most can be found in the &lt;a href = &quot;http://www.hjsoft.com/gallery/Paige_Marie_Flinchbaugh&quot;&gt;Paige&lt;/a&gt; 6- to 8-month galleries, and under &lt;a href = &quot;http://www.hjsoft.com/gallery/Family_Christmas_2003&quot;&gt;Christmas 2003&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                &quot;No&quot; Means &quot;No&quot;
            </title>
            <link>
                https://www.hjsoft.com/blog/No_Means_No.html
            </link>
            <pubDate>Thu, 15 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/No_Means_No.html
            </guid>
            <description>
                &lt;p&gt;Our friends at PvP would like to remind us &lt;a href = &quot;http://www.pvponline.com/archive.php3?archive=20040114&quot;&gt;where to draw the line&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux 2.6.1 Cpufreq Controls Speedstep on my Inspiron 3800
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_2.6.1_Cpufreq_Speedstep_Inspiron_3800.html
            </link>
            <pubDate>Thu, 15 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_2.6.1_Cpufreq_Speedstep_Inspiron_3800.html
            </guid>
            <description>
                &lt;p&gt;I stumbled upon some discussion of cpufreq on a mailing list, followed some links, and ended up getting it working.  My previous attempts had only yielded a locked-up laptop.&lt;/p&gt;
&lt;p&gt;The key was to load the &lt;code&gt;speedstep-smi&lt;/code&gt; module with the &lt;code&gt;smi_cmd=0x82&lt;/code&gt; option.  This kept it from locking the whole machine.  Then I could load the &lt;code&gt;cpufreq_powersave&lt;/code&gt; and &lt;code&gt;cpufreq_userspace&lt;/code&gt; modules.&lt;/p&gt;
&lt;p&gt;I can twiddle the states directly through sysfs if I want, but I installed cpudynd to do it for me instead.  It adjusts the scaling governor according to a configurable cpu idle ratio.  When the machine is idle, it drops its speed and saves power.  I&apos;m also playing with an option to spin down the hard drive, but that&apos;s never been too successful -- I think I have too many servers running on the laptop.&lt;/p&gt;
&lt;p&gt;Adjusting the speed through the kernel interface allows the kernel to adjust for the new speeds and not skew the clock or other things on the system.  Setting Speedstep to adjust according to AC presence (in BIOS) caused problems with the clock in older 2.4 kernels, so I had always locked it to high performance.&lt;/p&gt;
&lt;p&gt;I can send USR1 and USR2 signals to cpudynd to lock it into one state or another (say from ACPI events when AC power comes and goes), or I could have used another daemon, cpufreqd, which seems to be more configurable, though at one point it had trouble setting the speed back down.  cpufreqd could account for battery level, AC presence, load, running programs (like a dvd player in its examples), and adjust the performance state accordingly.&lt;/p&gt;
&lt;p&gt;This recent success has inspired me to revisit disk power management, so maybe someday soon I&apos;ll figure out how to get the filesystems to stop flushing to disk so often and just   cache more data.  I think the answer lies somewhere within &lt;code&gt;/proc/sys/vm/*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;While reading, the cpufreqd docs mentioned that ACPI battery monitoring can be CPU-intensive, so it could be disabled.  I&apos;ve seen this since I switched to ACPI and have always been disappointed by that observation.  While debugging and trying to watch logs, I decided to disable ACPI logging in the kernel config and rebuilt, since it was so noisy on my logging console.  Eliminating the logging significantly decreased my CPU activity and the average load average dropped from 0.30 to 0.03 or so.  If you don&apos;t need it, do yourself a favor and disable ACPI logging.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                No More Need for Elastic Bands
            </title>
            <link>
                https://www.hjsoft.com/blog/No_More_Elastics.html
            </link>
            <pubDate>Mon, 12 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/No_More_Elastics.html
            </guid>
            <description>
                &lt;p&gt;I seem to have cut much of my hair off.  I&apos;ve regressed to the bowl-cut that I had nearly 8 years ago, and in one fairly quick transaction, I have no use for hair ties anymore.  That seems really odd.  I&apos;ve had long hair for years.&lt;/p&gt;
&lt;p&gt;I figured I needed a haircut, and I realized I didn&apos;t really care too much how it looked, so I just went for it.  I have not regretted it yet, and I doubt I will -- It looks alright, though I&apos;m still out of style.  Oh well.  Now I need to dig up all my Concrete Blonde, Smiths, Jesus and Mary Chain, and feel like a kid again. (I&apos;m not totally joking there.)&lt;/p&gt;
&lt;p&gt;My employer is going to think I&apos;m shopping for a new job or something. ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Search
            </title>
            <link>
                https://www.hjsoft.com/blog/Search.html
            </link>
            <pubDate>Mon, 12 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Search.html
            </guid>
            <description>
                &lt;p&gt;This J2EE stuff gets incredibly simple when you know what you&apos;re doing.  The article search that I just added only took a few hours to code, and it&apos;s even implemented &lt;i&gt;correctly&lt;/i&gt;.  I wrote a simple little Data Access Object (DAO) which builds and executes the query and returns the keys of matching articles.  Then I use the EJB&apos;s &lt;code&gt;findByPrimaryKey()&lt;/code&gt; method to actually get the full records.  Struts made stringing together a new set of pages quite easy as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Back to My Old Ways: Linux 2.6.1
            </title>
            <link>
                https://www.hjsoft.com/blog/Old_Ways_Linux_2.6.1.html
            </link>
            <pubDate>Fri, 9 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Old_Ways_Linux_2.6.1.html
            </guid>
            <description>
                &lt;p&gt;Linux 2.6.1 was released nearly 7 hrs ago, and I just booted it on my laptop.  It&apos;s a rapid upgrade cycle which is fun.  I&apos;m getting overly-confident now, though, and I&apos;m tempted to boot the new kernel on butterfly from 45 miles away.  I&apos;ll see if I can hold off.  If you see butterfly go away for half a day, you&apos;ll know I was put back in my place.&lt;/p&gt;
&lt;p&gt;Now I just need to get Todd to be ambitious and overly-confident about &lt;a href = &quot;http://cs.millersville.edu/&quot;&gt;his network&lt;/a&gt;.  He needs some excitement, right?  Has anyone else I know been booting the 2.6 kernels on interesting or important machines, yet?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (9:53am):&lt;/b&gt; Ok, so I didn&apos;t really try to wait that long.  Anyway, it works! ;)  I rule.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Walmart&apos;s Music Download Service
            </title>
            <link>
                https://www.hjsoft.com/blog/Walmart_Music_Download.html
            </link>
            <pubDate>Fri, 9 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Walmart_Music_Download.html
            </guid>
            <description>
                &lt;p&gt;Walmart&apos;s &lt;a href = &quot;http://musicdownloads.walmart.com/catalog/servlet/MainServlet&quot;&gt;new music download service&lt;/a&gt; offers commercial music at $0.88 per WMA file.  Supposedly you can play the file on your computer, upload it to a WMA player, or burn it to CD upto 10 times.&lt;/p&gt;
&lt;p&gt;Apple&apos;s iTunes has sparked my interest in legally downloadable music, but I was hoping to find a service that&apos;s actually usable from Linux.  I downloaded a test song for free from Walmart&apos;s website, and oddly enough, I found I could play it with &lt;a href = &quot;http://www.mplayerhq.hu/&quot;&gt;mplayer&lt;/a&gt; and the w32codec package from Christian Marillat&apos;s Debian package repository (apt source: &lt;code&gt;deb http://marillat.free.fr/ unstable main&lt;/code&gt;).  From mplayer, I dumped the audio to raw wav, then re-encoded it as ogg.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://xinehq.de/&quot;xine&quot;&gt;xine&lt;/a&gt; is supposed to be able to use these codecs as well.  Nice -- Walmart&apos;s service may be useful (and affordable).  Now I just need to find an affordable portable ogg player.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update (9 Jan 2004):&lt;/b&gt; As ross noted below in the comments on this entry, the test file is not DRMed, so it plays fine, while the ones you actually buy won&apos;t work.  We should buy songs and take them back then as defective, like people did with the copy-protected CDs.  Of course, they do tell you that it&apos;s not supposed to work.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Nerd for Maps
            </title>
            <link>
                https://www.hjsoft.com/blog/Nerd_for_Maps.html
            </link>
            <pubDate>Wed, 7 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Nerd_for_Maps.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m a complete nerd for maps.  I was trying to figure out the altitude of my house (to calibrate the altimeter on my watch, of course).  I stumbled upon &lt;a href = &quot;http://www.topozone.com/&quot;&gt;TopoZone&lt;/a&gt;.  They have USGS topgraphic maps of various scales online!  It&apos;s interesting to see, but they don&apos;t seem terribly printable.  Since they&apos;re trying to sell paper copies of these maps, I understand.&lt;/p&gt;
&lt;p&gt;I used to have USGS maps of the areas around my house and other places that I often found myself (Boy Scout camps, etc).  I know how to use the maps with the compass and all that stuff, so it could be useful/fun to have when biking.&lt;/p&gt;
&lt;p&gt;Armed with the digital compass on my watch, and a new mobile phone which can access and display these online maps, I could be unstoppable...as long as my batteries last, anyway! ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux 2.6.0 on the Server
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_2.6.0_on_the_Server.html
            </link>
            <pubDate>Tue, 6 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_2.6.0_on_the_Server.html
            </guid>
            <description>
                &lt;p&gt;Yesterday I started moving my server to Linux 2.6.0.  Within about 30 minutes, I had it booted and my network services (sendmail, apache, jboss, etc) were all running, and I was actually able to leave the box running for hours untouched.  After a bit of tuning and work, I found a known bug in the usb hid drivers and apcupsd, so I ended up upgrading to 2.6.1-rc1.&lt;/p&gt;

&lt;p&gt;I had to tune a few things:
&lt;ul&gt;
&lt;li&gt;The usb scanner module won&apos;t unload, so I&apos;ve bypassed it for now and let sane use libusb.  I&apos;ve sent the OOPS off to the kernel mailing list.  Having the frame pointers compiled into the kernel is great, since it means no more decoding with ksymoops -- All the symbol names are right there in the initial error messages.&lt;/li&gt;
&lt;li&gt;My alsa package had configured a bunch of modules options which were inappropriate and caused the alsa driver to not load, so I commented those out.&lt;/li&gt;
&lt;li&gt;The ide/usb-storage dependancy which we saw back in the 2.4.x kernels seems to still exist in the 2.6 kernels, so I needed to compile ide into the kernel instead of modularly.&lt;/li&gt;
&lt;li&gt;Bind 9 and proftpd pitched fits about not being able to set capabilities, so I loaded up the &lt;code&gt;capability&lt;/code&gt; module.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;psmouse&lt;/code&gt; module is needed for the mouse to work.&lt;/li&gt;
&lt;li&gt;My hotpluggable USB devices are shuffling around, so the smartmedia reader is difficult to reliably find at the same place.  I need to figure out where it will reliably show up no matter how it was plugged in.  The scanner&apos;s USB bus and device number change similarly.&lt;/li&gt;
&lt;li&gt;The cold plug of all the USB devices is a bit slow, so the hiddev was not initialized when apcupsd tried to start.  This caused apcupsd to fail until I pushed it way back to be one of the last things to start.  apcupsd also likes to complain when I&apos;m swapping around other USB devices (lost communication).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;I supposedly have ACPI, so the kernel can power-down the box and control other little things.  I have not played with that yet, since it&apos;s not all that important.  Maybe the temperature sensors will report through ACPI.&lt;/p&gt;
&lt;p&gt;The new threading structure is slick too, since now my process lists aren&apos;t overrun by a million java processes, etc.  JBoss now shows only one java process, so I can see other processes in &lt;code&gt;top&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I think at this point, I have most everything working.  I&apos;m finally doing my part to help debug these kernels, so I anxiously await the next couple kernel releases as the rest of the world starts using them.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; I have 2.6.1-rc2 on both my laptop and server now.  Nothing is all that interesting, though, which is good I suppose.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Me vs. Linux 2.6.0
            </title>
            <link>
                https://www.hjsoft.com/blog/Me_vs_Linux_2.6.0.html
            </link>
            <pubDate>Fri, 2 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Me_vs_Linux_2.6.0.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m slowly knocking out each of the short list of bugs and annoyances in Linux 2.6.0 on my Inspiron 3800.&lt;/p&gt;

&lt;p&gt;I fixed the following:
&lt;ul&gt;
&lt;li&gt;PPP was not loading because &lt;code&gt;devfsd&lt;/code&gt; had been instructed to create &lt;code&gt;/dev/ppp&lt;/code&gt;, which then got in the way when the &lt;code&gt;ppp_generic&lt;/code&gt; module tried to create it.  PPP now works.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;serial_cs&lt;/code&gt; module was not loading for my 3CCFEM556 PC card.  I almost never use that modem, but it kept my NIC from initializing.  I trashed my automatic &lt;code&gt;setserial&lt;/code&gt; config, which seemed to be trying to initialize 4 serial ports when only 2 exist on boot without the modem.  I excluded known IRQs from &lt;code&gt;/etc/pcmcia/config.opts&lt;/code&gt;, specifically IRQ 2, which &lt;code&gt;setserial -g&lt;/code&gt; was listing.  That got the PCMCIA serial device started properly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;I still have these things broken:
&lt;ul&gt;
&lt;li&gt;ALSA, &lt;code&gt;esd&lt;/code&gt;, &lt;code&gt;mpg123&lt;/code&gt;, and my Maestro3 sound chip are doing odd things with scheduling.  At times it seems like it tries to play too quickly and skips bits of the sound.  This causes music beats to sound irregular.  Some kernel/alsa people have been sending me patches to try.&lt;/li&gt;
&lt;li&gt;I&apos;ve not tried to build the Mach64 DRM/DRI stuff against this kernel yet.  I suspect those modules for previous instability in my X server, so I&apos;m waiting.  I&apos;ll just have to do without my pretty screensavers for a bit.
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;With everything getting closer and closer to working, I think I&apos;m about ready to try it on my server over the weekend.  I&apos;ve built a kernel for it already.  Wish me luck...especially if I host stuff of yours! ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Late Wishlist Entry
            </title>
            <link>
                https://www.hjsoft.com/blog/Late_Wishlist_Entry.html
            </link>
            <pubDate>Fri, 2 Jan 2004 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Late_Wishlist_Entry.html
            </guid>
            <description>
                &lt;p&gt;I could kick myself for not knowing about this &lt;a href = &quot;http://www.thinkgeek.com/electronics/cameras/655e/&quot;&gt;camera&lt;/a&gt; before Christmas.  I mean really, the people who invented this thing are going to be filthy rich.  It&apos;s awesome.&lt;/p&gt;
&lt;p&gt;Oooh, my birthday is coming up, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                JBoss Not Listening on All Interfaces
            </title>
            <link>
                https://www.hjsoft.com/blog/JBoss_Not_Listening_on_All_Interfaces.html
            </link>
            <pubDate>Wed, 31 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/JBoss_Not_Listening_on_All_Interfaces.html
            </guid>
            <description>
                &lt;p&gt;I start my JBoss 3.2.3 server with &lt;code&gt;run.sh --host=127.0.0.1&lt;/code&gt; to have it listen only on localhost, and not directly accessible to the outside world.  I found that  the naming service was still looking up the hostname and serving that hostname and IP for RMI connections.  This meant that clients (like shutdown.jar) would successfully lookup a service, but then try to connect to it on the outside interface which wasn&apos;t listening.  I&apos;d get a &lt;code&gt;ConnectException&lt;/code&gt; when trying to use the &lt;code&gt;shutdown.sh&lt;/code&gt; command even though I had specified &lt;code&gt;--server=127.0.0.1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To fix this, I added the &lt;code&gt;-Djava.rmi.server.hostname=127.0.0.1&lt;/code&gt; to my &lt;code&gt;JAVA_OPTS&lt;/code&gt; in my &lt;code&gt;run.conf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;--host&lt;/code&gt; option sets &lt;code&gt;jboss.bind.address&lt;/code&gt;.  I wonder if it could be made to override &lt;code&gt;java.rmi.server.hostname&lt;/code&gt; as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                J2EE Secret Santa
            </title>
            <link>
                https://www.hjsoft.com/blog/J2EE_Secret_Santa.html
            </link>
            <pubDate>Wed, 31 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/J2EE_Secret_Santa.html
            </guid>
            <description>
                &lt;p&gt;IBM has a &lt;a href = &quot;http://www-106.ibm.com/developerworks/library/j-santa1/index.html?ca=drs-j5103&quot;&gt;series of articles&lt;/a&gt; leading the reader through the creation of a Secret Santa application using all the J2EE bells and whistles from entity beans to jakarta-struts.  It sounds like a monument to overengineering that I thought only I cared to code, especially considering my blog is implemented much the same way.  It looks like a great educational piece though, and I look forward to studying it thoroughly.  It&apos;s even geared towards JBoss with the appropriate xdoclet tags.  It seems very odd that it doesn&apos;t include the configs for Websphere, being this an IBM article and all.&lt;/p&gt;
&lt;p&gt;Maybe we can replace the Java Pet Store with this one: Java Toy Store!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Christmas 2003
            </title>
            <link>
                https://www.hjsoft.com/blog/Christmas_2003.html
            </link>
            <pubDate>Tue, 30 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Christmas_2003.html
            </guid>
            <description>
                &lt;p&gt;I got to see lots of family this Christmas, and I actually seem to have gotten to the point in my life where I can truly appreciate that.  Lots of people got to meet Paige for the first time, as well.&lt;/p&gt;
&lt;p&gt;Claire broke our previously established agreement about not buying each other gifts, but I still ended up with a little weather/hiking station on my wrist.  This watch does temperature, altitude, air pressure (plus weather forecast by air pressure), digital compass, oh yeah, and it tells the time.&lt;/p&gt;
&lt;p&gt;I also got some nice dress shirts, some tools, and an Atari joystick.  I&apos;ve also expanded my library with a book on tape and the last William Gibson book, Pattern Recognition.  I seem to have gotten about as many toys as Paige has.&lt;/p&gt;
&lt;p&gt;I managed to extend the holiday all the way to the following Monday.  I got a bit of side work done, accidentally blew up and upgraded JBoss on my server, tempted myself a lot with ebay auctions, researched linux 2.6.0 stuff and tried a couple different recompilations of the kernel.  It was good to get a bit of time to myself.  I wish I had thought to upgrade the server to 2.6.0 while I had time to babysit it a bit.&lt;/p&gt;
&lt;p&gt;The daycare in half my house was open Monday, so I got to play with Paige a bit and still have time when I wanted it.  I went for a walk with 5 other kids as well.  It seems like a fun way to spend the day, though I know I was not there for the truly busy parts of the day.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Odd Link of the Day: RateMyRave
            </title>
            <link>
                https://www.hjsoft.com/blog/RateMyRave.html
            </link>
            <pubDate>Tue, 23 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/RateMyRave.html
            </guid>
            <description>
                &lt;p&gt;I stumbled upon an interesting link today: &lt;a href = &quot;http://www.ratemyrave.com/&quot;&gt;www.ratemyrave.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was working....honest.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Comcast Speed Upgrade
            </title>
            <link>
                https://www.hjsoft.com/blog/Comcast_Speed_Upgrade.html
            </link>
            <pubDate>Tue, 23 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Comcast_Speed_Upgrade.html
            </guid>
            <description>
                &lt;p&gt;The cablemodem was offline yesterday afternoon.  I don&apos;t mind too much though, since I&apos;m now pulling 3Mbps instead of the old 1.5Mbps.  Yeah!  Now if only they would upgrade the outgoing speed (256kbps).  It&apos;s not so that bad, really -- having recently gotten into producing a bit of digital video, I had expected the slow upload speed to be more painful than it is.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Walmart Around the Corner
            </title>
            <link>
                https://www.hjsoft.com/blog/Walmart_Around_the_Corner.html
            </link>
            <pubDate>Mon, 22 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Walmart_Around_the_Corner.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve recently heard news that Walmart has purchased a chunk of land about 2 miles from my house.  Walmart had been paying to preserve the right to buy the site, so they could buy it when their building plan was approved.  The township has been blocking it for a while, but it looks like Walmart is in for the long fight, since they&apos;ve recently bought the land now, in spite of the townships opposition to building.&lt;/p&gt;
&lt;p&gt;If it&apos;s the land I think it is, it&apos;s across from a small wetland.  I&apos;ve always assumed the wetland was there purposefully.  There are usually groups of ducks crossing the road regularly for which everyone always stops and waits.  It&apos;s quite cute.  I can&apos;t see that they&apos;ll survive Walmart traffic.  It doesn&apos;t seem to make sense that they&apos;d get rid of the wetland either.  It just seems incompatible.&lt;/p&gt;
&lt;p&gt;Additionally, I don&apos;t think a Walmart in that spot would benefit the area too greatly.  It&apos;s farmland right now with nothing around.  Why not just build the Walmart in a shopping center where those things belong, not among fields.&lt;/p&gt;

&lt;p&gt;I&apos;ve always been frustrated with the current theories in urban development.  Residential areas are neatly kept separate from commercial areas.  Supposedly, this keeps traffic and disruption away from residential areas.  I&apos;d much rather have things near me though, even within walking distance.  Zoning off everything like this necessitates the need for cars and increase traffic.&lt;/p&gt;
&lt;p&gt;If these small stores and what-not were interspersed with the homes, I could easily walk there. That&apos;s why I wanted to live in a city.  As a kid, I could never get anywhere, since I couldn&apos;t drive.  I would have much preferred to be able to walk or bike to something, anything.  My current house is still in one of these residential neighborhoods, but I&apos;m at least a bit closer to civilization.  I still must drive though, so my daughter will still grow up pretty isolated.&lt;/p&gt;
&lt;p&gt;I&apos;m all for smaller stores, but not a big mega-store necessarily.  It&apos;s going to draw traffic more than serve the community.  Once traffic picks up, I doubt it&apos;ll be safe to let Paige ride her bike down to there, even though it would be perfectly safe now.&lt;/p&gt;
&lt;p&gt;If the Walmart goes in, I&apos;ll probably still shop there for some things, but I think I&apos;ve already outgrown Walmart a bit.  It&apos;s a great place if you&apos;re looking for cheap and functional, but variety is limited as is quality I think.  Now that I can afford the &lt;i&gt;slightly&lt;/i&gt; finer things, I&apos;m a bit pickier about what I buy.  I don&apos;t need to focus only on efficiency and price.  It&apos;ll probably be good for nearby university students.&lt;/p&gt;
&lt;p&gt;&lt;a href = &quot;http://www.lancasteronline.com/&quot;&gt;Lancaster Newspapers&lt;/a&gt; have a &lt;a href = &quot;http://www.lancasteronline.com/articles/4816.shtm&quot;&gt;story&lt;/a&gt; (free anonymous survey/registration required) with some details.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux 2.6.0
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_2.6.0.html
            </link>
            <pubDate>Fri, 19 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_2.6.0.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m sure you&apos;ve read slashdot before here, so this is redundant, but it seems that the &lt;a href = &quot;http://www.kernel.org/&quot;&gt;Linux 2.6.0&lt;/a&gt; kernel source has been released.  It&apos;s been a while since I&apos;ve looked at the pre-kernels, but I can&apos;t buy that it&apos;s ready for prime time.  I&apos;ll be building it shortly and testing it on my laptop (an old Dell Inspiron 3800).&lt;/p&gt;
&lt;p&gt;Hooray for no longer having to build alsa seperately.  Debian&apos;s &lt;code&gt;kernel-package&lt;/code&gt; tool made it not quite as painful, though.  I don&apos;t look forward to trying to get the mach64 drm stuff working again though.  That&apos;s always taken some patching to get built against 2.6 kernels.  I may justn run without it for a bit to test stability.  I&apos;ve suspected mach64 for my past 2.4 troubles in X.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Everything seems to be working well enough.  Sound scheduling has much improved (become usable) from the -test5 days.  Since I was using the 2.4-ck patches before, I already saw some of the advantages of the new schedulers and a preemptive kernel, so performance of 2.6 doesn&apos;t feel all that more amazing.&lt;/p&gt;
&lt;p&gt;IRDA isn&apos;t loading right now, so I&apos;ll have to look at that later.  It&apos;s probably just a matter of changed module names.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2003-12-19 08:52&lt;/b&gt;:  I found the &lt;code&gt;/proc/sleep&lt;/code&gt; file into which I can &lt;code&gt;echo 4&lt;/code&gt; and have the machine suspend itself to it&apos;s swap partitions!  It&apos;s faster than doing a BIOS suspend-to-disk, since it doesn&apos;t blindly copy 384M of RAM to a partition.  This isn&apos;t only useful for the laptop.  I&apos;m going to use this on the server.  I&apos;ll never have to sacrifice my uptime again due to power outages.  Instead of shutting down  when the UPS gets low, I&apos;ll suspend it and resume it when the power returns!  MuahaahAAAA!&lt;/p&gt;
&lt;p&gt;Also, IRDA is working by loading the &lt;code&gt;irtty_sir&lt;/code&gt; module at boot and then letting &lt;code&gt;/etc/init.d/irda&lt;/code&gt; (which calls &lt;code&gt;irattach&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This kernel seems to represent threads differently as well.  It used to be that each thread within a process got its own pid and it was listed by &lt;code&gt;ps&lt;/code&gt;.  Now I only see &lt;i&gt;one&lt;/i&gt; &lt;code&gt;java&lt;/code&gt; process for my JBoss server instead of 25 or so.  Within its /proc/pid structure though, there&apos;s a directory called &lt;i&gt;tasks&lt;/i&gt; which has a whole collection of other PIDs.  They are grouped now, which makes process viewing a bit cleaner.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2003-12-19 09:53&lt;/b&gt;: I switched to ACPI and loaded up every last module acpi-related module.  Button events work, so the power button kicks off an &lt;code&gt;init 0&lt;/code&gt; and shutsdown properly.  Other buttons like the LID report properly.  Gnome&apos;s battery meter understands ACPI, so it displays, but the battery info seems a bit skittish and may not like swapping batteries.  Loading ACPI also caused the &lt;code&gt;/proc/sleep&lt;/code&gt; hook to move to &lt;code&gt;/proc/acpi/sleep&lt;/code&gt;.  I&apos;m also finding that I need to develop a big long suspend script which unloads/saves some things trigger suspend, then reload everything (since it continues running after resume).  This so far includes the &lt;code&gt;psmouse&lt;/code&gt; module, cardctl eject/insert, and hwclock.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Advice on Gift Giving
            </title>
            <link>
                https://www.hjsoft.com/blog/Gift_Giving_Advice.html
            </link>
            <pubDate>Fri, 19 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gift_Giving_Advice.html
            </guid>
            <description>
                &lt;p&gt;Before doing your last-minute Christmas shopping, be sure to check with &lt;a href = &quot;http://www.whatacrappypresent.com/&quot;&gt;this site&lt;/a&gt; first.  This site has good advice for givers and receivers of bad gifts.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Code Portably
            </title>
            <link>
                https://www.hjsoft.com/blog/Code_Portably.html
            </link>
            <pubDate>Tue, 16 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Code_Portably.html
            </guid>
            <description>
                &lt;p&gt;Some big thinkers have for quite some time been &lt;a href = &quot;http://www.jroller.com/page/rickard/20031213&quot;&gt;voicing disapproval&lt;/a&gt; of JBoss&apos; practices (antics?).  For the first time, I&apos;m really starting to wonder if the JBoss crowd is misleading us down a less respectable path.  Thay &lt;i&gt;are&lt;/i&gt; sort of crazy, but it takes that fringe element to draw attention and sway people. Richard Stallman does this for the &lt;a href = &quot;http://www.gnu.org&quot;&gt;Free Software Foundation&lt;/a&gt;.  The normal people fall somewhere short, but look all the saner compared to the zealots.&lt;/p&gt;
&lt;p&gt;The moral of the story is that we should avoid coding to a specific platform as much as possible, so if our platform of choice (JBoss) does go down the tubes, we can move elsewhere, like &lt;a href = &quot;http://incubator.apache.org/projects/geronimo/&quot;&gt;Apache Geronimo&lt;/a&gt;.  Of course, some people have &lt;a href = &quot;http://www.jroller.com/page/fate/?anchor=commons_primitives_is_vile_and&quot;&gt;plenty to say&lt;/a&gt; about &lt;a href = &quot;http://jakarta.apache.org/&quot;&gt;Apache Jakarta&lt;/a&gt; projects as well.  Oh well, stay fluid and don&apos;t rely too heavily upon any one server, framework, whatever.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Defend the Specification
            </title>
            <link>
                https://www.hjsoft.com/blog/Defend_the_Specification.html
            </link>
            <pubDate>Tue, 16 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Defend_the_Specification.html
            </guid>
            <description>
                &lt;p&gt;Some people expect that they can rely on the interaction spec to know how their system will be integrated with other tiers.  &lt;i&gt;Relying&lt;/i&gt; upon this spec and not accommodating and at least recovering from deviations creates a fragile tier, and then it &lt;i&gt;is&lt;/i&gt; your problem.  You can&apos;t just blame the other tier for not following the spec.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Defend&lt;/i&gt; the specification, not rely upon it.  Insist that the other tiers follow the spec or fail the transaction gracefully.   We don&apos;t need to accommodate and fix their errors, but we can&apos;t let them throw our tier into an unstable state.  Blaming the other tiers for your tier&apos;s instability is not acceptable.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Search Engines
            </title>
            <link>
                https://www.hjsoft.com/blog/Search_Engines.html
            </link>
            <pubDate>Thu, 11 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Search_Engines.html
            </guid>
            <description>
                &lt;p&gt;The adjustments I&apos;ve made, like my robots page linked but hidden on the main page has paid off in the search engines.  I&apos;m no longer seeing my search engine referers turning up the list page, but instead specific articles, often by Permalink.  This is good, because the information will always be there, and not rotated off the list like people were finding in previous months.  Yay, I&apos;m useful.&lt;/p&gt;
&lt;p&gt;I highly recommend enabling referer logs for incoming links.  It finds other people&apos;s blogs for you, and it shows you what searches are bringing people to your site.  I love being able to click the search and see with what other pages I&apos;m listed and my rank.  Now I know my worth on the internet! :)&lt;/p&gt;
&lt;p&gt;Another search engine optimization tip (in particular for Google) that I read was to make your page title meaningful.  You&apos;ll note that my article titles are now displayed.  I think that could have helped as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Beware of Psychological Effects of Cleaning the Fridge
            </title>
            <link>
                https://www.hjsoft.com/blog/Psychological_Effects_of_Cleaning_Fridge.html
            </link>
            <pubDate>Thu, 11 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Psychological_Effects_of_Cleaning_Fridge.html
            </guid>
            <description>
                &lt;p&gt;On a completely stupid note, I cleaned the refrigerator which involved feeding lots of nasty stuff to the garbage disposal.  It seems that the prolonged exposure to the satisfying grinding and whirring of the running garbage disposal can cause some wicked nightmares at 3 in the morning.&lt;/p&gt;
&lt;p&gt;This does afford me valuable awake time sitting in front of the computer, though.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Java.blogs is Dead?
            </title>
            <link>
                https://www.hjsoft.com/blog/Java.blogs_Dead.html
            </link>
            <pubDate>Thu, 11 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Java.blogs_Dead.html
            </guid>
            <description>
                &lt;p&gt;Just great!  I get my topic code in place, and I&apos;m ready to move on to building an RSS feed.  But to whom will I feed it?  &lt;a href = &quot;http://www.javablogs.com/&quot;&gt;java.blogs&lt;/a&gt; seems to be dead.  Not just failing to respond, but the DNS doesn&apos;t exist for it anymore.  Oh well, maybe it&apos;s just an administrative glitch and they&apos;ll be back.  &lt;a href = &quot;http://www.atlassian.com/&quot;&gt;Atlassian&lt;/a&gt; isn&apos;t know for 100% reliability when it comes to their servers.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Please Don&apos;t Ruin TechTV
            </title>
            <link>
                https://www.hjsoft.com/blog/Do_Not_Ruin_TechTV.html
            </link>
            <pubDate>Wed, 10 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Do_Not_Ruin_TechTV.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.shoutstudios.com/~doug/blog/&quot;&gt;Doug&lt;/a&gt; sent me a link today to a &lt;a href = &quot;http://www.tvweek.com/topstorys/120803comcast.html&quot;&gt;story&lt;/a&gt; about &lt;a href = &quot;http://www.comcast.com/&quot;&gt;Comcast&lt;/a&gt; negotiating to buy &lt;a href = &quot;http://www.techtv.com/&quot;&gt;TechTV&lt;/a&gt; from current owner Paul Allen.
Supposedly, they&apos;re looking into merging Comcast&apos;s currently failing offerings, &lt;a href = &quot;http://www.g4tv.com/html/home.asp&quot;&gt;G4&lt;/a&gt;, with the successful TechTV.&lt;/p&gt;
&lt;p&gt;To be honest, I can only hope that Comcast shows NO loyalty to their G4 partners in Los Angeles, dumps every one of their programs, and straight out replaces it with TechTV.  I&apos;ve been asking Comcast for this channel for years, but I really hope that it doesn&apos;t end up to be the demise of TechTV.  Anything they merge in from G4 will be wasted space in the on-air schedule.  G4 is all gaming, about which I don&apos;t care.  TechTV has some gaming, but it&apos;s balanced out with consumer news, science, etc.&lt;/p&gt;
&lt;p&gt;Until we see what happens, I&apos;ll continue to enjoy the limited offerings of TechTV on demand.  The recent Photoshop tips episodes of Call For Help have been quite useful.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                CAN-SPAM
            </title>
            <link>
                https://www.hjsoft.com/blog/CAN-SPAM.html
            </link>
            <pubDate>Wed, 10 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/CAN-SPAM.html
            </guid>
            <description>
                &lt;p&gt;The United States government has been hard at work coming up with cute names for their newest legislation.  After 6 years of hard work, they&apos;ve carefully crafted the latest cute name -- &lt;a href = &quot;http://news.com.com/2100-1028_3-5116940.html?tag=nefd_top&quot;&gt;CAN-SPAM&lt;/a&gt;.  Victory is imminent!&lt;/p&gt;
&lt;p&gt;Wasn&apos;t Hormel all pissed anyway about their product name being used this way?  That&apos;s why we came up with &quot;&lt;b&gt;U&lt;/b&gt;nsolicited &lt;b&gt;C&lt;/b&gt;ommercial &lt;b&gt;E&lt;/b&gt;mail&quot;.  It strikes me as inconsiderate that the government insists upon using the name as well.  Aren&apos;t they supposed to ultimately be politically correct?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Nautilus Is Sort of Necessary
            </title>
            <link>
                https://www.hjsoft.com/blog/Nautilus_Necessary.html
            </link>
            <pubDate>Mon, 8 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Nautilus_Necessary.html
            </guid>
            <description>
                &lt;p&gt;Way back when, I tried Nautilus file manager for the first time.  It was quite nice, but HEAVY and S-L-O-W, so I took painstaking steps to kill it.  This had been the habit for months and months -- If nautilus ended up running, I&apos;d kill it off, dead.&lt;/p&gt;
&lt;p&gt;With a recent gnome update, I noticed that my root desktop image no longer got set.  I&apos;d set it in the gnome configs, it would take, but then it wouldn&apos;t be enacted when I logged out and back in.&lt;/p&gt;
&lt;p&gt;I finally realized that nautilus was made responsible for everything in the root window (background and icons).  The background image dialog that I used from gnome config menu was the same as the background config dialog straight from nautilus.  I tried to start nautilus again, but I really seemed to have disabled it well -- I hate desktop icons.  It was starting and getting stuck trying to go through the automounts.  the CD would spin up just fine, but then it would proceed to try to mount the floppy device which isn&apos;t even present on the laptop.  This provided the illusion that it was just not running for me.  Once I got distracted and forgot to kill my wayward nautilus instance, it would later start after several minutes of twiddling its thumbs.  I disabled the automount of the floppy, and now I&apos;m in business.&lt;/p&gt;
&lt;p&gt;Nautilus has come a long way.  It&apos;s still as slick, but it&apos;s much faster.  I still have 2 persistent icons on my desktop, but I just ignore them and let them hide under my real work.  Most importantly, I have a pretty background again without having to use &lt;code&gt;chbg&lt;/code&gt; to manually load it.  I guess I&apos;ll play a bit with nautilus too, since it&apos;s previews and other toys are pretty slick.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Debian Is Back to Life!
            </title>
            <link>
                https://www.hjsoft.com/blog/Debian_Back.html
            </link>
            <pubDate>Mon, 8 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Debian_Back.html
            </guid>
            <description>
                &lt;p&gt;Since the &lt;a href = &quot;http://www.debian.org/News/2003/20031121&quot;&gt;server compromise&lt;/a&gt; back on 21 November 2003, Debian&apos;s archives have been pretty static.&lt;/p&gt;
&lt;p&gt;It seems that they&apos;re serving updates again, so I&apos;m back on my adventurous and rapid update schedule.  It&apos;s been a rough and stagnant period. :)&lt;/p&gt;
&lt;p&gt;Actually, who do I know that still runs Debian?  It seems like many have moved onto gentoo.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Topics
            </title>
            <link>
                https://www.hjsoft.com/blog/Blog_Topics.html
            </link>
            <pubDate>Mon, 8 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Blog_Topics.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve added topics to my blog.  Yay.  I have to say, it&apos;s coming along nicely.  I still have a bit I want to implement though (RSS, search, email notification, comment editing maybe, dynamic links, etc).  Navigation could always be enhanced as well.&lt;/p&gt;&lt;p&gt;I feel like I&apos;m getting a reasonable understanding of Struts as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TV Night: Scrubs
            </title>
            <link>
                https://www.hjsoft.com/blog/TV_Scrubs.html
            </link>
            <pubDate>Fri, 5 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/TV_Scrubs.html
            </guid>
            <description>
                &lt;p&gt;Thursday night TV was rather disappointing.  Everything was re-runs.  Scrubs was really odd.  JD realizes that the &lt;a href = &quot;http://www.imdb.com/name/nm0283568/&quot;&gt;janitor guy (Neil Flynn)&lt;/a&gt; used to be an actor before a janitor.  He had a higher ambition -- something with which JD could relate.  He recognizes him in the movie, &lt;a href = &quot;http://www.imdb.com/title/tt0106977/&quot;&gt;The Fugitive&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The really odd thing is that Neil Flynn &lt;b&gt;really&lt;/b&gt; is the transit cop in The Fugitive.  I wasn&apos;t paying close attention to the segment of The Fugitive that they played, so I had to look it up on &lt;a href = &quot;http://www.imdb.com/&quot;&gt;IMDB&lt;/a&gt;.  Plot-wise, I doubt it is significant, but it&apos;s still an odd twist in &quot;show reality&quot;, and I don&apos;t recall seeing anything like that done in other shows.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Ticketmaster
            </title>
            <link>
                https://www.hjsoft.com/blog/Ticketmaster_Sucks.html
            </link>
            <pubDate>Thu, 4 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Ticketmaster_Sucks.html
            </guid>
            <description>
                &lt;p&gt;Nice, I saw this at the bottom of an unwelcome email:
&lt;i&gt;As a Ticketmaster user, you agree that Ticketmaster may contact you by email or
other means and use and disclose the information you submit, as described in
the Ticketmaster Privacy Policy.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Here, I thought they were just screwing me with their (in)convenience fees which amounted to about &lt;b&gt;20%&lt;/b&gt; of the ticket price!  Now, they&apos;re selling my info to spammers and spamming me themselves.  I swear I unclicked the little box that suggested they send me crap, but I guess it didn&apos;t take.&lt;/p&gt;
&lt;p&gt;If only events didn&apos;t end up exclusively Ticketmaster.  &lt;a href = &quot;http://www.cyberseats.com/&quot;&gt;Cyberseats&lt;/a&gt; has an AWESOME system where you can click the seat you want, instead of this &quot;maybe we&apos;ll find you seats somewhere&quot; crap.  &lt;a href = &quot;http://www.whitakercenter.org/home/&quot;&gt;Whitaker Center&apos;s Sunoco Theater&lt;/a&gt; uses this technology along with others.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Creating VCDs
            </title>
            <link>
                https://www.hjsoft.com/blog/Creating_VCDs.html
            </link>
            <pubDate>Thu, 4 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Creating_VCDs.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been faithfully compressing my edited video into MPEGs suitable for Standard VCDs.  I&apos;ve finally gotten around to trying to burn these onto CD and see what they do.&lt;/p&gt;
&lt;p&gt;It&apos;s not quite as simple as just sticking the file into an ISO9660 image and going.  I had to feed the MPEG file to &lt;code&gt;vcdimager&lt;/code&gt;.  That produced a CD image and a  cue config file for &lt;code&gt;cdrdao&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The CD played just fine in my cheap DVD player, and it looked good!  It was about VHS quality, I would say.  An attempt to burn a 12-minute video resulted in a shorter truncated video, so I&apos;ll have to look into that, but it&apos;s at least a start.&lt;/p&gt;
&lt;p&gt;I now have a conventional way to distribute video that only requires a common and accessible consumer-grade DVD player.  Yay, toys!...and Paige videos for the grandparents.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Christmas Season Is Upon Us
            </title>
            <link>
                https://www.hjsoft.com/blog/Xmas_2003_PVP.html
            </link>
            <pubDate>Mon, 1 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Xmas_2003_PVP.html
            </guid>
            <description>
                &lt;p&gt;The folks at PVP sum it all up with this &lt;a href = &quot;http://www.pvponline.com/archive.php3?archive=20031130&quot;&gt;comic&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Simplistic View of Globalization and the Economy
            </title>
            <link>
                https://www.hjsoft.com/blog/Simple_View_of_Globalization.html
            </link>
            <pubDate>Mon, 1 Dec 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Simple_View_of_Globalization.html
            </guid>
            <description>
                &lt;p&gt;I listen to NPR news most of the time I&apos;m commuting to and from work.  In particular, I listen to &lt;a href = &quot;http://www.marketplace.org/&quot;&gt;Market Place&lt;/a&gt;.  I&apos;m a white-collar worker and not directly affected by manufacturing jobs moving out of our country.&lt;/p&gt;
&lt;p&gt;Basically, people who find their jobs being eliminated and moved to Mexico or China are caught in a vicious cycle.  Their employment is being cut back or eliminated, so they have less money and shop for cheaper goods imported from China or Mexico (ala Walmart, etc).  Our own bargain hunting eliminates the demand for our American factory workers.&lt;/p&gt;

&lt;p&gt;I say let the jobs go to these developing nations!  We&apos;ve had our time building our nation&apos;s economy on these raw manufacturing jobs, now let someone else do it.  Those other nations produce goods cheaper, so we can buy it cheaper.  We can then get by with the less money.  People working hard in American manufacturing jobs can take the paycut, buy cheaper, and enjoy their free time, or move onto more advanced white-collar jobs that require the more advanced skills of an American who learned and trained in this more advanced society.  It&apos;s evolution of the society!  We can increase our leisure time, while funding those developing nations who need our money.&lt;/p&gt;
&lt;p&gt;Now, I admit this is an incredibly simplistic view and easily said by programmer with a rather secure job.  While I enjoy coding, I like to think that if my job was moved to India, I&apos;d move up the chain and become one of the more advanced Americans who design and architect the system that the more needy offshore programmers code.  I&apos;d have more free time, since my architect job would only require me to work 30 hours, my employer could still pay me, because they&apos;re saving money on the contracted programmers, and I&apos;d continue to buy chinese goods to maintain my standard of living on whatever my reduced labor is worth.&lt;/p&gt;
&lt;p&gt;My opinion would probably be different if I was scrounging for the programmer job I have now, and I couldn&apos;t get the higher position for whatever reason.  This is probably the situation for many Americans clinging to their jobs which are being outsourced -- unable to advance for social, educational, personal, whatever reasons.  I&apos;m greatly interested in &lt;b&gt;your&lt;/b&gt; opinion, so leave some comments.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Digital Video, Part 2
            </title>
            <link>
                https://www.hjsoft.com/blog/Digital_Video_2.html
            </link>
            <pubDate>Sat, 29 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Digital_Video_2.html
            </guid>
            <description>
                &lt;p&gt;We&apos;re really starting to settle on the Samsung camera.  It&apos;s just too slick with all its features.  Additionally, the Samsung actually communicated with the computer easily, unlike the Canon.  I&apos;ve also been working more with the video on the computer, which put me in front of the computer until 2:30am for a second night in a row -- today will definitely be a day for the &lt;i&gt;fast&lt;/i&gt;-drip intravenous coffee.&lt;/p&gt;

&lt;p&gt;In kino, I managed to get the software controlling the camera (start, stop, rewind, fast-forward) by enabling the &lt;b&gt;AV/C&lt;/b&gt; button on the capture screen.  I captured the entire 30 minutes or so that&apos;s been recorded so far from the Samsung.  It amounted to about 5G.  I then managed to export a short segment of Paige playing (read pounding upon gleefully) with my old dvorak keyboard.  It&apos;s 18M as a high-res, dvd-quality mpeg file.  I still need to figure out scaling to make these videos more deliverable.  I was thinking about archiving the videos on the original tape, since it&apos;s cheaper than hard drive space, but Claire had the excellent idea of burning the videos to CD.  If I format the CD the right way, I should be able to play it as a VCD in any DVD player as well.  DivX is another option, but I doubt that&apos;s compatible with consumer DVD players.&lt;/p&gt;
&lt;p&gt;I&apos;ve been reading the Samsung manual now and figured out how to turn on the digital image stability feature to help compensate for my shaky hands.  I also figured out that it has an &quot;Easy.Q&quot; mode which set everything on automatic and disables the bells and whistles that confuse the novice.  I like a maze of configurations and options, but Claire may appreciate that capability.&lt;/p&gt;
&lt;p&gt;To follow the thread, this started in this previous article, continued in comments, and has thus far come to this article: &lt;a href = &quot;http://www.hjsoft.com/blog/showArticle.java?id=61&quot;&gt;Digital Video&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Digital Video
            </title>
            <link>
                https://www.hjsoft.com/blog/Digital_Video_1.html
            </link>
            <pubDate>Sat, 29 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Digital_Video_1.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m now the proud owner of a &lt;a href = &quot;http://www.canondv.com/zr65mc/zr65mc_flash.html&quot;&gt;Canon ZR65MC&lt;/a&gt; mini-DV camera, a &lt;a href = &quot;http://www.samsung.com/Products/Camcorder/Mini_DV/Camcorder_Mini_DV_SCD27.htm&quot;&gt;Samsung SCD27&lt;/a&gt; mini-DV camera, and a no-name Firewire (IEEE1394) card with useless Windows software.&lt;/p&gt;
&lt;p&gt;Even though it appears that I&apos;m wired for internet porn production, have no fear, we&apos;re just evaluating cameras and making &lt;a href = &quot;http://baby.hjsoft.com/&quot;&gt;Paige&lt;/a&gt; a STAR!&lt;/p&gt;
&lt;p&gt;Paige does cute things everyday.  We&apos;ve been able to capture some of it in &lt;a href = &quot;http://www.hjsoft.com/gallery/Paige_Marie_Flinchbaugh&quot;&gt;still photos&lt;/a&gt;, but we&apos;re really missing the cute little motions and SOUNDS!  Someday, we&apos;ll want to look back and and show Paige when she used to be cute (before she was a know-it-all teenager and not as cute).&lt;/p&gt;
&lt;p&gt;So, back to the equipment, watch this space for reviews as we play with these things.  One camera is destined to return to &lt;a href = &quot;http://www.circuitcity.com/&quot;&gt;Circuit City&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After our first night of playing, the Canon has a nicer display and feels sturdier (heavier), but the Samsung seems easier to use and navigate, has more features, is lighter, and costs less.  Admittedly, I have not cracked any manuals for either camera yet.  I haven&apos;t installed the Firewire card yet, either.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                PermaLinks
            </title>
            <link>
                https://www.hjsoft.com/blog/PermaLinks.html
            </link>
            <pubDate>Sat, 29 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/PermaLinks.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been busy some more.  I have permalinks now for your linking pleasure.  My other neat feature is that I can start a blog, save it with the &lt;i&gt;incomplete&lt;/i&gt; flag set, and come back to it later without actually having you see it yet.  Ah, secrets.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Technical Training
            </title>
            <link>
                https://www.hjsoft.com/blog/Technical_Training.html
            </link>
            <pubDate>Sat, 29 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Technical_Training.html
            </guid>
            <description>
                &lt;p&gt;Over at the &lt;a href = &quot;http://www.jroller.com/page/fate/20031119#the_joy_of_training_programs&quot;&gt;BileBlog&lt;/a&gt;, Hani denounces the value of any training program.  I have to say that I&apos;ve been to some very worthwhile trainings, though with the tone of his post, I&apos;d be embarassed to post that as a comment on his blog.&lt;/p&gt;
&lt;p&gt;Sun&apos;s &lt;a href = &quot;http://training.sun.com/US/catalog/courses/FJ-310.html&quot;&gt;FJ-310: Developing J2EE Compliant Applications&lt;/a&gt; course was an excellent introduction and jumpstart in J2EE.  I had been studying it on my own for some months, but this course really showed me the big picture, and from there I could understand why I was doing this and how it could be applied.  My studies following that training had a much more productive direction.  It was just what I needed to get my traction and stop spinning my wheels.&lt;/p&gt;
&lt;p&gt;Not all training is worthless, and I&apos;m grateful that my employer at the time sent me.  I&apos;d highly recommend that course to any savvy beginner.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Digital Video, Part 3
            </title>
            <link>
                https://www.hjsoft.com/blog/Digital_Video_3.html
            </link>
            <pubDate>Sat, 29 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Digital_Video_3.html
            </guid>
            <description>
                &lt;p&gt;Even though we&apos;ve decided to keep the Samsung camera, I still needed to get the video off the Canon, which previously did not talk to the computer.  I found that the tapes aren&apos;t strictly compatible, since the Samsung would play the Canon&apos;s tape, but it showed strange blocks dancing through the image at times.&lt;/p&gt;

&lt;p&gt;with some screwing around, I found that I could get the Canon to be recognized by my linux server if I unloaded all the 1394 modules, plugged in the camera, then loaded  &lt;code&gt;dv1394.o&lt;/code&gt;, which pulled in &lt;code&gt;ohci1394.o&lt;/code&gt;, &lt;code&gt;ieee1394.o&lt;/code&gt;, and &lt;code&gt;raw1394.o&lt;/code&gt;.  Then &lt;code&gt;dvgrab&lt;/code&gt; could see the camera, but &lt;code&gt;kino&lt;/code&gt; still couldn&apos;t.  I decided to just dump the whole thing with &lt;code&gt;dvgrab&lt;/code&gt; and just load the captured video into &lt;code&gt;kino&lt;/code&gt; later.&lt;/p&gt;
&lt;p&gt;So now, I have 2 mostly-full SCSI drives and no where to go.  Claire and I started editting down videos, so hopefully I can clean up some of that space soon.  Surprisingly, Claire seems to like playig with &lt;code&gt;kino&lt;/code&gt;, so it must be a very nice piece of software.  Score 1 more point for the linux desktop!&lt;/p&gt;
&lt;p&gt;And in temptation and shopping news, my full hard drives make a nice case for adding storage.  Also, I&apos;m pretty convinced now that the video and sound sharing the PCI bus is causing my sound issues on my more-than-adequate dual Athlon server, so an AGP video card seems in order.  I can then get a card with TV out, so I can get finished videos on VHS if I need.  Otherwise, I&apos;ll see what formats I can burn to CD and have read by my DVD player.&lt;/p&gt;
&lt;p&gt;SVCD format seems nice, but VCD looks just as good in half the space.  Generic MPEG seems to be the same size as VCD, but the quality doesn&apos;t compare.   VCD also sounds more like it may work for the consumer DVD player.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Does Any Other Blog Allow You To Do This? *
            </title>
            <link>
                https://www.hjsoft.com/blog/72.html
            </link>
            <pubDate>Wed, 26 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/72.html
            </guid>
            <description>
                &lt;p&gt;People who post any new comments on my blog now have the option of deleting them as well, just in case you say something you later regret. :)&lt;/p&gt;
&lt;p&gt;It only works from the computer where it was posted, though.  Give it a try!&lt;/p&gt;
&lt;p&gt;* (No, I haven&apos;t actually looked for myself.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Total Drum and Bass
            </title>
            <link>
                https://www.hjsoft.com/blog/Total_Drum_and_Bass.html
            </link>
            <pubDate>Wed, 26 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Total_Drum_and_Bass.html
            </guid>
            <description>
                &lt;p&gt;Such a self-proclaiming name like &lt;i&gt;Total Drum &amp;amp; Bass Mix&lt;/i&gt; reminds me way too much of the &lt;i&gt;MTV Jock Jams&lt;/i&gt; (&quot;Y&apos;all ready for this?...doo dah dah daaaah duh dah duh...&quot;), but the CD is actually pretty decent -- &lt;a href = &quot;http://www.moonshine.com/&quot;&gt;Moonshine Records&lt;/a&gt; has always known what it&apos;s doing.  The CD has names I&apos;ve heard, but tracks I have not.  It&apos;s also quite clean and devoid of lyrics or rap, unlike Dieselboy&apos;s latest, &lt;i&gt;Project Human&lt;/i&gt;.  It&apos;s not as fast, but it still has a decent pace.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Javascript to Clean up IE Interface (or I Am The Master of All Things Web!)
            </title>
            <link>
                https://www.hjsoft.com/blog/71.html
            </link>
            <pubDate>Mon, 24 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/71.html
            </guid>
            <description>
                &lt;p&gt;OK, well maybe I don&apos;t rule everything, but I have crafted a bit of javascript into the site now that squishes and stretches the absolute &lt;code&gt;div&lt;/code&gt;s into their correct sizes.  Now the site won&apos;t look quite like crap in IE.&lt;/p&gt;
&lt;p&gt;I basically grab the middle of the layout and set its height to that of the left panel if the left is longer than the content (stretch).  For the stars, I loop through all the content &lt;code&gt;div&lt;/code&gt;s, and set the stars &lt;code&gt;div&lt;/code&gt; to the height of the content &lt;code&gt;div&lt;/code&gt; (squish).&lt;/p&gt;
&lt;p&gt;I thank Carlos for getting me pointed more precisely in the right direction.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Simple Page Additions
            </title>
            <link>
                https://www.hjsoft.com/blog/70.html
            </link>
            <pubDate>Mon, 24 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/70.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m stretching the left side of this page a bit.  We have the pager, referers, blogs, and now my web comics I read.  You know everything about me now.  (Well, technically, I guess I should add my new links as well.)&lt;/p&gt;
&lt;p&gt;Also, don&apos;t forget to heed my advice and install Mozilla Firebird.  You&apos;ll also find that lynx does a better job of dealing with my stylesheets than Internet Explorer does. :)  The poor IE users will notice that the left bar will at times extend below their view, since IE doesn&apos;t like to actually recognize that a &lt;code&gt;position: absolute&lt;/code&gt; component actually exists within its parent, hence the * problem as well.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Gadget Wristwatches
            </title>
            <link>
                https://www.hjsoft.com/blog/Gadget_Wristwatches.html
            </link>
            <pubDate>Thu, 20 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Gadget_Wristwatches.html
            </guid>
            <description>
                &lt;p&gt;I seem to have popped the pin from my current watch for the last time, so it looks like it&apos;s time to shop for a new watch.  Has anyone seen any truly cool gadget watches?&lt;/p&gt;
&lt;p&gt;Casio and Timex do cool things, but they don&apos;t adequately combine those features into ONE watch.  In the same watch, I&apos;d really like a thermometer and the capability to set its own time according to radio time signals.  Those are the big features I want, but Casio would have me buy 2 different watches to get those features.&lt;/p&gt;
&lt;p&gt;I had a Timex DataLink watch, but it&apos;s really not as useful as you&apos;d think.  I&apos;m not sure I need storage.  Citizen also makes the Eco-Drive watches which have solar faces.  Those are neat but very expensive -- I have good taste in solar watches I guess.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Christmas on Slashdot
            </title>
            <link>
                https://www.hjsoft.com/blog/68.html
            </link>
            <pubDate>Thu, 20 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/68.html
            </guid>
            <description>
                &lt;p&gt;I saw this random comment on a &lt;a href = &quot;http://slashdot.org/articles/03/11/20/148246.shtml?tid=159&amp;tid=186&amp;tid=98&amp;tid=99&quot;&gt;Slashdot story&lt;/a&gt;, and I think my Christmas list just got a little shorter.  I&apos;ll just be happy with the abundance of good fortune I already have:&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;
I&apos;m pretty much a gadget geek. Here are some of the things that I want for Christmas:&lt;br/&gt;
&lt;br/&gt;
1) Job, so that I can buy these things for myself. Being laid off sucks.&lt;br/&gt;
2) Something for my daughter, besides the bare necessities.&lt;br/&gt;
3) Something for my wife. She works hard because I&apos;m laid off.&lt;br/&gt;
4) December&apos;s mortgage payment.&lt;br/&gt;
5) November&apos;s property tax payment.&lt;br/&gt;
6) One night of uninterrupted sleep.&lt;br/&gt;
7) A two-month contract, just enough to get through December&lt;br/&gt;
8) A month contract, just enough to get through November.&lt;br/&gt;
9) A week contract, just enough to pay my phone and electric bill.&lt;br/&gt;
10) All the above for my friend, who&apos;s worse off than I am.&lt;br/&gt;
&lt;br/&gt;
I stopped dreaming about dual Opterons about six months ago.
&lt;/i&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux Audio (Which Is Important to Video Playback of Course)
            </title>
            <link>
                https://www.hjsoft.com/blog/66.html
            </link>
            <pubDate>Wed, 19 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/66.html
            </guid>
            <description>
                &lt;p&gt;Here&apos;s my informational link of the day: &lt;a href = &quot;http://www.linuxdj.com/audio/quality/&quot;&gt;http://www.linuxdj.com/audio/quality/&lt;/a&gt;.  I look forward to trying this out on butterfly and maybe getting it to reproduce video and sound tolerably.  My first tweak will be the &quot;pci_retry&quot; flag.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Performance of Exception Handling
            </title>
            <link>
                https://www.hjsoft.com/blog/Performance_of_Exception_Handling.html
            </link>
            <pubDate>Tue, 18 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Performance_of_Exception_Handling.html
            </guid>
            <description>
                &lt;p&gt;I hate checking nulls in my code.  It seems so blatantly inefficient -- blindly checking if &lt;code&gt; x != null&lt;/code&gt; before I do anything with it.  Those are wasted CPU cycles!&lt;/p&gt;
&lt;p&gt;I like to do this instead:
&lt;pre&gt;
String x = &quot;default&quot;;
try {
    x = request.getParameter(&quot;x&quot;).toString();
} catch (NullPointerException ignored) { }
&lt;/pre&gt;
&lt;p&gt;According to this &lt;a href = &quot;http://www-106.ibm.com/developerworks/java/library/j-perf07303.html&quot;&gt;article&lt;/a&gt;, though, my way could be even more grossly inefficient than testing nulls all the time.&lt;/p&gt;
&lt;p&gt;It seems that while I&apos;m saving time not checking null all the time, in the cases where it is null, it takes especially long to snapshot the system, produce the Exception stack trace, and throw it.  try-catch blocks don&apos;t really take extra time, it&apos;s the creation of an Exception when I let them happen which cause the performance hit.&lt;/p&gt;
&lt;p&gt;This is quite disappointing, as I always thought my way was a slick enhancement, but it makes perfect sense that it is not.  I expect I&apos;ll find a balance somewhere in between my wasteful use of exception handling and implementing fanatical null checks around every corner.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Performance of Exception Handling, Part 2
            </title>
            <link>
                https://www.hjsoft.com/blog/63.html
            </link>
            <pubDate>Tue, 18 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/63.html
            </guid>
            <description>
                &lt;p&gt;I decided to test just how much of a performance hit we incur by just handling the exceptions instead of avoiding them.  It&apos;s worse than I expected.&lt;/p&gt;
&lt;p&gt;Here&apos;s the code:
&lt;pre&gt;
public class ExceptionTest {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i &lt; 1000000; i ++) {
            Object x = null;
            String y = &quot;y&quot;;
            try {
                y = x.toString();
            } catch (NullPointerException ignored) { }
        }
        System.out.println(System.currentTimeMillis() - start);

        start = System.currentTimeMillis();
        for (int i = 0; i &lt; 1000000; i ++) {
            Object x = null;
            String y = &quot;y&quot;;
            if (x != null) {
                y = x.toString();
            }
        }
        System.out.println(System.currentTimeMillis() - start);
    }
}
&lt;/pre&gt;
&lt;p&gt;And the results:
&lt;pre&gt;
92037
20
&lt;/pre&gt;
&lt;p&gt;Unbelievable!  It makes sense though, since the one that used exceptions needed to create 1 million NullPointerException objects, and the other created no objects.  This loop amplifies the affect, so maybe it&apos;s still not so bad if you&apos;re just doing it once through.  I think personally, I&apos;m going to start checking nulls again.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Wind Power(-less)
            </title>
            <link>
                https://www.hjsoft.com/blog/60.html
            </link>
            <pubDate>Fri, 14 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/60.html
            </guid>
            <description>
                &lt;p&gt;I lost power last night due to the wind.  It was not a happy feeling.  At first it was just interesting to see how the computers on backup power did.&lt;/p&gt;
&lt;p&gt;The power was off for probably about 1.5 hrs, so the computers had a chance to shutdown.  Butterfly did just fine.  All the network hardware is plugged in with it, so I found that my internet access persists through neighborhood blackout.  Of course, right after I IMed Dinger to tell him that, butterfly shut itself down for the battery being too low.&lt;/p&gt;
&lt;p&gt;The gentoo box is on the old UPS, and it misunderstood the power state, and thought the battery was low from the start, so it shutdown almost immediately during an earlier flicker.  After that, &lt;code&gt;apcupsd&lt;/code&gt; didn&apos;t come up, since I forgot to link it to the default runlevel, so it didn&apos;t know about the big power outage and died while I tried to shut it down manually over a screaming UPS.&lt;/p&gt;
&lt;p&gt;Besides computers, it was eerily dark, and we immediately got paranoid about our electric heat not being operational.  Having grown up in the country without city water supplies, it went against my every shred of common sense to expect the toilet to work without power too.&lt;/p&gt;
&lt;p&gt;Everytime the power flickered out we heard this massive humming kick up then die away.  It sounded like a big HVAC system or a machine room shutting down.  We have neither in our house, so I &lt;b&gt;really&lt;/b&gt; wonder what that was.  It kind of sounded like it came from somewhere nearby outside.&lt;/p&gt;
&lt;p&gt;Finally, just to take my mind off our impending doom and to satisfy curosity, we packed Paige up and went for a drive to see how wide-spread this outage was.  Our neighborhood was all out, but the neighboring neighborhoods were fine.  There was already a power utility truck driving around trying to locate the problem, so that was encouraging.  Surprisingly, we found Rt741 into Millersville to be dead too.  Those lights came back on as we got into Millersville, so we turned back around expecting it was over.  We found our little neighborhood still dark, though, so we drove another loop and it was back by the time we returned 10 minutes later.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Quest for TechTV
            </title>
            <link>
                https://www.hjsoft.com/blog/59.html
            </link>
            <pubDate>Wed, 12 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/59.html
            </guid>
            <description>
                &lt;p&gt;Comcast has select shows from &lt;a href = &quot;http://www.techtv.com/&quot;&gt;TechTV&lt;/a&gt; available through their on-demand service.&lt;/p&gt;
&lt;p&gt;It&apos;s amazing how useful and interesting their programming can be.  It&apos;s not just about gaming.  They cover lots of future technology like solar-powered water taxis, critter-cam, and all sorts of various new gadgets.  They even had a very impressive &lt;a href = &quot;http://www.techtv.com/freshgear/shownotes/story/0,23008,3445335,00.html&quot;&gt;Star Trek apartment&lt;/a&gt;.  I&apos;m pleased, but I still wouldn&apos;t mind a full 24-hr channel.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Referer Whoring
            </title>
            <link>
                https://www.hjsoft.com/blog/58.html
            </link>
            <pubDate>Mon, 10 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/58.html
            </guid>
            <description>
                &lt;p&gt;Yay.  The Referer List works, and you&apos;ve probably all seen me bouncing off your blogs, whoring referer links.  &lt;i&gt;Clicky, Clicky, five dollar!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Code is cool.  The referer list is stored in application scope, with the last day of update.  When the Referer filter sees the last day roll over, it clears the list and starts again, so the statistics are only for the current day.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Aquarium Troubles
            </title>
            <link>
                https://www.hjsoft.com/blog/56.html
            </link>
            <pubDate>Fri, 7 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/56.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://www.hjsoft.com/gallery/Whatever/p6220002_001&quot;&gt;These tiny fish&lt;/a&gt; among others have grown into big, huge fish in my &lt;a href = &quot;http://www.hjsoft.com/gallery/Whatever/p6220006_001&quot;&gt;16-gallon aquarium&lt;/a&gt;, but now they are unfortunately stuggling.  A fungus has been going around the tank and slowly killing fish.  I had 6 feeder fish that grew to each be a couple inches long, but this fungus has reduced that number to 3 now, and none of the fish are looking good.&lt;/p&gt;

&lt;p&gt;It&apos;s disappointing.  I worked on that tank a lot (a lot for goldfish, anyway), and it&apos;s not helping.  Everyone was always amazed how large the fish had grown, but my luck seems to be running low.&lt;/p&gt;
&lt;p&gt;The remaining fish are in a five-gallon bucket at the moment, but not thriving it seems.  I had hoped to rebuild the tank from scratch over the weekend -- new water, gravel, live plants, plastic plants.  It&apos;s too little too late.  I guess I&apos;ll need to add new fish to that equation.  I&apos;ll probably get more feeder fish, since they&apos;re fun to watch grow.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Fortune(6) Is Funny
            </title>
            <link>
                https://www.hjsoft.com/blog/57.html
            </link>
            <pubDate>Fri, 7 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/57.html
            </guid>
            <description>
                &lt;p&gt;Today, fortune said this to me: &lt;b&gt;I&apos;ve got an IDEA!!  Why don&apos;t I STARE at you so HARD, you forget your SOCIAL SECURITY NUMBER!!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Oh no!  All those years of college down the drain!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                They&apos;ve Come To Take My Eight Dollars
            </title>
            <link>
                https://www.hjsoft.com/blog/55.html
            </link>
            <pubDate>Thu, 6 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/55.html
            </guid>
            <description>
                &lt;p&gt;After &lt;i&gt;Matrix: Reloaded&lt;/i&gt;, I&apos;m not really sure the movie people deserve my $8, but the power of the first movie carries right through, and I just &lt;b&gt;must&lt;/b&gt; see if this final movie does the first any justice -- the second didn&apos;t.&lt;/p&gt;
&lt;p&gt;I&apos;m so frustrated that they&apos;re going to get my money, and there&apos;s just not much I can do about it.  I haven&apos;t seen it yet, but I really don&apos;t expect much.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Learn Japanese!
            </title>
            <link>
                https://www.hjsoft.com/blog/54.html
            </link>
            <pubDate>Wed, 5 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/54.html
            </guid>
            <description>
                &lt;p&gt;I found this obscure link on slashdot.  &lt;a href = &quot;http://www.americakokki.com/english/english.html&quot;&gt;Start learning Japanese&lt;/a&gt; today.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Solar Flares
            </title>
            <link>
                https://www.hjsoft.com/blog/53.html
            </link>
            <pubDate>Tue, 4 Nov 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/53.html
            </guid>
            <description>
                &lt;p&gt;The sun seems to keep &lt;a href = &quot;http://www.space.com/scienceastronomy/solar_flares_031103.html&quot;&gt;hurling stuff&lt;/a&gt; at us, but I have yet to take the time to wander out looking for auroras.  I&apos;ve always wanted to see these things, but my immediate area (backyard) is pretty well covered by trees, and I fear the city glow could be too much.&lt;/p&gt;
&lt;p&gt;Stacey, maybe you&apos;ll get another chance with your good camera.  Todd&apos;s place may be an especially good place to be this evening.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Offsite Backup
            </title>
            <link>
                https://www.hjsoft.com/blog/52.html
            </link>
            <pubDate>Tue, 28 Oct 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/52.html
            </guid>
            <description>
                &lt;p&gt;California fires have me thinking of all the stuff I&apos;d lose should my place burn down.  I think I&apos;d be in relatively good shape if I could grab my stack of hard drives and run.  Of course, all these drives are securely mounted in monsterous, heavy full-tower cases.  I&apos;d surely perish, with my &lt;a href = &quot;http://www.hjsoft.com/gallery/&quot;&gt;memories&lt;/a&gt; and my data trying to lug them out.&lt;/p&gt;

&lt;p&gt;I currently backup this stuff to a separate box, but it&apos;s sitting right next to the other server on the same fire-vulnerable desk.  I should get a monster USB-IDE drive, so I can grab it and run.&lt;/p&gt;
&lt;p&gt;Another more likely solution is offsite backups.  Anyone want to trade space?  I&apos;ll hold somem of your stuff, if you hold mine?&lt;/p&gt;
&lt;p&gt;Pushing 1.5G (and growing) of pictures out my cablemodem could be problematic (about 17hrs of problematic by my calculations), so I guess I should just burn a couple CDs and drop them at a friends house, since those are pretty static.&lt;/p&gt;
&lt;p&gt;So, seriously, anyone want to do backups?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Notes on Blog Development
            </title>
            <link>
                https://www.hjsoft.com/blog/51.html
            </link>
            <pubDate>Mon, 27 Oct 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/51.html
            </guid>
            <description>
                &lt;p&gt;You&apos;ll notice my little browser recommendation on the left.  That may be the only visible change in here right now.  Paging code is wrapped in here, but not complete, so it&apos;s not evident yet.  The paging code that &lt;i&gt;is&lt;/i&gt; here helps load the recent 10 more efficiently.  (I moved the pagingn code back into the EJB tier.)&lt;/p&gt;
&lt;p&gt;I did a bunch of stuff trying to track full state (expand, page, etc) in the url (for consistent linking), but ended up trashing most of it due to extreme complexity.  It shakes my faith in my ability to do web apps.&lt;/p&gt;
&lt;p&gt;Things to work on:
&lt;ul&gt;
&lt;li&gt;complete paging (with tracking in session)&lt;/li&gt;
&lt;li&gt;referer logs&lt;/li&gt;
&lt;li&gt;permalinks&lt;/li&gt;
&lt;li&gt;&lt;i&gt;incomplete&lt;/i&gt; flag to allow working on blog entries live without making them visible&lt;/li&gt;
&lt;li&gt;topics&lt;/li&gt;
&lt;li&gt;&lt;i&gt;updated date&lt;/i&gt; field in addition to creation date&lt;/li&gt;
&lt;li&gt;rss feed (topic-based, so I don&apos;t feed garbage to java.blogs)&lt;/li&gt;
&lt;li&gt;maybe move state info from session to url&lt;/li&gt;
&lt;li&gt;session/cookie for expand option&lt;/li&gt;
&lt;li&gt;remember commenter info in cookie&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;figure out trackback/ping&lt;/li&gt;
&lt;li&gt;subscription-based email notification of comments&lt;/li&gt;
&lt;li&gt;calendar&lt;/li&gt;
&lt;li&gt;dropdown list of other blogs for my bookmarks of ones i read&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;Anyone else have any slick ideas of what a blog should do?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Getting Tomcat to Behave in JBoss 3.2.2
            </title>
            <link>
                https://www.hjsoft.com/blog/50.html
            </link>
            <pubDate>Mon, 27 Oct 2003 00:00:00 -0500</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/50.html
            </guid>
            <description>
                &lt;p&gt;I previously reported an issue with redeployment of my web application (accessing EJB) on JBoss 3.2.2.  I was getting &lt;code&gt;ClassCastException&lt;/code&gt;s trying &lt;code&gt;PortableRemoteObject.narrow()&lt;/code&gt; my LocalHome interfaces.  It turned out to be a JBoss/Tomcat default configuration issue.&lt;/p&gt;
&lt;p&gt;If you want Tomcat to behave as you&apos;d expect any normal web container to behave, switch the &lt;code&gt;UseJBossWebLoader&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; in jbossweb&apos;s &lt;code&gt;jboss-service.xml&lt;/code&gt;.  This lets Tomcat use its own classloader, instead of JBoss&apos; unified loader.  JBoss&apos; unified loader causes trouble with the client jar packaged with your web app.&lt;/p&gt;
&lt;p&gt;When I started J2EE, I found it incredibly cumbersome that a web app didn&apos;t automatically find the interfaces to an EJB.  It seemed that they should, since they&apos;re in the same JVM.  So I got into the habit of copying the classes over to the web app and packaging them up in the war as well.&lt;/p&gt;
&lt;p&gt;Well, this unified loader actually lets me access them transparently without loading them.  It also makes the locally packaged interfaces not reload properly.  I could have dropped the client jar, but that would be non-standard to other application servers.&lt;/p&gt;
&lt;p&gt;The standard behavior of having separate class loaders, I&apos;ve come to realize, is useful.  It&apos;s clean and well-defined for cases where you have different versions of the same application deployed on the same server.  The JBoss loader would have to try to figure out the correct classes, and I doubt it could do it, since it had trouble for my simple case of choosing packaged interfaces or the classes from the other side of the server.&lt;/p&gt;
&lt;p&gt;This problem doesn&apos;t seem to be well-exposed.  Maybe I&apos;m doing things differently from others, but if anyone else is doing things the way I do, hopefully this helps.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Mission Critical Systems
            </title>
            <link>
                https://www.hjsoft.com/blog/Mission_Critical_Systems.html
            </link>
            <pubDate>Fri, 24 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Mission_Critical_Systems.html
            </guid>
            <description>
                &lt;p&gt;Last night, Claire ordered a pizza online from &lt;a href = &quot;http://www.papajohns.com/&quot;&gt;Papa John&apos;s&lt;/a&gt;.  I had been in a rather bad mood, but I found myself incredibly amused when I arrived at Papa John&apos;s and the pizza was there and ready.  I know internet pizza is just so &lt;i&gt;1999&lt;/i&gt;, but for some reason it just seems like a really high expectation of which the local pizza chain could fall disappointingly short.&lt;/p&gt;

&lt;p&gt;The weird thing is that I don&apos;t question the building of mission critical systems and trusting computers to reliably do other very important things.  Timely food delivery just doesn&apos;t seem possible.  I&apos;m not sure what I perceive to be missing.  Maybe I just don&apos;t trust the people on the receiving end to understand the stream of &lt;code&gt;0&lt;/code&gt;s and &lt;code&gt;1&lt;/code&gt;s that represent my hunger and deepest needs.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                TV Night: CSI
            </title>
            <link>
                https://www.hjsoft.com/blog/49.html
            </link>
            <pubDate>Fri, 24 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/49.html
            </guid>
            <description>
                &lt;p&gt;CSI started out with the discovery of an unattended baby in a hot car in a shopping center parking lot.&lt;/p&gt;
&lt;p&gt;He, of course, had died from the heat.  I was sobbing and clutching Paige by the conclusion of the program.  The decisions and the loss on that scale are not those which I care to emotionally explore.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                App Server Upgrades
            </title>
            <link>
                https://www.hjsoft.com/blog/47.html
            </link>
            <pubDate>Thu, 23 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/47.html
            </guid>
            <description>
                &lt;p&gt;Pretty painlessly, I just upgraded JBoss to 3.2.2 and J2SDK to 1.4.2_02.  This JBoss install is actually using Tomcat instead of Jetty for the web tier, but it makes no difference to my application.  Both are pretty standards-compliant, so they both behave the same in all the important ways.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Basic Bogofilter Magic
            </title>
            <link>
                https://www.hjsoft.com/blog/Basic_Bogofilter_Magic.html
            </link>
            <pubDate>Tue, 21 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Basic_Bogofilter_Magic.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve been using &lt;a href = &quot;http://bogofilter.sourceforge.net/&quot;&gt;bogofilter&lt;/a&gt; to herd spam into it&apos;s own little mailbox for later deletion/review.  My spam mailbox easily accumulated 300-500 messages a day.  I need to recognize a false-positive in there, so the volume was still quite unmanageable.&lt;/p&gt;
&lt;p&gt;I used to send everything with a 0.50 (of 1.00) rating to the spam box.  Bogofilter actually has a third categorization of &lt;i&gt;Unsure&lt;/i&gt;.  I&apos;m using this categorization now and have adjusted my thresholds.  Bogofilter proved to be pretty good, so now I let it bounce anything over a 0.90, and then anything between 0.90 and 0.50 still gets saved to an actual mailbox.  This has cut my volume considerably, so I have a better chance of catching mail that shouldn&apos;t be spam.  It also keeps those border-line cases from skewing the auto-learn into producing more false-positives.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Apple iTunes
            </title>
            <link>
                https://www.hjsoft.com/blog/46.html
            </link>
            <pubDate>Tue, 21 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/46.html
            </guid>
            <description>
                &lt;p&gt;Microsoft&apos;s DRM schemes are being edged out for Apple&apos;s DRM, and Microsoft&apos;s not happy.  They&apos;re actually screaming about Apple controlling the market (that they wanted to control and limit, of course).&lt;/p&gt;
&lt;p&gt;I actually wouldn&apos;t mind taking a look at Apple&apos;s music store.  This could be the application that convinces me to get a Windows box.  I&apos;d still end up jumping through the hoops of buying, burning, and ripping the tracks to ogg files, so I could listen on my linux box.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Kreider&apos;s CowCam
            </title>
            <link>
                https://www.hjsoft.com/blog/43.html
            </link>
            <pubDate>Mon, 20 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/43.html
            </guid>
            <description>
                &lt;p&gt;There&apos;s not much to be said: &lt;a href = &quot;http://www.lancasterfarming.com/cowcam.html&quot;&gt;http://www.lancasterfarming.com/cowcam.html&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Battery-Powered Office
            </title>
            <link>
                https://www.hjsoft.com/blog/44.html
            </link>
            <pubDate>Mon, 20 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/44.html
            </guid>
            <description>
                &lt;p&gt;I finally got my important equipment on big powerful UPS power.  Paige is resting much easier now knowing that her website is better protected.  Thanks to American Power Conversion for making &lt;a href = &quot;http://www.apcc.com/products/family/index.cfm?id=23&quot;&gt;big heavy boxes&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Lots of  Pictures (and Disk Space)
            </title>
            <link>
                https://www.hjsoft.com/blog/42.html
            </link>
            <pubDate>Mon, 13 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/42.html
            </guid>
            <description>
                &lt;p&gt;I recently found a cache of nearly 800 pictures on my laptop which weren&apos;t in my
&lt;a href = &quot;http://www.hjsoft.com/gallery/&quot;&gt;gallery&lt;/a&gt;.  After hours of organizing, now they are.  I can&apos;t promise they&apos;re all right-side-up yet, but feel free to take a look.  Some are quite old and from parties long, long ago. :)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Stupid Fashion Victim
            </title>
            <link>
                https://www.hjsoft.com/blog/39.html
            </link>
            <pubDate>Wed, 8 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/39.html
            </guid>
            <description>
                &lt;p&gt;This article about &lt;a href = &quot;http://www.softwarereality.com/soapbox/softwarefashion.jsp&quot;&gt;Software Fashion&lt;/a&gt; has pegged me completely for a &lt;i&gt;Stupid Fashion Victim&lt;/i&gt;.  I&apos;ve taken hold of a number of extremely complex technologies (EJB, Servlet, Struts) and misapplied them to tiny projects, like a weblog (scalable to 10,000 users across 3 servers, though, I&apos;ll have you know!).&lt;/p&gt;
&lt;p&gt;It&apos;s all an exercise for me.  I&apos;m studying these technologies, so I can apply them in the monsterous projects someday (like maybe an application to track almost every aspect of business for courts in every county across the state for example).  The only places I have to experiment are within my own personal (small) applications.&lt;/p&gt;
&lt;p&gt;The thought is to facilitate future growth painlessly by applying an extensible framework.
Investing time upfront to ease transition later has been referred to as &lt;a href = &quot;http://martinfowler.com/bliki/TechnicalDebt.html&quot;&gt;Technical Debt&lt;/a&gt;.  Every great project starts small (like Yahoo!) and grows, so maybe someday I&apos;ll be king of BlogWorld, and I&apos;ll be happy that I started with such a solid framework.&lt;/p&gt;
&lt;p&gt;The other exercise would be to code tight first then make sweeping framework changes as necessary with the natural growth of the project.  I still do that, but I try to limit it by having the foresight to recognize potential limitations early.  Lots of projects have taken this minimal route, and it&apos;s resulted in plenty of new software releases touting &lt;i&gt;&quot;New, v2.0.0, written completely from scratch containing no code from v1.x&quot;&lt;/i&gt;.  I think that path has been explored already.&lt;/p&gt;
&lt;p&gt;So, on my next real or personal project, I&apos;ll probably use some huge framework and apply a few cool &lt;a href = &quot;http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html&quot;&gt;design patterns&lt;/a&gt; for good measure and hope for the best.  I expect to find a balance with some of my experience, but I think I&apos;ll choose to suffer at the hand of fashion until then.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Hierarchal Classloading and the Singleton
            </title>
            <link>
                https://www.hjsoft.com/blog/41.html
            </link>
            <pubDate>Wed, 8 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/41.html
            </guid>
            <description>
                &lt;p&gt;Visibility of a class, in particular a &lt;a href = &quot;http://www.onjava.com/pub/a/onjava/2003/08/27/singleton.html&quot;&gt;Singleton&lt;/a&gt; class is determined by the classloader that finds and loads it, not necessarily the classloader that calls for its instantiation.  When a class is requested, the inner classloader tries to find it.  If it can&apos;t, it passes the request up to the parent classloader, and so on until someone finds it.&lt;/p&gt;

&lt;p&gt;In the case of Sybase EAServer, a singleton class that is located in the server-wide static class repository (&lt;code&gt;${EAServer}/java/classes&lt;/code&gt;) is available to both the web and EJB containers, no matter which side actually instantiates it.  Say a singleton bean to maintain a cache is instantiated by the web container in the &lt;code&gt;init()&lt;/code&gt; method of a servlet, that same instance of the object is available to the EJB tier as well.  If the EJB tier has it&apos;s own definition of that singleton (in an EJB&apos;s &lt;code&gt;WEB-INF/classes&lt;/code&gt; directory), the EJB&apos;s classloader will load that one instead of allowing the EJB to see the common server-wide one.&lt;/p&gt;
&lt;p&gt;I learned some of this lesson back when I first started packaging J2EE applications.  Classes defined in the EJB jar are not available to the components in the web-tier war file, since they are loaded by different sibling classloaders.  The (annoying, but now automated) solution was to copy the value objects, home interfaces, and remote interfaces into the war file.  Another solution would have been to copy the shared classes into the servers common classpath.  This usually negates the ability to hot-deploy, so I would have been restarting my application server repeatedly.  This obviously would be intolerable.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Method vs Class Variables When Multithreading
            </title>
            <link>
                https://www.hjsoft.com/blog/40.html
            </link>
            <pubDate>Wed, 8 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/40.html
            </guid>
            <description>
                &lt;p&gt;I had to recently refresh my memory of basic computer science, so I&apos;ll note it here as well.  While executing a method on a shared object across threads, we need not concern ourselves with races manipulating the variables declared within the method.  All the method variables are created on a separate chunk of the stack for each invocation.&lt;/p&gt;
&lt;p&gt;Class variables on the other hand are not pushed onto the stack for each method invocation on a shared object, so access to these do need to be synchronized.&lt;/p&gt;
&lt;p&gt;Method variables within static methods do not offer any exceptions, they are still pushed onto the stack, hence isolated from other concurrent invocations.  Static methods may only access class variables that are static as well, so it should be noted that these static class variables are shared even more widely -- across all instances of this class.&lt;/p&gt;
&lt;p&gt;I used this test code to prove this behavior to myself:
&lt;pre&gt;
import java.io.*;
import java.util.*;

public class Test implements Runnable {
    Test callback;
    String name;
    int sleep;
    String shared;

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        Runnable r1 = new Test(2000, &quot;t1&quot;, this);
        Runnable r2 = new Test(2000, &quot;t2&quot;, this);

        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);

        t1.start();
        try {
            Thread.sleep(1000);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        t2.start();
    }

    public Test(int s, String n, Test cb) {
        sleep = s;
        name = n;
        callback = cb;
    }

    public void doIt(int sleep, String value) {
        System.out.println(value + &quot; started and set values to &quot;
            + value);
        String ret = value;
        shared = value;
        try {
            Thread.sleep(sleep);
            System.out.println(value + &quot; sleeping&quot;);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println(value + &quot;&apos;s local ret: &quot; + ret);
        System.out.println(value + &quot;&apos;s shared: &quot; + shared);
    }

    public void run() {
        callback.doIt(sleep, name);
    }
}
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;The output is:
&lt;pre&gt;
t1 started and set values to t1
t2 started and set values to t2
t1 sleeping
t1&apos;s local ret: t1
t1&apos;s shared: t2
t2 sleeping
t2&apos;s local ret: t2
t2&apos;s shared: t2
&lt;/pre&gt;
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Patching SQuirreL-SQL
            </title>
            <link>
                https://www.hjsoft.com/blog/38.html
            </link>
            <pubDate>Tue, 7 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/38.html
            </guid>
            <description>
                &lt;p&gt;&lt;a href = &quot;http://squirrel-sql.sourceforge.net&quot;&gt;SQuirreL-SQL&lt;/a&gt; is a slick little general-purpose SQL monitor written in Java that&apos;ll connect to anything with a JDBC driver.  It&apos;s obviously, opensource, so I have the source and can make it do anything I want.  The only problem with this arrangement is when the build process is too cumbersome, requiring external tools, libraries, whatever.&lt;/p&gt;
&lt;p&gt;The release version of SQuirreL doesn&apos;t sort the db catalog list.  This makes it difficult to find your proper catalog in the dropdown when the list is long.  The code is so clean and well organized that I quickly found the implementation code for that dropdown and switched the &lt;code&gt;HashMap&lt;/code&gt; that they were using to store the catalogs into a nice, automatically sorting &lt;code&gt;TreeSet&lt;/code&gt;.  I changed all of 5 lines of code.&lt;/p&gt;
&lt;p&gt;Now, I needed to rebuild the project.   Within my limited attention span, this proved to be too cumbersome, so instead, I realized that I could just run &lt;code&gt;javac&lt;/code&gt; myself and include the pre-compiled &lt;code&gt;fw.jar&lt;/code&gt; in my classpath.  This allowed the compiler to rebuild my one tiny piece against the whole, without needing to build it all.&lt;/a&gt;
&lt;p&gt;I could have then ripped open the &lt;code&gt;fw.jar&lt;/code&gt; and dropped in my replacement, but it&apos;s even easier to just let the classloader do it for me, so I add a new directory, &lt;code&gt;patch_classes&lt;/code&gt;, to the classpath before the &lt;code&gt;fw.jar&lt;/code&gt;, drop my new class in there, and the classloader loads mine, since it finds it first.  Now I have happy sorting catalog dropdowns with very little effort.  In addition to being quick, this approach keeps my changes separate from the distribution, so I can easily re-apply my patched class to a newer release in the case that they have not fixed this for me (they have already, though, in cvs, but again, the build process was not worth my time).&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                End of wedding.hjsoft.com Application
            </title>
            <link>
                https://www.hjsoft.com/blog/37.html
            </link>
            <pubDate>Mon, 6 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/37.html
            </guid>
            <description>
                &lt;p&gt;
I took down the Wedding website finally.  It was getting embarassing to see &lt;i&gt;&quot;The wedding was 430 days ago!&quot;&lt;/i&gt;.  Now it&apos;s just a &lt;a href = &quot;http://wedding.hjsoft.com/&quot;&gt;collection of links&lt;/a&gt;.  It  also includes a zip of the entire source tree to the old application.  If you care about really old CMP implementations in JBoss, you&apos;re in luck.
&lt;/p&gt;
&lt;p&gt;That also means that you people who still want to vote up the Chicken Dance are out of luck.  Sorry.  Take it to &lt;a href = &quot;http://www.billboard.com/&quot;&gt;Billboard.com&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                HJSoft Squatting
            </title>
            <link>
                https://www.hjsoft.com/blog/36.html
            </link>
            <pubDate>Fri, 3 Oct 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/36.html
            </guid>
            <description>
                &lt;p&gt;I remembered there being an hjsoft.cn, so I was just poking around google today to find this link: &lt;a href = &quot;http://www.hjsoft.tk/&quot;&gt;www.hjsoft.tk&lt;/a&gt;.  They stole my old logo!  :) That&apos;s funny.  Their bandwidth is limited by Geocities, so poking at them much knocks them out for a bit.&lt;/p&gt;
&lt;p&gt;Apparently, I&apos;ve been busier than I thought, too!  Check out &lt;a href = &quot;http://www.hjsoft.cn/english/index.html&quot;&gt;HJSoft.cn&lt;/a&gt;.  I should try to sell them hjsoft.com!  Don&apos;t worry, I wouldn&apos;t do that.  Changing names would be a huge pain in the ass.&lt;/p&gt;
&lt;p&gt;It&apos;s odd though that they don&apos;t show up on Google anywhere near the top though.  One would expect a commercial venture to be higher profile than a hobby.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Starscape 2003 Pictures
            </title>
            <link>
                https://www.hjsoft.com/blog/35.html
            </link>
            <pubDate>Mon, 29 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/35.html
            </guid>
            <description>
                &lt;p&gt;I took lots of pictures, so queue them up on slideshow or something and enjoy:
&lt;a href = &quot;http://www.hjsoft.com/gallery/2003-09-27_Starscape&quot;&gt;
http://www.hjsoft.com/gallery/2003-09-27_Starscape&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Starscape was an excellent time.  We were there from about midnight to 5am.  The weather cooperated for the most part.  The tents were amazing and the beach areas were cozy.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Buzzlife&lt;/b&gt;&apos;s house tent really was the place to be most the time.  It was a very danceable area and there were lots of people.  We saw a bit of Jimmy Van M, Green Velvet, and the legendary Scott Henry before we left.  Those pics have the half geodesic dome, an overhead screen, and dj shots from the right.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Ultraworld&lt;/b&gt; tent was the Drum &apos;n&apos; Bass area.  It was quite loud and the music was heavy.  It was just slightly denser than I like most the time.  Additionally, &quot;live&quot; dnb seems to require an MC these days, which is a huge disappointment.  Those guys drive me crazy: just shut up and let me dance!  I saw Swarm, Photek, and Dieselboy for sure.  There were others (from Planet of the Drums) about whom I wasn&apos;t sure (the MC wasn&apos;t announcing their names every 10 seconds).  This area was the best decorated and had interesting glowing people, so I think you&apos;ll recognize those in the gallery.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Sonic Soul&lt;/b&gt; had a nice little area down on the beach too with some little projections and stuff.  There are pictures of that.  It sounded like a slightly downtempo version of the house tent when I was down there.  It was quite nice.&lt;/p&gt;
&lt;p&gt;We found &lt;a href = &quot;http://ghetto.hjsoft.com/&quot;&gt;Kenny&lt;/a&gt; right away, and he led us down to the DCRaves area where we met a few people from the mailing list.  That was odd, since I don&apos;t post much, no one knows my name, though I recognized names.  We also stumbled upon the long lost Andrew at the end of the night!  It was good to find him again.  He seems good.  The house tent was not a good place to talk, so we only caught up minimally.&lt;/p&gt;
&lt;p&gt;Baltimore police crawled the place as security.  They seemed to be in good spirits.  I&apos;ve heard only fun stories about the cops, so I think the whole thing probably looked good to the masses.  On our 2-mile walk back to the car, we even saw one cop give a couple kids a ride up to the makeshift satellite parking area.  It seems the policeman just decided to be nice! :)  There was a a tow truck sitting just up the street too waiting for dead batteries, I guess.  He sat there twiddling a glowstick patiently.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                CSS sucks (or CSS Is Fun, part 2)
            </title>
            <link>
                https://www.hjsoft.com/blog/34.html
            </link>
            <pubDate>Fri, 26 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/34.html
            </guid>
            <description>
                &lt;p&gt;Thanks Stacey for testing the new site in Internet Exploder (ah, first-hand experience now) and informing me of the shambles it was in.  This version should be better.   It&apos;s still not perfect though, it should be presentable in IE again.  It still has no tables. :)&lt;/p&gt;
&lt;p&gt;So who&apos;s gonna hit me now with Opera? Lynx and WAP browsers should find it reasonable to navigate.&lt;/p&gt;
&lt;p&gt;Now I can move onto adding a few new fields, and a history viewer.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                CSS Is Fun!
            </title>
            <link>
                https://www.hjsoft.com/blog/CSS_Is_Fun.html
            </link>
            <pubDate>Thu, 25 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/CSS_Is_Fun.html
            </guid>
            <description>
                &lt;p&gt;Something finally clicked, and I think I now understand the CSS positioning!  I restructured the entire layout to make real sense.  As an added bonus, I even solved my comment block (with the asterisks) problem.&lt;/p&gt;
&lt;p&gt;The side bar is placed using absolute positioning, as are the columns of *&apos;s.  There are no tables here at all now.  For accessibility, the menu and *&apos;s actually exist in the source code &lt;i&gt;after&lt;/i&gt; the content, so you don&apos;t have to wade through the navigation links with a text browser, pda, wap browser, or text-to-speech converter.  (Of course, everyone needs to be able to access my very important blog in all those ways several times a day.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                NPR: Hand Washing Habits When Among Creepy People
            </title>
            <link>
                https://www.hjsoft.com/blog/NPR_Hand_Washing_Habits_When_Among_Creepy_People.html
            </link>
            <pubDate>Wed, 24 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/NPR_Hand_Washing_Habits_When_Among_Creepy_People.html
            </guid>
            <description>
                &lt;p&gt;NPR reported yesterday that some health organization conducted a study in airport restrooms across the United States.  They found that only about 70% of men and 80% of women adequately wash their hands after using the public restroom.&lt;/p&gt;
&lt;p&gt;They stationed &lt;i&gt;researchers&lt;/i&gt; in restrooms who pretended to be grooming themselves as they observed.  Every hour the person would switch to another bathroom, so they wouldn&apos;t seem conspicuous.&lt;/p&gt;
&lt;p&gt;If some guy&apos;s been combing his hair from the time I enter the bathroom, do my thing, and go to wash my hands, I&apos;d be leary of him, and probably move along in a more hurried manor, abbreviating the recommended 15 seconds of hot and soapy hand-scrubbing.&lt;/p&gt;
&lt;p&gt;There were a host of other odd stories over the past couple days.  When not informative, NPR does provide the bizarre.  Just listen to all the sound clips they play of President Bush!&lt;/p&gt;
&lt;p&gt;They also had a funny story on the upcoming &lt;a href = &quot;http://www.marketplace.org/play/audio.php?media=/2003/09/23_mpp&amp;amp;start=00:00:21:56.0&amp;amp;end=00:00:25:50.0&quot;&gt;
political season&lt;/a&gt; [realaudio] and all the antics that are involved for a family in the printing business.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Blog Code Entanglement
            </title>
            <link>
                https://www.hjsoft.com/blog/Blog_Code_Entanglement.html
            </link>
            <pubDate>Wed, 24 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Blog_Code_Entanglement.html
            </guid>
            <description>
                &lt;p&gt;Between trying to use CSS to its fullest and trying to optimally use Struts, I have quite the rat&apos;s nest of code here.  I should put up snapshots of my disasters in layout.  Often I end up with all my on-screen components completely overlapping each other.&lt;/p&gt;
&lt;p&gt;Struts also provides a quick and easy way to plug new functionality, but I struggle trying to find the appropriate places for code to live.&lt;/p&gt;
&lt;p&gt;The data model is obviously contained in entity beans, and the business logic in the session bean.  I have a good handle on those, but I&apos;m not as clear on the web tier.   Struts actions provide presentation logic and JSP provides the actual layout.  The question lies in the best placement for logic involving layout, like &lt;i&gt;where should I calculate the comment count?&lt;/i&gt; Since it&apos;s a function of the display, I tend to do it in spaghetti code in the JSP.  I think I&apos;m protecting my Action too much.  When I change layouts, I should probably expect to change the Actions completely as well.&lt;/p&gt;
&lt;p&gt;It&apos;s not all bad though -- Struts allows me to plug in functionality pretty quickly, like the &lt;code&gt;getExpandedView()&lt;/code&gt; capability.  I have a lot of work to do still.  I&apos;m confident that this will click sometime soon, and it&apos;ll be proven worthwhile.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Starscape 2003
            </title>
            <link>
                https://www.hjsoft.com/blog/Starscape_2003.html
            </link>
            <pubDate>Mon, 22 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Starscape_2003.html
            </guid>
            <description>
                &lt;p&gt;Claire and I are going!  Yay!
&lt;a href = &quot;http://www.ultraworld.net/starscape2003/&quot;&gt;Starscape 2003&lt;/a&gt;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Updates
            </title>
            <link>
                https://www.hjsoft.com/blog/Updates.html
            </link>
            <pubDate>Mon, 22 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Updates.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve finally gotten some slight development stable again, so here&apos;s a slightly new look to the blog.  It&apos;s a slow work in progress.  I spend long hours trying to make css behave.  BTW, it may take a reload to get the stylesheets all proper.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Evil JBoss
            </title>
            <link>
                https://www.hjsoft.com/blog/Evil_JBoss.html
            </link>
            <pubDate>Thu, 18 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Evil_JBoss.html
            </guid>
            <description>
                &lt;p&gt;I have no idea what people are talking about when they start slamming Marc Fleury and JBoss.  He&apos;s very opinionated, confrontational, and tries to make money with his work.  Great.  I&apos;m just glad I can use the server for my projects.  If someone  feels he&apos;s unfairly profitting from others&apos; work, then they should stop contributing or really piss off Marc and fork JBoss for their own use.  If I were so useful as to be able to  contribute code to the project, I&apos;d see it as a small price to pay to make the server do what I want.  Yay, JBoss. ;)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Linux 2.4 vs 2.6
            </title>
            <link>
                https://www.hjsoft.com/blog/Linux_2.4_vs_2.6.html
            </link>
            <pubDate>Mon, 15 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Linux_2.4_vs_2.6.html
            </guid>
            <description>
                &lt;p&gt;I keep bouncing around between kernel generations.  My kernel mood changes with my setting and interests.  Often I find myself feeling all daring and cutting-edge, so I&apos;m running the 2.6-test series to see what&apos;s new and lend a hand testing.  For  my day-to-day tasks, 2.6 usually serves me well.&lt;/p&gt;
&lt;p&gt;I put up with certain shortcomings on each side of the fence.  In 2.4, I need to build alsa myself, and it&apos;s just not as interesting.  Luckily, the ck patch gets me many of the good toys like O(1) and preemptible kernel.&lt;/p&gt;
&lt;p&gt;In 2.6, alsa&apos;s built in, but drm-mach64 always takes some hand-patching, suspend doesn&apos;t work, and over the weekend, I found out ppp is broken.  I don&apos;t usually need ppp, but when I&apos;m trying to connect to my mobile phone while out of town, it&apos;s essential.  The scheduler&apos;s also a bit off, so playing music isn&apos;t totally smooth.&lt;/p&gt;
&lt;p&gt;I&apos;d love to play with software suspend again, if I could figure out how to properly call it.  It&apos;s much faster to intelligently suspend what&apos;s actually being used instead of the dumb BIOS dumping all 384MiB.&lt;/p&gt;
&lt;p&gt;So, I&apos;m on my way back to 2.4 for a bit for the sake of my GPRS connection, but I&apos;m sure I&apos;ll be back in a couple more versions, if it even takes that long.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Big U
            </title>
            <link>
                https://www.hjsoft.com/blog/Big_U.html
            </link>
            <pubDate>Fri, 12 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Big_U.html
            </guid>
            <description>
                &lt;p&gt;I finally finished reading Neal Stephenson&apos;s &lt;i&gt;Big U&lt;/i&gt;.  It took me a really long time, because I read slowly, and I don&apos;t really take the time to read often.&lt;/p&gt;
&lt;p&gt;Way back when, I read a book about speed reading. (That probably took me a while to read too.)  If I concentrate and think about it, I can actually do it, but I never remember to practice it.  I repeatedly slip into my old slow reading habits (mentally vocalizing, re-reading, etc).&lt;/p&gt;
&lt;p&gt;I may take a bit of a reading hiatus just to code, but I&apos;ll be looking for another book.  I have &lt;i&gt;Cryptonomicon&lt;/i&gt; in my personal library, but it&apos;s really intimidating for someone who reads as slowly as I do.  Gibson&apos;s &lt;i&gt;Pattern Recognition&lt;/i&gt; is out there somewhere, so I may just catch up on my Gibson.  Anyone have any other recommendations?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Microsoft vs Eolas
            </title>
            <link>
                https://www.hjsoft.com/blog/Microsoft_vs_Eolas.html
            </link>
            <pubDate>Fri, 12 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Microsoft_vs_Eolas.html
            </guid>
            <description>
                &lt;p&gt;I hate when these legal battles come down to this.  Eolas sues Microsoft for infringing upon their plugin patent.  I&apos;m sure &lt;i&gt;everyone&lt;/i&gt; is probably infringing upon this thing (Mozilla, Opera, Netscape, etc).  Eolas could use this garbage patent for anything!&lt;/p&gt;
&lt;p&gt;They could knock MS right out of the content-rich browser market, stop there, and leave the market for the little guys. (Yay!)  Or Eolas could just go ripping through everyone with that patent. (Boo!)  Even if the  guy behind Eolas does vow to leave the free world standing, he could change his mind at any time.  Worse yet, I could see SCO buying the patent and doing what they do best.&lt;/p&gt;
&lt;p&gt;Sadly, I must say no matter how good (anti-MS) Eolas&apos; intentions are, it&apos;s too dangerous to let them establish this precedence, so I really must cheer for Microsoft in this round.  Surprisingly, I can&apos;t really recall instances of Microsoft sinking into the murky realm of enforcing bullshit software patents.  Maybe they just haven&apos;t had to resort to that yet.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Coding Time
            </title>
            <link>
                https://www.hjsoft.com/blog/Coding_Time.html
            </link>
            <pubDate>Fri, 12 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Coding_Time.html
            </guid>
            <description>
                &lt;p&gt;I really need to clean up the interface to my blog.  I find it absolutely charming , but it&apos;s really lacking navigation and features.  I intend to add an explorer-like nav bar on the left (like a file tree) and a menu across the top.  You&apos;d think I&apos;m a fan of programming IDEs or something, but I&apos;m not.  I just think it would be a nice look, and &lt;code&gt;vi(1)&lt;/code&gt; just doesn&apos;t provide enough of an interface to emulate on a web page!&lt;/p&gt;
&lt;p&gt;I&apos;ll use struts-tiles which make that stuff look easy enough.  I just have to work out the css for it.  I&apos;m challenging myself to not use tables and use css instead.  I could probably more completely implement current navigation as well.  You may have noticed, I have sort of standard hard-coded dump points for some actions, which is annoying.&lt;/p&gt;
&lt;p&gt;The other java-based weblog packages out there seem sort of featureful, but I suffer severely of NCHS (Not Coded Here Syndrome), so I&apos;m still writing my own for the practice.  I mean, that&apos;s what this is all about, right?  I&apos;m learning struts here, which is the tier all those others have implemented.  If I was merely interested in EJB work, I&apos;d grab one of the others and implement an EJB tier under it.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Multiple ResultSets in JDBC
            </title>
            <link>
                https://www.hjsoft.com/blog/Multiple_ResultSets_in_JDBC.html
            </link>
            <pubDate>Tue, 9 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Multiple_ResultSets_in_JDBC.html
            </guid>
            <description>
                &lt;p&gt;I&apos;ve never had the occasion to even expect to have more than one ResultSet returned by one execution of a Statement, but that&apos;s exactly what I got to do today.  It seems that any query &lt;code&gt;execute()&lt;/code&gt;ed from a sybase stored proc drops a ResultSet, so I need to iterate through them to get &lt;u&gt;all&lt;/u&gt; the results, not just rows in a single ResultSet. &lt;/p&gt;
&lt;p&gt;Here&apos;s a bit of example code to demonstrate navigating through the multiple ResultSets:&lt;/p&gt;
&lt;pre&gt;
    CallableStatment cstmt =
        conn.prepareQuery(&quot;{ call my_proc() }&quot;);
    cstmt.execute();
    ResultSet rs = null;
    do {
        // don&apos;t process update counts, only resultsets
        if ((rs = cstmt.getResultSet()) != null) {
            while (rs.next()) {
                System.out.println(rs.getString(&quot;field&quot;));
            }
        }
    } while (cstmt.getMoreResults()  // advance current rs
        || cstmt.getUpdateCount() != -1); // case of update count
&lt;/pre&gt;
&lt;p&gt;For any more info, check your local javadocs.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Successful Compilation
            </title>
            <link>
                https://www.hjsoft.com/blog/Successful_Compilation.html
            </link>
            <pubDate>Fri, 5 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Successful_Compilation.html
            </guid>
            <description>
                &lt;p&gt;You know you&apos;re getting good when you can change large chunks of code and still get it to compile with no errors the first time you try!  Of course, upon closer inspection, you could also find that the whole damn method you were modifying has been commented out of the code.&lt;/p&gt;
&lt;p&gt;I could have let my 4-month old daughter edit that block and it would have compiled flawlessly.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Subtle Hints?
            </title>
            <link>
                https://www.hjsoft.com/blog/Subtle_Hints.html
            </link>
            <pubDate>Wed, 3 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Subtle_Hints.html
            </guid>
            <description>
                &lt;p&gt;My work email server went down today (yay, exchange!), and when it supposedly came back, I still could not connect.&lt;/p&gt;
&lt;p&gt;It seems someone told the email guys that I was off the project, so they deleted me.  In reality, I&apos;m no longer a consultant on this project, but I &lt;b&gt;am&lt;/b&gt; now a staff member on this project.&lt;/p&gt;
&lt;p&gt;Someone&apos;s trying to fire me already! ;)  Who says being a state employee is a stable job?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Story of the Sleepy Creature of Habit
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Story_of_the_Sleepy_Creature_of_Habit.html
            </link>
            <pubDate>Tue, 2 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Story_of_the_Sleepy_Creature_of_Habit.html
            </guid>
            <description>
                &lt;p&gt;The sleepy creature of habit commutes an hour to work every morning.  Upon arriving at his destination, he knows every day that the outer 2 lanes are blessed for safe passage if one carries the mystical, magical white key called the EZ-Pass.&lt;/p&gt;
&lt;p&gt;Of course, sensing his familiarity, the Gods of the PTC like to remake the reality which was commonly known and moves or eliminates whole EZ-Pass lanes.  The sleepy creature of habit is again duped into parting with his King&apos;s Ransom ($8.50 when coming from the land where the sun rises).  Curses on the PTC!&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                I Need a Toyota Prius
            </title>
            <link>
                https://www.hjsoft.com/blog/I_Need_a_Toyota_Prius.html
            </link>
            <pubDate>Tue, 2 Sep 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/I_Need_a_Toyota_Prius.html
            </guid>
            <description>
                &lt;p&gt;Toyota does some of the &lt;a href = &quot;http://www.toyota.com/html/shop/look_ahead/&quot;&gt;coolest stuff&lt;/a&gt;, including the new Prius which can &lt;a href = &quot;http://www.cnn.com/2003/TECH/ptech/09/01/toyota.prius.reut/index.html&quot;&gt;park itself&lt;/a&gt;!  (Do also treat yourselves to the RSC, Fine-S, and POD links on that first page.)&lt;/p&gt;
&lt;p&gt;It&apos;s like the tree-hugging geeks night-rider!  I want one.  If you&apos;ve spoken to me in person, you know I&apos;ve wanted one for a long time.  The new one coming out real soon is supposed to be even cheaper and more versatile with it&apos;s hatchback and fold-down seats.&lt;/p&gt;
&lt;p&gt;Do other car companies do cool stuff like this?  I just never hear of anyone quite like Toyota.  I definitely want to support them.  I should have bought the ECHO when I had the chance, though my Mazda Protege is fun to drive.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Virtual Colocation
            </title>
            <link>
                https://www.hjsoft.com/blog/Virtual_Colocation.html
            </link>
            <pubDate>Fri, 29 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Virtual_Colocation.html
            </guid>
            <description>
                &lt;p&gt;Colo prices are expensive.  Everytime I get nervous about keeping my website up on my &quot;residential&quot; connection, I wonder about colocation.  Finally, I think I may have a reasonable option -- &lt;a href = &quot;http://www.pdxcolo.net/&quot;&gt;PDXcolo.net&lt;/a&gt;.
These guys look pretty interesting, much like us, extreme linux geeks trying to do cool things and not necessarily profiteering.&lt;/p&gt;
&lt;p&gt;I could get a nice little virtual server, setup DNS there, and then I&apos;ll have my DNS completely under my control again for whatever whacky schemes I formulate.  I figure I could even fit a nice apache and jboss instance out there.  I could probably even put my mail out there.  Then I&apos;d have some bandwidth, and a stable location without the hacks to make it appear static.&lt;/p&gt;
&lt;p&gt;That then leaves me wondering why I need my big huge dual athlon server.  I&apos;d hate to not have it, but I already work remotely to it almost all the time, so what&apos;s the big deal if I move everything to another server to use remotely?&lt;/p&gt;
&lt;p&gt;It&apos;s tempting, but not entirely necessary at the moment, so I guess I&apos;ll wait.  I think it&apos;ll make an excellent back up plan though should I run into any snags in my current arrangements.  Who would be interested in sharing a virtual server with me?  We could get a couple of them, cluster them, whatever.  Who knows?  We could be neighbors on the same hardware! :)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Turn Off the Radio
            </title>
            <link>
                https://www.hjsoft.com/blog/Turn_Off_the_Radio.html
            </link>
            <pubDate>Fri, 29 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Turn_Off_the_Radio.html
            </guid>
            <description>
                &lt;p&gt;As we approach 11 September, I&apos;m noticing more and more stories on &lt;a href = &quot;http://www.npr.org/&quot;&gt;NPR&lt;/a&gt; about various anthologies, collections, etc regarding the towers, and it&apos;s bound to only increase as the days go.&lt;/p&gt;
&lt;p&gt;Last week they talked about this photograph of a guy plummeting to his death and how disturbing it is for people to be confronted with the thought of deciding the way one is to inevitably die.  This single picture evokes so much emotion, so it is just never shown anywhere after that day after the disaster.&lt;/p&gt;
&lt;p&gt;This morning another story highlighted a new book or something which is full of transcripts of phone calls in and out of the buildings as people tried to figure out what was going on and what to do.  One guy called home to tell his kid he was alright and to encourage her to do homework.  Some people discussed who would pick up or take care of their kids.&lt;/p&gt;
&lt;p&gt;I&apos;m not about to accuse NPR of being sensationalist or anything like other big media, but I&apos;m one of the fearful and disturbed, so maybe it&apos;s time for me to turn off the radio, shut the world out, and just listen to some music for a couple weeks.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Temporal Anomolies (or Ouch! My Brain!)
            </title>
            <link>
                https://www.hjsoft.com/blog/Temporal_Anomolies.html
            </link>
            <pubDate>Mon, 25 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Temporal_Anomolies.html
            </guid>
            <description>
                &lt;p&gt;Mr Perez over at &lt;a href = &quot;http://www.manageability.org/news&quot;&gt;Manageability&lt;/a&gt; has a nice little &lt;a href = &quot;http://www.manageability.org/blog/stuff/temporal_anomolies&quot;&gt;entry&lt;/a&gt; about a &lt;a href = &quot;http://www.mjyoung.net/time/index.htm&quot;&gt;site&lt;/a&gt; examining time travel in movies.  It&apos;s an interesting read.  I was particularly interested in his thoughts on one of our favorite movies, &quot;12 Monkeys&quot;.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Market Pro Computer Show
            </title>
            <link>
                https://www.hjsoft.com/blog/Market_Pro_Computer_Show.html
            </link>
            <pubDate>Mon, 25 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Market_Pro_Computer_Show.html
            </guid>
            <description>
                &lt;p&gt;I went to the Market Pro show today to look around and pick up a network switch.  It was the big &quot;super sale&quot; in Harrisburg which actually went Saturday 9-9 and Sunday 9-5.  I thought to myself, &quot;This must be a great show -- It&apos;s huge!&quot;  It wasn&apos;t.  It was mostly crap.  The actual area with computer vendors was about half what it was back in the day, and the rest was of no interest -- clothes, jewelry, car audio, etc.&lt;/p&gt;
&lt;p&gt;It was a terrible disappointment.  On top of the $10 discounted admission for Claire, Paige, and I, we ended up paying $5 for parking.  That&apos;s $15 right up front, and I didn&apos;t even have any hardware yet!  I found exactly the same prices I would have online, but not near the selection.  I ended up buying a mere 10/100 hub instead of a switch, because the day had started out costing me too much.  It was a huge waste of time.  I&apos;m never going to bother going again.  I can go to Cyber Warehouse, pay more, but still save time and money considering it all.  Oh well, Market Pro&apos;s day has come and gone.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Violence
            </title>
            <link>
                https://www.hjsoft.com/blog/Violence.html
            </link>
            <pubDate>Wed, 20 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Violence.html
            </guid>
            <description>
                &lt;p&gt;Some guy in Israel blew himself up on a bus.  In the middle of peace talks, someone (Israeli or Palestinian) always does something to put it on hold or tear down the whole process.  The talks are now on hold, and Israel is most likely mounting counter-attacks on the Palestinian settlements to take their turn at a round of senseless killing.&lt;/p&gt;
&lt;p&gt;In other news, I&apos;ve brought a life into this world, and for the rest of my life I&apos;ll have to worry about a cruel and vicious world preying on her.  At the very least, I&apos;ll need to figure out how to explain this to her.&lt;/p&gt;
&lt;p&gt;Lots of innocent adults and children were injured or killed on that bus.  One child was only a year and a half old.  People just can&apos;t see the greater good of just letting go of their hate.  Everyone has lost someone to the other side, so they feel justified in killing.  The cycle just continues with no end.&lt;/p&gt;
&lt;p&gt;I&apos;ve never experienced such a day-to-day life as they do over there, but I&apos;d  like to think I&apos;d be able to wait it out and let peace prevail.  I can&apos;t understand that lack of respect for human life.  Of course, I&apos;d probably be one of the innocent people to die while waiting and hoping for peace.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Wrath of the ISP
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Wrath_of_the_ISP.html
            </link>
            <pubDate>Mon, 18 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Wrath_of_the_ISP.html
            </guid>
            <description>
                &lt;p&gt;A big fear of mine is having my cable/dsl/dialup/whatever isp of choice at the moment start blocking ports and inhibiting my HOBBY activities.  There is no business based on my &lt;a href = &quot;/~glynis/seamonkeys/&quot;&gt;Seamonkey&lt;/a&gt; page, my blog, or my wedding site.  They&apos;re all just toys, so an expensive business account is quite inappropriate.&lt;/p&gt;
&lt;p&gt;Well my suscom friends, like my Matthew and Fizz (whose webpages are at...oh wait, their traffic has been blocked!) have felt the wrath of their isp recently.  As Fizz pointed out, one agreement says run your servers at your own risk and the other says its strictly forbidden.  I guess the biggest risk is them pulling the shit right out from under them.  Fizz seems to think he has alternatives, so I&apos;m happy for him.  I encourage everyone I know to call up Suscom and bitch about this denial of service, then switch to a friendlier service.  We&apos;re just geeks here.  We just want to stake our little plots on the internet and learn shit along the way.  No, some crap web host on &quot;properly sanctioned&quot; connections does not afford us that opportunity.&lt;/p&gt;
&lt;p&gt;
And now I&apos;d like to reiterate the commandments of broadband:
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Though shalt not produce&lt;/b&gt;
-- Do not publish your thoughts or learn technology for yourself.  We provide bandwidth for you to access the approved news and information.  Do not run your servers and disseminate your own opinion, even though it couldn&apos;t possibly tax our system at the blazing 128 (or 256) kilobit to which we&apos;ve throttled your outgoing data.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Though shalt only consume&lt;/b&gt;
-- Use your broadband only in the approved ways.  Get your news from CNN.com, get your music from Amazon, and email your friends at AOL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;Rants like these are part of the reason I wanted a nice theraputic blog like this.  Now let&apos;s hope port 80 stays open.  I hate my dependency on others.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Why aren&apos;t we doing more of this in Java?
            </title>
            <link>
                https://www.hjsoft.com/blog/Why_arent_we_doing_more_of_this_in_Java.html
            </link>
            <pubDate>Wed, 13 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Why_arent_we_doing_more_of_this_in_Java.html
            </guid>
            <description>
                &lt;p&gt;Our work application uses an EJB tier to tie the whole thing together.  Actual business logic is implemented in the database as stored procedures, and my session beans are only there to call the procs.&lt;/p&gt;
&lt;p&gt;They explained to me that everything is in the database to provide finer control of security, and obviously, for performance.&lt;/p&gt;
&lt;p&gt;Having all the logic in the database allows me to avoid coding much of the real work, but having been forced to look at the code for some of these stored procs, I don&apos;t know how you can keep your thoughts straight.  To do anything you must SELECT from somewhere even though you&apos;re not actually pulling any data from the db.  It&apos;s insane.&lt;/p&gt;
&lt;p&gt;A favorite example of a scary proc is 3376 lines of actual code (no whitespace or comments), and 673 of those lines contain the word &quot;SELECT&quot;.&lt;/p&gt;
&lt;p&gt;It just doesn&apos;t look like code you can actually maintain.  I could code it so much clearer in Java, and when I need to boost the performance, I can start transparently splitting the business logic across a cluster of application servers.&lt;/p&gt;
&lt;p&gt;It&apos;s too bad I can&apos;t make this project my proving ground for super-scalable Java code.  I guess I&apos;ll have to grow my personal projects into beasts like this. (I did at one time have wedding.hjsoft.com split across 2 machines just to see it.)&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                1 Year Already
            </title>
            <link>
                https://www.hjsoft.com/blog/1_Year_Already.html
            </link>
            <pubDate>Mon, 11 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/1_Year_Already.html
            </guid>
            <description>
                &lt;p&gt;Claire and I celebrated our first full year of marriage yesterday.  Time does fly!  We modestly celebrated with lunch and a movie yesterday afternoon.&lt;/p&gt;
&lt;p&gt;American Wedding is a good movie.  It&apos;s better than American Pie 2.  There were many funny little things that young, recently married couples may recognize.  It was a fitting little date.&lt;/p&gt;
&lt;p&gt;Along with that milestone, Paige turned 3 months old.  She celebrated by hanging out with Jami and Sean.  They have a ceiling fan, so Paige was perfectly happy.&lt;/p&gt;
&lt;p&gt;Our wedding website is also still up and running for a full year of uselessness now.  Whenever I have something new and substantial for my JBoss server to run, maybe I&apos;ll replace it.  Until then, I just like to see it there.&lt;/p&gt;
&lt;p&gt;And finally, the year-old wedding cake actually didn&apos;t taste terrible.  It was just a little dry.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                The Unthinkable...I Feel Naked
            </title>
            <link>
                https://www.hjsoft.com/blog/The_Unthinkable_I_Feel_Naked.html
            </link>
            <pubDate>Fri, 8 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/The_Unthinkable_I_Feel_Naked.html
            </guid>
            <description>
                &lt;p&gt;I must have been really tired this morning.  It&apos;s like that dream where you go to school not wearing clothes.&lt;/p&gt;
&lt;p&gt;I walked out the door today without my laptop bag, and I didn&apos;t notice it until about 30 minutes into my drive.  There was no turning back.  My brain has obviously fallen out.  Such a thing has never before happened.&lt;/p&gt;
&lt;p&gt;So, today I have no music, though Claire was kind enough to put the machine up on the network, so I can at least get to my code on my laptop.  I&apos;m just stuck in windows completely today. :(  It could be worse though -- at least &lt;b&gt;my&lt;/b&gt; web servers are still running without incident.&lt;/p&gt;
&lt;p&gt;How&apos;s that for baiting the subject?&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Identity Crisis
            </title>
            <link>
                https://www.hjsoft.com/blog/Identity_Crisis.html
            </link>
            <pubDate>Tue, 5 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Identity_Crisis.html
            </guid>
            <description>
                &lt;p&gt;I&apos;m to think like a user and actually be able to test this application here at work from the top down.  This has already been a long day, and it just got longer.&lt;/p&gt;
&lt;p&gt;It took me probably 1.5 years to get comfortable with the processes and procedures  of the insurance industry in my previous job.  The statewide court system is much more complex, or at least we&apos;re modelling a much broader field than I had to in insurance.&lt;/p&gt;
&lt;p&gt;I&apos;ve been at this job for almost 6 months, and while I may have come a long way, I still have a majority of the system to learn.  I still don&apos;t know all the terms, or the path a court case takes through the judicial system.  It makes it really difficult to &quot;test with sane data&quot; when I don&apos;t even know what a sane sequence of events would be.  For good measure, there&apos;s even Latin words peppered through the choices on each screen.  That&apos;s good fun.&lt;/p&gt;
&lt;p&gt;Oh well, more challenges on top of an already long day.  I had been very comfortable concentrating on my little slice of the system, but I&apos;ll be much more valuable when I actually know why the stuff does what it does.  Working on monster projects is kind of neat...until you&apos;re required to see the big picture.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Hello, Wrong Number!
            </title>
            <link>
                https://www.hjsoft.com/blog/Hello_Wrong_Number.html
            </link>
            <pubDate>Mon, 4 Aug 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Hello_Wrong_Number.html
            </guid>
            <description>
                &lt;p&gt;I have a phone at work like most people I guess.  I despise using the telephone.  It completely ties me down and eliminates all hope of multitasking.&lt;/p&gt;
&lt;p&gt;The really fun part about my work phone is that no one has the number, so no one calls me there, but invariably, at least twice a week, it rings.  I say &quot;AOPC, This is John&quot;, and the hapless person on the other end stammers dumbly and asks for someone who&apos;s not me.  It&apos;s always a wrong number, but always for someone new.  My number must be near many other numbers in Mechanicsburg.&lt;/p&gt;
&lt;p&gt;Someday, I&apos;m going to finally start answering my phone &quot;Hello, wrong number.&quot;&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                good comics make my day
            </title>
            <link>
                https://www.hjsoft.com/blog/good_comics_make_my_day.html
            </link>
            <pubDate>Fri, 25 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/good_comics_make_my_day.html
            </guid>
            <description>
                &lt;p&gt;
This &lt;a href = &quot;http://www.megatokyo.com/index.php?strip_id=440&quot;&gt;comic&lt;/a&gt;
over at megatokyo had me rolling (as much as is acceptable at my workplace) in the  aisles.  For anyone trying to follow the story (of which this is a minimal part I  think), I&apos;m still kind of confused, but recent strips have made Largo&apos;s weird fantasy world a bit more understandable.
&lt;/p&gt;
&lt;p&gt;
The only bad thing is that it&apos;s taken me until now to get around to reading comics.  This is supposed to be my morning activity.
&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                I work hard
            </title>
            <link>
                https://www.hjsoft.com/blog/I_work_hard.html
            </link>
            <pubDate>Thu, 24 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/I_work_hard.html
            </guid>
            <description>
                &lt;p&gt;Or so I have the database convinced:
&lt;code&gt;com.sybase.jdbc.SybSQLException: The query and the views in it exceed the limit of 50 tables&lt;/code&gt;&lt;/p&gt;
It&apos;s amazing how large and complex these systems can be.  This Common Pleas application is amazing.  It tries to do everything a court in Pennsylvania could possibly need to do.  It definitely makes my little &quot;store and retrieve&quot; applications seem meaningless.  I have a long way to go to attain Java stardom.

            </description>
            
        </item>
        <item>
            <title>
                Fear of Holes in the House
            </title>
            <link>
                https://www.hjsoft.com/blog/Fear_of_Holes_in_the_House.html
            </link>
            <pubDate>Tue, 22 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Fear_of_Holes_in_the_House.html
            </guid>
            <description>
                &lt;p&gt;I hate home improvements.  It all stems from my fear of making holes in the wrong places, or breaking things worse, or doing the job half-assed, because I didn&apos;t know the proper way to do it in the first place.&lt;/p&gt;
&lt;p&gt;I hung a big huge ceiling fan myself, and I&apos;m quite proud.  After consulting with my Dad and realizing how simple it was when I didn&apos;t overthink, I screwed it into the ceiling joist.  That was the issue -- supporting the weight.  The old junction box was quite flimsy and the directions made a big deal about having a strong box from which to hang this thing, so I completely overlooked the big strong wood thing.  I&apos;m confident the fan will not kill us now.&lt;/p&gt;
&lt;p&gt;Otherwise, the house is wired terribly.  I need many more circuits, but of course, running wire requires me to strategically place HOLES in the house, and I&apos;m just not convinced I have enough information to sufficiently place them.  I&apos;ll end up with the extra holes that got me nothing but an eye sore in my nice kitchen.&lt;/p&gt;
&lt;p&gt;It may become obvious that I&apos;ve never used spackle, and on top of that, I&apos;d need to paint the spackle.  The new color will be slightly off, and it&apos;ll still be an eyesore, so I&apos;ll have to repaint the entire wall and room.  Paint will get on the floor, and I&apos;ll end up replacing the carpet and scratch the walls during that installation.  If somehow, I do manage to get the room reassembled, it&apos;ll look nicer than the adjacent room and I&apos;ll be obligated to fix up that other room.  It&apos;s a vicious cycle that I&apos;m going to avoid by refraining from hanging that shelf or running that wire or whatever.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Design Challenges
            </title>
            <link>
                https://www.hjsoft.com/blog/Design_Challenges.html
            </link>
            <pubDate>Sat, 19 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Design_Challenges.html
            </guid>
            <description>
                &lt;p&gt;I think I&apos;ll stick with this look for a while, but I&apos;d like some
pointers on tuning it.  I&apos;d love to see the column of *&apos;s set properly

for any size article content.  Right now I do it with a simple 
length/60 kind of thing to tell how many lines, but this obviously
does not accomodate using any actual formatting in my posts 
(pre tags, paragraphs, images, etc).
Anyone have any ideas?  I&apos;m expecting a neat css trick or something.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Design
            </title>
            <link>
                https://www.hjsoft.com/blog/Design.html
            </link>
            <pubDate>Thu, 17 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Design.html
            </guid>
            <description>
                &lt;p&gt;My design is cool.  If you don&apos;t know what it looks like, you probably won&apos;t find much you understand here.&lt;/p&gt;

            </description>
            
        </item>
        <item>
            <title>
                Technology
            </title>
            <link>
                https://www.hjsoft.com/blog/Technology.html
            </link>
            <pubDate>Thu, 17 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/Technology.html
            </guid>
            <description>
                &lt;p&gt;This blog uses a bunch of J2EE stuff -- It&apos;s an exercise of my abilities with these technologies.&lt;/p&gt;
Entity beans persist the data.  Session beans implement the business logic.  Navigation and control is implemented (somewhat poorly at this point) in Jakarta Struts.  JSP provides the view.
As usual, my project is overengineered and scalable to 10000 users across 3 servers, when the need arises. :)

            </description>
            
        </item>
        <item>
            <title>
                First Post
            </title>
            <link>
                https://www.hjsoft.com/blog/First_Post.html
            </link>
            <pubDate>Thu, 17 Jul 2003 00:00:00 -0400</pubDate>
            <guid isPermaLink="false">
                https://www.hjsoft.com/blog/First_Post.html
            </guid>
            <description>
                &lt;p&gt;So, it appears that I&apos;m going to start a blog.&lt;/p&gt;
As you may be able to guess, the content will be mostly java and technical.  I do have the occassional stupid house thing to report though.  I&apos;ve been dying to get that off my chest.

            </description>
            
        </item>
        
    </channel>
</rss>