Michael Jay Lissnerhttps://michaeljaylissner.com/2014-11-06T00:00:00-08:00Updating Bulk Data in CourtListener…Again2014-11-06T00:00:00-08:00Mike Lissnertag:michaeljaylissner.com,2014-11-06:posts/2014/11/06/updating-bulk-data-in-courtlistener-more/<p>I <a href="https://michaeljaylissner.com/posts/2014/09/28/updating-bulk-data-in-courtlistener/">wrote a few weeks ago</a> about our new system for creating <a href="https://www.courtlistener.com/api/bulk-info/">bulk files in CourtListener</a>. The system was pretty good. The goal was and is to efficiently create one bulk file for every jurisdiction—object pair in the system. So, that means one bulk file for oral arguments from Supreme Court, another for opinions from the Ninth Circuit of Appeals, another for dockets from Alabama’s appellate court, etc. We have about 350 jurisdictions and four different object types right now, for a total of about 1,400 bulk files.</p>
<p>This system needs to be fast.</p>
<p>The old system that I wrote about before would create 350 open file handles at a time, and then would iterate over each item in the database, adding it to the correct file as it inspected the item. This was a beautiful system because it only had to iterate over the database once, but even after <a href="https://github.com/freelawproject/courtlistener/commit/a0e4326d98e9f501ec3e69955d6b5650471686e8">performance tuning</a>, it still took about 24 hours. Not good enough. </p>
<p>I got to thinking that it was terrible to create the entire bulk archive over and over when in reality only a few items change each day. So I created a <a href="https://github.com/freelawproject/courtlistener/issues/293">bug to make bulk data creation incremental</a>. </p>
<p>This post is about that process.</p>
<h2 id="the-first-approach">The First Approach</h2>
<p>The obvious way to do this kind of thing is to grab the bulk files you already have (as gz-compressed tar files), and add the updated items to those files. Well, I wrote up code for this, tested it pretty thoroughly and considered it done. Only to realize that, like regular files, when you create a compressed tar file with a command like this… </p>
<div class="highlight"><pre><span class="n">tar_files</span><span class="p">[</span><span class="s">'all'</span><span class="p">]</span> <span class="o">=</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s">'all.tar.gz'</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s">'w:gz'</span><span class="p">)</span>
</pre></div>
<p>…it clobbers any old files that might have the same name. So much for that.</p>
<h2 id="next-approach">Next Approach</h2>
<p>Well, it looked like we needed append mode for compressed tar files, but alas, from <a href="https://docs.python.org/3/library/tarfile.html">the documentation</a>:</p>
<blockquote>
<p>Note that ‘a:gz’, ‘a:bz2’ or ‘a:xz’ is not possible.</p>
</blockquote>
<p><span class="dquo">“</span>a:gz” means a gz-compressed tar file in <strong>a</strong>ppend mode, so much for that idea. Next! </p>
<h2 id="next-approach_1">Next Approach</h2>
<p>Well, you can’t make gz-compressed tar files in append mode, but you can create tar files in append mode as step one, then compress them as step two. I tried this next, and again, it looked like it was working…until I realized that my tar files contained copy after copy after copy of each file. I was hoping that it’d simply clobber files that were previously in the file, but instead it was just putting multiple files of the same name into the tar. </p>
<p>Perhaps I can delete from the tar file before adding items back to it? <a href="http://bytes.com/topic/python/answers/40408-deleting-tarfile">Nope, that’s not possible either</a>. Next idea?</p>
<h2 id="final-approach">Final Approach</h2>
<p>I was feeling pretty frustrated by now, but there was one more approach, and that was to add an intermediate step. Instead of creating the tar files directly in Python, I could save the individual <code>json</code> files I was previously putting into the tar file to disk, then create the compressed tar files directly from those once they’re all created. We proved earlier that Python has no issues about clobbering items on disk, so that’ll work nicely for incremental bulk files, which will just clobber old versions of the files.</p>
<p>From performance analyses of the code, most of the bottleneck is in serializing <span class="caps">JSON</span>, so this will change it so that gets done at most once per item in the database and then most of the remaining work will be making tar files and gz-compressing them. </p>
<h2 id="whew">Whew!</h2>
<p>I was hoping that I would be able to easily update items inside a compressed tar file, or even inside an uncompressed tar file, but that doesn’t seem possible. </p>
<p>I was hoping that I could create these files while iterating over the database, as described in the first approach, but that’s not doable either. </p>
<p>At the end of the day, the final method is just to write things to disk. Simple beats complicated this time, even when it comes to performance. </p>Some Thoughts on Celery2014-11-01T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2014-11-01:posts/2014/11/01/some-thoughts-on-celery/
<p>We finally upgraded <a href="https://www.courtlistener.com">CourtListener</a> last week and things went pretty well with the exception of two issues. First, we had some extended downtime as we waited for the database migration to complete. In retrospect, I should have realized that updating every item one row at a time would take a while. My bad. </p>
<p>Second, <a href="http://www.celeryproject.org/">Celery</a> broke again and that took me the better part of a day to detect and fix. As a central part of our infrastructure, this is really, <em>truly</em> frustrating. The remainder of this post goes into what happened, why it happened and how I finally managed to fix it. </p>
<h2 id="why">Why?</h2>
<p>First, why did this happen? Well…because I decided to log something. I created a task that processes <a href="https://free.law/2014/10/31/announcing-oral-arguments-on-courtlistener/">our new audio files</a> and I thought, “Hey, these should really log to the Juriscraper log rather than the usual celery log.” So, I added two lines to the file: One importing the log file and the second writing a log message. <em>This</em> is the little change that brought Celery to a grinding halt. </p>
<h2 id="what-the-hell">What the Hell?</h2>
<p>If you’re wondering why logging would break an entire system, well, the answer is because Celery runs as a different user than everything else. In our case, as the <code>celery</code> user — a user that didn’t have permission to the log file I requested. Ugh. </p>
<p>Fine, that’s not so bad, but there were a number of other frustrating things that made this much worse:</p>
<ol>
<li>
<p>The Celery init script that we use was reporting the following:</p>
<div class="highlight"><pre><span class="err">↪</span> <span class="n">sudo</span> <span class="n">service</span> <span class="n">celeryd</span> <span class="n">start</span>
<span class="n">celeryd</span><span class="o">-</span><span class="n">multi</span> <span class="n">v3</span><span class="mf">.0.13</span> <span class="p">(</span><span class="n">Chiastic</span> <span class="n">Slide</span><span class="p">)</span>
<span class="o">></span> <span class="n">Starting</span> <span class="n">nodes</span><span class="p">...</span>
<span class="o">></span> <span class="n">w1</span><span class="p">.</span><span class="n">courtlistener</span><span class="p">.</span><span class="n">com</span><span class="o">:</span> <span class="n">OK</span>
</pre></div>
<p>But no, it was not starting “<span class="caps">OK</span>”. It was immediately crashing.</p>
</li>
<li>
<p>No log messages…<em>anywhere</em>. This appears to be because you have to detach <code>stdin</code> and <code>stdout</code> before daemonizing and according to asksol on <span class="caps">IRC</span>, this has been fixed in recent versions of Celery so even daemonizing errors can go to the Celery logs. Progress!</p>
</li>
<li>
<p>The collection of things that happens when <code>celery</code> starts is complicated:</p>
<ol>
<li>
<p>I call <code>sudo service celeryd start</code></p>
</li>
<li>
<p><code>service</code> calls <code>/etc/init.d/celeryd</code></p>
</li>
<li>
<p><code>celeryd</code> does some stuff and calls <code>celery.sh</code> (another file altogether), where our settings are.</p>
<p><strong>Update</strong>: Apparently this is a CourtListener-specific customization, so this step probably won’t apply to you, but I have no idea where this wacky set up came from (it’s been in place for years).</p>
</li>
<li>
<p>Control is returned to <code>celery</code>, which starts celery itself with a command generated from <code>celery.sh</code>.</p>
</li>
</ol>
<p>On top of this, there’s a <code>celery</code> binary and there’s a celery <a href="https://docs.djangoproject.com/en/dev/howto/custom-management-commands/">management command</a> for Django. (<strong>Update</strong> the Django commands were removed in Celery 3.1. More progress!) <code>celery --help</code> prints out 68 lines of documentation. Not too bad, but many of those lines refer you to other areas of the documentation. For example, <code>celery worker --help</code> prints another 100 lines of help text. <em>Jesus</em> this thing is complicated. </p>
<p>Did I mention it has <a href="http://seeknuance.com/2012/07/30/celery-api-changes-drive-me-nuts/">changing APIs</a>?</p>
</li>
</ol>
<p>I digress a bit, but the point here is that it fails silently, there are no log messages when it fails, and there’s no way to know which part of a complicated infrastructure is the problem. End rant.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup></p>
<h2 id="seeking-sanity">Seeking Sanity</h2>
<p>It took me a long time to figure out what was going wrong, but I did eventually figure it out. The process, in case you run into something similar, is to modify <code>celeryd</code> so it prints out the command that it eventually runs. At that point you’ll have the correct command. With that, you can run it as the <code>celery</code> user and with some luck you’ll see what the problem is. There’s <a href="http://stackoverflow.com/a/21883578/64911">a modified init script for this purpose, if you like</a>.</p>
<p>Other tips:</p>
<ol>
<li>
<p>If you have a new enough version of Celery, there are <a href="http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html#troubleshooting">some troubleshooting tips</a> that should help. They did nothing for me, because I haven’t upgraded yet for fear of the changing APIs.</p>
</li>
<li>
<p>There seem to be a handful of different command line flags that Celery can use to be sent to the background. You’ll need to disable these when you’re testing or else you won’t see error messages or anything (apparently?).</p>
</li>
</ol>
<h2 id="moving-forward">Moving Forward</h2>
<p>So, I feel bad: I’ve ranted a good deal about Celery, but I haven’t proposed any solutions. It looks like a lot of things have been improved in recent versions of Celery, so part of the solution is likely for us to upgrade. </p>
<p>But this isn’t the first time I’ve spent a long time trying to make Celery work, so what other ideas it take to make Celery a less complicated, more reliable tool? </p>
<p>The ideas I’ve come up with so far are: </p>
<ul>
<li>More documentation for installation and set up troubleshooting with the possibility of a wiki.<ul>
<li>But already I rant about how much documentation it has.</li>
</ul>
</li>
<li>A simpler interface that eliminates a number of edge uses.<ul>
<li>But I have no idea what, if anything, can be eliminated. </li>
</ul>
</li>
<li>Support for fewer task brokers.<ul>
<li>But I use RabbitMQ and am considering switching to Redis.</li>
</ul>
</li>
<li>A more verbose, more thorough debug mode.<ul>
<li>But apparently this is already in place in the latest versions?</li>
</ul>
</li>
<li>Let Celery run as the <code>www-data</code> user as a general practice?<ul>
<li>
<p>But apparently that’s a bad idea. </p>
<p><strong>Update</strong> this is a bad idea in general, but it’s not <em>particularly</em> bad if you don’t expose Celery on the network. If you’re only running it locally, you can probablly get by with Celery as a <code>www-data</code> user or similar. </p>
</li>
</ul>
</li>
</ul>
<p>As you can tell, I don’t feel strongly that any of these are the right solution. I am convinced though that Celery has a bad smell and that it’s ripe for a leaner solution to fill some of its simpler use cases. I’m currently considering switching to a simpler task queue, but I don’t know that I’ll do it since Celery is the de-facto one for Django projects.</p>
<p>We deserve a good, simple, reliable task queue though, and I wonder if there are good ideas for what could be changed in Celery to make that possible. I, for one, would love to never spend another minute trying to make RabbitMQ, Celery and my code play nicely together. </p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:1">
<p>In truth Celery is a classic love/hate relationship. On the one hand, it evokes posts like this one, but on the other, it allows me to send tasks to a background queue and distribute loads among many servers. Hell, it’s good enough for Instagram. On the other hand, god damn it, when it fails I go nuts. <a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Creating a Non-Profit2014-10-14T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2014-10-14:posts/2014/10/14/becoming-a-non-profit/
<h2 id="updates">Updates</h2>
<ul>
<li><a href="http://codefordc.org/blog/2016/11/17/start-nonprofit.html">Code for <span class="caps">DC</span> has written a similar post</a> for creating a non-profit in <span class="caps">D.C.</span></li>
</ul>
<h2 id="the-goal">The Goal</h2>
<p>This post is an attempt to document the things that we’ve done at <a href="https://free.law">Free Law Project</a> to get our official Federal and State non-profit status. This has been a grueling process for Brian and me but as we announced on Twitter, we now have it officially in hand, and likely in record time:</p>
<blockquote class="twitter-tweet" lang="en"><p>This isn't tax advice, but we're happy to announce the <span class="caps">IRS</span> approved our 501(c)(3) app, so donations are deductible! <a href="https://t.co/UjaBgSJorr">https://t.co/UjaBgSJorr</a></p>— Free Law Project (@FreeLawProject) <a href="https://twitter.com/FreeLawProject/status/520620527963369472">October 10, 2014</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
<p>Check out <a href="https://free.law/pdf/006-non-profit-status-letter-redacted.pdf">this beauty</a>! We’re finally the real deal.</p>
<p>All through the process, I wished there was something that had all the documentation of the process, so this is my attempt at such a post. I’m writing this after the fact, so I expect that I’ll munge a few details. If you catch me making a mistake, you can either <a href="https://github.com/mlissner/michaeljaylissner.com/edit/master/content/on-memory.md">edit this page</a> yourself using <a href="https://michaeljaylissner.com/posts/2014/10/06/editing-on-github-a-non-technical-explainer/">my handy guide</a>, or you can <a href="https://michaeljaylissner.com/contact">send me a note</a> and I’ll update it. </p>
<h2 id="before-we-begin">Before We Begin</h2>
<p>Three notes before we begin:</p>
<ol>
<li>
<p>Our complete <span class="caps">IRS</span> packet <a href="https://free.law/pdf/irs-1023-free-law-project.pdf">is available</a>. Please feel free to take a look.</p>
</li>
<li>
<p>The very best resource we found for this was <a href="http://www.publiccounsel.org/tools/assets/files/0027.pdf">a checklist</a> from Public Counsel which reads like this blog post if it were written by qualified lawyers. </p>
</li>
<li>
<p>Nothing here, there, or anywhere is tax advice or legal advice or advice in any way, period. This is an overview of the process as we understand it. It might work for you, it might not. We’re not tax or <span class="caps">IRS</span> experts. Hell, I’m not even a lawyer.</p>
</li>
</ol>
<h2 id="the-overall-process">The Overall Process</h2>
<p>Here are the major steps for California and Federal recognition:</p>
<ol>
<li>Reserve the name of your organization with the Secretary of State</li>
<li>Check for trademarks on your organization name</li>
<li>Get an <span class="caps">EIN</span> from the <span class="caps">IRS</span></li>
<li>Get official with the Secretary of State of California<ol>
<li>Write Bylaws</li>
<li>Write Articles of Incorporation</li>
<li>Write Conflict of Interest and Ethics Policy</li>
<li>Hold a meeting creating directors (and having them resign as incorporators, if necessary)</li>
<li>Hold a meeting to ratify and adopt everything above</li>
</ol>
</li>
<li>File Statement of Information with Secretary of State</li>
<li>Register with the California Attorney General’s registry of charitable trusts</li>
<li>Get Federal recognition as a 501(c)(3)<ol>
<li><span class="caps">IRS</span>-1023</li>
<li>Your organization’s press coverage</li>
<li>Your homepage</li>
<li>Articles of Incorporation stamped by the State Secretary</li>
<li>Phone a friend</li>
</ol>
</li>
<li>File for California tax exemption</li>
<li>Get Municipal recognition</li>
</ol>
<h2 id="reserve-your-name-with-the-secretary-of-state">Reserve Your Name with the Secretary of State</h2>
<p>This is an important step if you think somebody else might already have your name or if you think it might get scooped up before you finish your paperwork. This is your opportunity to say that your organization is named such-and-such and nobody else can have that name.</p>
<p>More information about this can be <a href="http://www.sos.ca.gov/business/be/name-availability.htm">found on the Secretary of State’s website</a>. The process involves downloading <a href="http://www.sos.ca.gov/business/corp/pdf/naavreservform.pdf">a form</a>, filling it out, mailing it in, and then waiting for a reply. Once you get the reply, the name is yours for 60 days. This is probably also a good time to…</p>
<h2 id="check-for-trademarks">Check for Trademarks</h2>
<p>If you think the name of your organization might be a trademark, you should check <a href="http://tess2.uspto.gov/bin/gate.exe?f=tess&state=4802:wiyhnl.1.1">the <span class="caps">USPTO</span>’s trademark database</a> to see if it is. If so, it’s probably wise to re-think the name of your organization. Naming your organization the Nike Charitable Trust probably won’t work out well for you.</p>
<h2 id="get-an-ein">Get an <span class="caps">EIN</span></h2>
<p>This is the official step that’s required to incorporate your organization and it’s a fairly easy one. Once this is done you’ll have an Employer Identification Number (<span class="caps">EIN</span>) from the <span class="caps">IRS</span>. </p>
<p>To do this, there is <a href="http://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/Apply-for-an-Employer-Identification-Number-%28EIN%29-Online">a multi-step form on the <span class="caps">IRS</span> website</a>. Work your way through it, and if you come out the other side, you’ll quickly be the owner of a freshly minted <span class="caps">EIN</span>. <a href="http://www.taxanalysts.com/www/features.nsf/Articles/E76DFBC8665E47B185257B1D006B1656?OpenDocument">Keep it private, as you would an <span class="caps">SSN</span></a>.</p>
<h2 id="get-official-with-california">Get Official with California</h2>
<p>At this point, you’ve moved past the easy stuff. It’s time for the weird and difficult paperwork.</p>
<h3 id="write-bylaws-articles-of-incorporation-and-conflict-of-interest-and-ethics-policy">Write Bylaws, Articles of Incorporation and Conflict of Interest and Ethics Policy</h3>
<p>Writing these three items is a very persnickety part of the process. Each item <em>must</em> include certain phrases and failure to include those phrases will sink any attempt to get 501(c)(3) status down the road. The template we used for each of these was created by <a href="http://www.publiccounsel.org">Public Counsel</a> and can be downloaded from their website (<a href="http://www.publiccounsel.org/publications?id=0060">Bylaws</a>, <a href="http://www.publiccounsel.org/publications?id=0059">Articles of Incorporation</a>, <a href="http://www.publiccounsel.org/publications?id=0061">Ethics Policy</a>). </p>
<p>The best process we discovered for this was to very carefully work our way through each template and to update any section that needed it. The <a href="https://free.law/pdf/Articles_of_Incorporation_and_Bylaws.pdf">result</a> clocks in at 25 pages for the Bylaws and Articles of Incorporation and ten pages for the Conflict of Interest and Ethics Policy.</p>
<h3 id="hold-some-meetings">Hold Some Meetings</h3>
<p><span class="caps">OK</span>, you’ve got your name, <span class="caps">EIN</span>, Bylaws, Articles of Incorporation and Conflict of Interest and Ethics Policy all ready. Now what? Well, now we enter the portion of the process that involves magic and wizardry. What we do now is we hold two meetings. Feel free to chant during these meetings if that helps them make sense.</p>
<p>The first meeting serves the purpose of creating directors and having them resign as incorporators, if necessary. To have this meeting, get all of your incorporators and directors together and decide to make it so. Have your secretary keep minutes from the meeting. You’ll need them for the 501(c)(3). <a href="https://free.law/pdf/003-minutes_incorporators.pdf">Here are ours</a> and <a href="http://www.publiccounsel.org/tools/assets/files/mins_incorp.doc">here’s the template we used</a>. You can see how this might feel a bit like voodoo magic if your board of directors is the same group of people as your incorporators (as in our case) — One minute they’re incorporators, the next they’re directors, and the people that authorized the switch are themselves.</p>
<p>The second meeting is where the real business goes down. Here you adopt all of the paperwork you created above, establish bank accounts, etc. Again, we used the templates from Public Counsel to keep minutes for this meeting. <a href="https://free.law/pdf/004-mins_1st_bd_mtg-signed.pdf">Check out our minutes for details</a> and <a href="http://www.publiccounsel.org/tools/assets/files/mins_1st_bd_mtg.doc">here’s a template</a>. You’ll also see in our minutes a waiver of notice that waives the director’s normal requirement to tell people about the meeting in advance.</p>
<p>These two meetings can (and probably will) take place back to back, but they need to have <em>separate</em> minutes and need to be <em>separate</em> meetings. This is because until the board adopts themselves in the first meeting, they can’t very well do the things in the second meeting. Voodoo? Perhaps. </p>
<h3 id="file-statement-of-information-with-secretary-of-state-of-california">File Statement of Information with Secretary of State of California</h3>
<p>Within 90 days of when you filed your original Articles of Incorporation, you need to take all of the above and send it into the secretary of state along with the <a href="http://www.sos.ca.gov/business/corp/pdf/so/corp_so100.pdf"><span class="caps">SI</span>-100 form</a>. </p>
<p>If you do all of this well and properly, you’ll soon be registered with the State of California, but until you get your 501(c)(3) pushed through you can’t become an official California non-profit, so you’ll have to hold on for a bit for that piece of the puzzle. More on this in a moment. </p>
<h3 id="register-with-the-california-attorney-general">Register with the California Attorney General</h3>
<p>Another thing you’ve got to do, once you’ve got state recognition is to register with the California Attorney General. You have 30 days to do this from the moment when you first had assets as an organization. Be swift.</p>
<p>To do this, there are <a href="http://oag.ca.gov/sites/all/files/agweb/pdfs/charities/charitable/initialReg.pdf">instructions on the Attorney General’s website</a>, and there’s <a href="http://oag.ca.gov/sites/all/files/agweb/pdfs/charities/charitable/ct1-form.pdf">a <span class="caps">PDF</span> that you need to complete</a>.</p>
<h2 id="get-federal-recognition">Get Federal Recognition</h2>
<p>If you’ve come this far, you’re actually doing pretty well, but it’s time to find a good fortifying drink, because it’s about to get worse. Much worse. Our operating theory is that the <span class="caps">IRS</span> makes this hard because they simply don’t like giving tax exemptions — it’s antithetical to their whole raison d’être. But be that as it may, we must persevere if we’re going to make our organization a 501(c)(3). </p>
<p>So, what’s this process look like? </p>
<p>Well, there are really only two forms that you need to worry about. The first is the <a href="http://www.stayexempt.irs.gov/StartingOut/InteractiveForm1023Application.aspx"><span class="caps">IRS</span>-1023</a> and the second is the <a href="http://www.stayexempt.irs.gov/checklist.pdf">checklist for the <span class="caps">IRS</span>-1023</a>. That should tell you something about the process you’re about to engage in: There’s a form for the form. Oh, and that’s not all: there’s a <a href="http://www.stayexempt.irs.gov/StartingOut/InteractiveForm1023Application.aspx">web form</a> for the form for the form. Also, the <span class="caps">IRS</span>-1023 is an <em>interactive</em> <span class="caps">PDF</span> with parts that appear and disappear as you complete it. Also it crashes sometimes (save often!), can only be opened in Adobe Reader and there are three versions of the form and two different revisions. Dizzy yet?</p>
<p>Let’s see if I can simplify this:</p>
<ol>
<li>The <span class="caps">IRS</span>-1023 from December 2013 is currently the main form you want — it’s long and has a lot of questions. It is available in three forms: Interactive (recommended), Regular (no interactive stuff), and Accessible (even less interactive stuff?). You only seem to be able to get this form if you answer <a href="http://www.stayexempt.irs.gov/StartingOut/InteractiveForm1023Application.aspx">a bunch of questions aimed at prepping you for the process</a>. Even then it gives you a zip containing the form, sigh.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup> </li>
<li>The 1023 checklist <em>must</em> be included in your submission as a table of contents of sorts. The <a href="http://www.stayexempt.irs.gov/checklist.pdf">newest one I’ve found</a> is from June 2006.</li>
<li>There are copious resources online to help you complete these forms. The ones we used were <a href="http://form1023.org/">form1023.org</a>, the <a href="http://www.irs.gov/instructions/i1023/index.html"><span class="caps">IRS</span>’s own documentation</a>, and the <span class="caps">IRS</span>’s <a href="http://www.irs.gov/Charities-&-Non-Profits/Frequently-Asked-Questions-about-Form-1023"><span class="caps">FAQ</span> for the form</a>.</li>
</ol>
<p><span class="caps">OK</span>, you’ve got your forms, let’s talk a bit about the packet you’re going to send to the <span class="caps">IRS</span>. The best place to begin understanding the packet is by looking at the checklist we just downloaded. In addition to the items mentioned above, it also requests a number of new items we haven’t seen before. Most of these won’t be necessary for most non-profits, but one is new and worth mentioning: the Expedite Request.</p>
<h3 id="getting-expedited">Getting Expedited</h3>
<p>As we’ve come to understand it, there are essentially three queues your paperwork can fall into at the <span class="caps">IRS</span>:</p>
<ol>
<li>The urgent queue (30 days?)</li>
<li>The normal queue (90 days?) and </li>
<li>The troublemaker queue (> 90 days / Never)</li>
</ol>
<p>Your goal is to fall into one of the first two queues. If you fall into the third, it’s possible you’ll never come out the other side. <a href="http://blogs.gnome.org/jnelson/2014/06/30/the-new-501c3-and-the-future-of-free-software-in-the-united-states/">Seriously</a>. </p>
<p>If you want to fall into the first queue, you need to complete an Expedite Request. These are actually pretty straightforward, but you need to qualify. You can see an example of our Expedite Request in our <a href="https://free.law/pdf/irs-1023-free-law-project.pdf">1023 submission</a>, but basically, you need to state specific harm that will occur if your organization doesn’t get swift 501(c)(3) processing. There are <a href="http://www.irs.gov/Charities-&-Non-Profits/Applying-for-Exemption:-Expediting-Application-Processing">guides about this on the <span class="caps">IRS</span> website</a> that we used (successfully, we believe). </p>
<p>Getting faster processing is great but it’s not always possible. Failing that, the thing to do is make sure that you don’t fall into the third queue. </p>
<p>I think the important parts of this are:</p>
<ol>
<li>Carefully follow <a href="http://www.irs.gov/instructions/i1023/index.html">the instructions provided by the <span class="caps">IRS</span> for the 1023</a>.</li>
<li>Make sure that your articles of incorporation contain the proper purpose and dissolution clauses (they will if you use the templates).</li>
<li>Check the <a href="http://www.irs.gov/Charities-&-Non-Profits/Top-Ten-Reasons-for-Delays-in-Processing-Exempt-Organization-Applications">top ten list</a> provided by the <span class="caps">IRS</span> for speeding up the process.</li>
<li>Do <em>not</em> mention any of <a href="https://en.wikipedia.org/wiki/IRS_targeting_controversy">cursed words</a> on the <span class="caps">IRS</span>’s list to “Be On the Look Out” for (So-called <span class="caps">BOLO</span> words).</li>
</ol>
<p>The list is apparently no longer in use due to the furor it caused, but it’s still instructive to know what was on it. For example, in our case “Open Source” was on the list, so despite working in the open (something we believe contributes to our educational purpose), we had to be very careful never to mention that in our mission or anywhere else just to ensure there were no misunderstandings.</p>
<p>Once you’ve got your Expedite Request completed, it’s time to work on the 1023 itself. This is a long and arduous process that is too detailed to get into. Be careful, be thorough, follow the guides, and get help from a friend or lawyer. We found it to be incredibly useful to get somebody with experience to carefully look at our paperwork.</p>
<h3 id="other-things-we-sent-the-irs">Other Things We Sent the <span class="caps">IRS</span></h3>
<p>In addition to the items mentioned above, we also included printed copies of a partnership agreement we have with Princeton for the hosting of <span class="caps">RECAP</span>, a printed selection of press, and printed copies of our homepages (<span class="caps">RECAP</span>, CourtListner, Free Law Project).</p>
<p>The goal of these enclosures was mostly to keep the <span class="caps">IRS</span> reviewer from touching their computer, but also to keep their life as simple as possible. Like any application, you want to control the information that is provided to the reviewer. Just like you wouldn’t want your next boss seeing your Facebook profile, you don’t want the <span class="caps">IRS</span> reviewer looking up your organization’s website. There’s likely nothing bad for them to see, but you want to keep things as simple as possible. Maybe, we reason, if we provide a printed copy of our homepage they won’t bother booting up their computer. Perhaps. </p>
<h3 id="remarks-on-formatting-etc">Remarks on Formatting, Etc.</h3>
<p>Sadly, like <a href="http://www.aarongreenspan.com/writing/20130217/petitioning-rube-goldbergs-supreme-court/">filing with the Supreme Court</a>, completing your 1023 involves a few formatting and clerical details that we must attend to. First you must be sure to put your name and <span class="caps">EIN</span> on the top of every page. This is suprisingly difficult since many of the pages are PDFs you don’t control, but you can pull it off if you try by feeding your printed documents through the printer twice. The first time, you print the regular stuff, the second time you print a blank page over and over that contains your <span class="caps">EIN</span> and organization name in the header. Fun.</p>
<p>The second thing to attend to is the ordering of the documents themselves. This is the order of our 1023, and from what we can tell, you really shouldn’t do anything much different:</p>
<ol>
<li>1023 Checklist</li>
<li>Request for Expedited Processing</li>
<li>List of Enclosures</li>
<li>The 1023 itself</li>
<li>Articles of Incorporation</li>
<li>Bylaws</li>
<li>Supplemental answers to 1023 questions</li>
<li>Conflict of Interest and Ethics Policy</li>
<li>Minutes adopting Conflict of Interest and Ethics Policy (remember when we made these?)</li>
<li>A partnership agreement we have with Princeton</li>
<li>Our selection of press coverage</li>
<li>Printed copies of our homepages</li>
<li><span class="caps">IRS</span> Form <span class="caps">SS</span>-4 indicating our <span class="caps">EIN</span></li>
</ol>
<p>In total: 83 pages of delightful paperwork and one check for $850.</p>
<p><img alt="Total weight: 3/4 lbs." src="https://michaeljaylissner.com/images/forming-a-non-profit/three-quarter-pounder.jpeg"/></p>
<h2 id="file-california-tax-exemption-forms">File California Tax Exemption Forms</h2>
<p>If all goes well, you’ll soon hear back from the <span class="caps">IRS</span> and be granted your Federal recognition as a 501(c)(3). Congratulations on a hard-won victory. </p>
<p>Now that that’s in place, it’s time to switch back to California and wrap things up with them. To do this you need to complete form 3500A (<a href="https://www.ftb.ca.gov/businesses/Exempt_organizations/Applying_for_tax-exemption.shtml">information</a> / <a href="https://www.ftb.ca.gov/forms/misc/3500a.pdf">download</a>). </p>
<p>Don’t try to save this form. You can’t:</p>
<p><img alt="Go F*** Yourself -- You cannot save this file." src="https://michaeljaylissner.com/images/forming-a-non-profit/cannot-save-pdf.png"/></p>
<p>Instead, fill it out, print it, and mail it in along with a copy of your Federal Recognition. If you can print to <span class="caps">PDF</span>, that <em>might</em> save your work.</p>
<h2 id="get-municipal-recognition">Get Municipal Recognition</h2>
<p>The final step of this process for us, though it might come much earlier
for you, was to get in touch with the city where we incorporated and to
tell them that we exist. We tried to do this early on and had the city
staff member in charge of business licenses tell us to come back once we
had 501(c)(3) recognition. In the city we selected non-profits are
exempt from city business license fees, so that may be why they were so
lax about the timing of this paperwork. You may find in your city that
they want you to have a business license and pay related fees while
you’re waiting on 501(c)(3) status (and sometimes even after).</p>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>All in all, that’s the basic process of creating a non-profit and getting tax exemption from the feds, the state and your city. Most of this went pretty smoothly, but the most difficult part was by far the <span class="caps">IRS</span>-1023, and even that we were able to get our results back in about 30 days. This feels like something of a miracle, but it took us over a year to get all the paperwork completed and submitted. </p>
<p>In the end I liken the process to an incantation of a magic spell: Done correctly, you wind up with a massive pile of paperwork that magically looks like a bad-ass application for tax-exempt status that washes over anybody that looks at it, convincing him or her that your organization is charitable and deserves tax exemption in a forthright manner. </p>
<p>Done incorrectly, you enter a hole of despair, despondency and, worse, taxation.</p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:1">
<p>Yes, PDFs are <a href="http://stackoverflow.com/a/10548893/64911">generally compressed internally</a>. <a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>In Re NSL2014-10-08T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2014-10-08:posts/2014/10/08/in-re-nsl/<p><img alt="Kurt Opsahl for EFF" src="https://michaeljaylissner.com/images/in-re-nsl/kurt.jpeg" /></p>
<p><em>Kurt Opsahl for <span class="caps">EFF</span></em></p>
<p>I spent the morning today in court watching <a href="https://www.eff.org/about/staff/kurt-opsahl">Kurt Opsahl</a> from the <a href="https://www.eff.org">Electronic Frontier Foundation</a> deliver oral arguments for <em>In Re National Security Letters</em>, <span class="caps">AKA</span> <em>Under Seal v. Eric Holder</em>. I had originally planned on attending this as a lay person holding a smart phone camera and taking pictures, but soon after I filed <a href="http://www.ca9.uscourts.gov/news_media/camera_application_form/">an application to take photos</a>, I became <em>the</em> media “pool”, meaning I was the one guy responsible for taking photos and distributing to the press after the fact. </p>
<p>Well, I’m no photographer, but since nobody else applied to take photos, here are the photos that I took:</p>
<form method="get" target="_blank" action="https://drive.google.com/file/d/0Bwzoqmo9VXMvU0JfWldsU1Q1TUE/view?usp=sharing">
<input class="button lead" type="submit" name="download" value="Download as Zip"></input>
</form>
<p>I hereby release these as public domain photos. If you want to give me attribution, great. If not, no worries. </p>
<h2 id="some-comments-on-nsls-and-the-proceedings">Some Comments on NSLs and the Proceedings</h2>
<p>The district court previously found that <a href="https://en.wikipedia.org/wiki/National_security_letter">National Security Letters (NSLs)</a> violate the First Amendment and today the government appealed that finding with a variety of interesting claims. Probably my favorite was when the government claimed that the gag orders that typically apply to NSLs were necessary because without them the <span class="caps">FBI</span> wouldn’t be able to use NSLs as an investigative tool anymore. </p>
<p>Matt Zimmerman, the attorney when this case was in the district court, put it well:</p>
<blockquote class="twitter-tweet" lang="en"><p>Gov't: “<span class="caps">FBI</span> couldn't function” if it had to review the appropriateness of <span class="caps">NSL</span> gags. <a href="https://twitter.com/hashtag/nsl?src=hash">#nsl</a> <a href="https://twitter.com/hashtag/wow?src=hash">#wow</a></p>— Matt Zimmerman (@zim) <a href="https://twitter.com/zim/status/519899839526490113">October 8, 2014</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>The interesting thing here is that it’s probably true. If the gag orders were removed, the thousands of National Security Letters that the government issues each year would need more review, making it so that the <span class="caps">FBI</span> no longer had an extra-judicial backdoor into investigations. The <span class="caps">FBI</span> wouldn’t want that.</p>
<p><img alt="Judge" src="https://michaeljaylissner.com/images/in-re-nsl/judge.jpeg" /></p>
<p>There were a million other arguments made that I’ll leave to the lawyers to discuss, but all in all it looked pretty good for <span class="caps">EFF</span> and I think folks are feeling confident. From here, it’s now up to the panel of judges to issue their decision. My bet is that regardless of what the decision says, this one will be appealed to the Supreme Court. Perhaps they’ll need a photographer too.</p>Editing a File on Github2014-10-06T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2014-10-06:posts/2014/10/06/editing-on-github-a-non-technical-explainer/
<p>When writing programs, developers have a choice of whether they want their work to be public or private. Programs that are made public are called “open source” and ones that are not are called “closed source”. In both cases the developer can share a program with the world as a website or iPhone app, or whatever, but in the case where the code is shared publicly it’s <em>also</em> possible for anybody anywhere in the world to change the program to make it better. (For more detail on this and other jargon, see the <a href="#some-definitions">definitions at the end</a>.)</p>
<p>This is very cool! </p>
<p>But I hear you asking, “How do I, a non-developer, make use of this system to make the world a better place?” I’m glad you asked — this article is for you.</p>
<h2 id="and-then-there-was-git">And then there was Git</h2>
<p><a href="http://git-scm.com/">Git</a> is an extremely popular system that developers use to keep track of the code they write. The main thing it does is make it so that two developers can work on the same file, track their individual changes and then combine their work, as you might do in Microsoft Word. Since all programs are just collections of lots of files that are together known as a “repository”, this lets a number of developers work together without tramping on each others changes.</p>
<p>There are a million ways to use Git but lately a lot of people use Git through a website called <a href="https://github.com/">Github</a>. Github makes it super-easy to use Git, but you still need to understand a few steps that are necessary to make changes. The basic steps we’ll take are:</p>
<ol>
<li>You: Find the file</li>
<li>You: Change the file and save your changes</li>
<li>You: Create a pull request</li>
<li>The manager (me or somebody else): Merges the pull request, making your changes live</li>
</ol>
<p>For the purpose of this article, I’ve created a new repository as a playground where you can try this out. </p>
<p>The playground is here: <a href="https://github.com/mlissner/git-tutorial/tree/master">https://github.com/mlissner/git-tutorial/</a></p>
<p>Go check out the playground and create a Github account, then come back here and continue to the next step, changing a file. </p>
<h2 id="make-your-change">Make your change</h2>
<p>Like the rest of this, the process of making a change is actually pretty easy. All you have to do is find the file, make your change, and then save it. So:</p>
<h3 id="find-the-file">Find the file</h3>
<p>When you look at <a href="https://github.com/mlissner/git-tutorial/tree/master">the playground</a>, you’ll see a bunch of files like this:</p>
<p><img alt="File List" src="https://michaeljaylissner.com/images/github/file-list.png"/></p>
<p>Click the file you want to edit. In this case, it’s we’ll actually be changing file called “your-name.txt”. Click it.</p>
<p>Once you do that, you’ll see the contents of the file — a list of names, mine at the top — and you’ll see a pencil that lets you edit the file. </p>
<p>Click the pencil! </p>
<h3 id="change-the-file">Change the file</h3>
<p>At this point you’ll see a message saying something like: </p>
<blockquote>
<p>You are editing a file in a project you do not have write access to. We are forking this project for you (if one does not yet exist) to write your proposed changes to. Submitting a change to this file will write it to a new branch in your fork so you can send a pull request. </p>
</blockquote>
<p>Groovy. If you ignore both the jargon and the bad grammar, you can go ahead and add your name to the bottom of the file, and then you’ll see two fields at the bottom that you can use to explain your change:</p>
<p><img alt="Explain Thyself" src="https://michaeljaylissner.com/images/github/explain-thyself.png"/></p>
<p>This is like an email. The first field is the subject of your change, something brief and to the point. The second field lets you flesh out in more detail what you did, why it’s useful, etc. In many cases — like simply adding your name to this file — your changes are obvious and you can just hit the big green “Propose file change” button.</p>
<p>Let’s press the big green button, shall we? </p>
<h3 id="send-a-pull-request">Send a “pull request”</h3>
<p>At this point you’ll see another form with another somewhat cryptic message:</p>
<blockquote>
<p>The change you just made was written to a new branch in your fork of this project named patch-1. If you’d like the author of the original project to merge these changes, submit a pull request.</p>
</blockquote>
<p>I think the important part of that message is the second sentence:</p>
<blockquote>
<p>If you’d like the author of the original project to merge these changes, submit a pull request.</p>
</blockquote>
<p>Ok, so how do you do that? Well, it turns out that the page we’re looking at is very similar to the one we were just on. It has two fields, one for a subject and one for a comment. You can fill these out, but if it’s a simple change you don’t need to, and anyway, if you put stuff on the last page it’ll just be copied here already.</p>
<p>So: Press the big green button that says “Create pull request”. </p>
<p>You’re now done, but what did you do, exactly? </p>
<h3 id="lets-parse-whats-happened-so-far">Let’s parse what’s happened so far</h3>
<p>At this point, you’ve found a file, changed it, and submitted a pull request. Along the way, the system told you that it was “forking this project for you” and that your changes were, “written to a new branch in your fork of this project”. </p>
<p>Um, what? </p>
<p>The most amazing thing that Git does is allow many developers to work on the same file at the same time. It does this by creating what it calls forks and branches. For our purposes these are basically the same thing. The idea behind both is that every so often people working on a file save a copy of the entire repository into what’s called a commit. A commit is a copy of the code that is saved forever so anybody can travel back in time and see the code from two weeks ago or a month ago or whatever. 95% of any Git repository is just a bunch of these copies, and you actually created one when you saved your changes to the file. </p>
<p>This is super useful on its own, but when somebody forks or branches the repository, what they do is say, “I want a perfect copy of all the old stuff, but from here on, I’m going my own way whenever I save things.” Over time, everybody working in the repository does this, creating their own work in their own branches, and amazingly, one person’s work doesn’t interfere with another’s. </p>
<p>Later, once somebody thinks that their work is good enough to share with everybody, they create what’s called a “Pull Request”, just like you did a moment ago, and the owner of the repository — in this case, me — gets an email asking him or her to “pull” the code into the main repository and “merge” the changes into the files that are there. Once this is done, everybody gets those changes from then on. </p>
<p>It’s a brilliant system. </p>
<h3 id="my-turn-merging-the-pull-request">My turn: Merging the pull request</h3>
<p>When you created that pull request a moment ago, you actually sent me an email and now you have to wait for me to do something. Eventually, I’ll get your email, and when I do I’ll go to Github and see a screen like this:</p>
<p><img alt="PR Screen" src="https://michaeljaylissner.com/images/github/pr-screen.png"/></p>
<p>I’ll probably make a comment saying thank you, and then <em>I’ll</em> press the Big Green Button that says, “Merge pull request”.</p>
<p>This will merge your changes into mine and we’ll both go about our merry way. Mission accomplished! </p>
<h2 id="why-this-works-so-well">Why this works so well</h2>
<p>This system is pretty amazing and it works very well for tiny little projects and massive ones alike (for example, <a href="https://github.com/torvalds/linux/network">some projects have thousands of active forks</a>). What’s great about this system is that it allows anybody to do whatever they want in their fork without requiring any permission from the owner of the code. Anybody can do whatever they want in their fork and I’m happy to see them experimenting. That work will never affect me until they issue a pull request and I merge it in, accepting their proposed changes.</p>
<p>This process mirrors a lot of real world processes between writers and editors, but solidifies and equalizes it so that there’s a <em>right</em> way to do things and so that nobody can cause any trouble. The process itself can be a little overwhelming at first, with lots of jargon and steps, but once you get it down, it’s smooth and quick and works very well. </p>
<p>As you might expect, there are tons of resources about this on the Web. Some really good ones <a href="https://guides.github.com/introduction/flow/">are at Github</a> and there are even <a href="http://git-scm.com/book">entire online books</a> going into these topics. Like all things, you can go as deep as you want, but the above should give you some good basics to get you started. </p>
<h2 id="some-definitions">Some Definitions</h2>
<ol>
<li>
<p><strong>Open vs Closed Source</strong>: This is a topic entire theses and books have been written about, but in general open source is way of creating a program where a developer shares all of their code so anybody can see it. In general when a program is open source, people are welcome to edit the code, help file and fix bugs, etc. On the other hand, closed source development is a way of creating a program so that only the developers can see the code, and the public at large is generally not welcome to contribute, except to sometimes email the developer with comments. </p>
<p>In a way, the product of open source development is a combination of the code itself plus the program it creates, while in closed source projects the product is the program alone. There are thousands of examples of each of these ways of developing software. For example, <a href="https://source.android.com/">Android</a> and the <a href="https://github.com/torvalds/linux/">Linux Kernel</a> are open source, while Microsoft Word and iPhones are not. (See how I couldn’t link to the latter two?)</p>
</li>
<li>
<p><strong>Repository</strong>: A collection of files, images, and other stuff that are kept together for a common purpose. Generally it’s a bunch of files that create a website or program, but some people use repositories for all kinds of things, like dealing with <a href="https://github.com/mlissner/identity-theft">identity theft</a> (shameless plug), <a href="https://github.com/mlissner/michaeljaylissner.com/edit/master/content/editing-on-github-a-non-technical-explainer.md">holding the contents of this very webpage</a> (shameless plug), or even <a href="https://github.com/vzvenyach/codingforlawyers/">writing online books teaching lawyers to code</a> (<em>not</em> a shameless plug!).</p>
</li>
<li>
<p><strong>Pull request</strong>: A polite way to say, “This code is ready to get included in the main repository. Please pull it in.”</p>
</li>
<li>
<p><strong>Merging</strong>: The process of taking a branch or fork and merging the changes in it into another branch or fork. This combines two people’s work into a single place. </p>
</li>
</ol>Updating Bulk Data in CourtListener2014-11-06T00:00:00-08:00Mike Lissnertag:michaeljaylissner.com,2014-09-28:posts/2014/09/28/updating-bulk-data-in-courtlistener/
<p><strong>Update</strong>: I’ve written <a href="https://michaeljaylissner.com/posts/2014/11/06/updating-bulk-data-in-courtlistener-more/">another post</a> about how the solution presented here wasn’t fast enough and didn’t work out. You may want to read it as well.</p>
<p>There’s an increasing demand for bulk data from government systems, and while this will generate big wins for transparency, accountability, and innovation (at the occasional cost of privacy<sup id="fnref:privacy"><a class="footnote-ref" href="#fn:privacy" rel="footnote">1</a></sup>), it’s important to consider a handful of technical difficulties that <em>can</em> come along with creating and providing such data. Do <em>not</em> misread this post as me saying, “bulk data is hard, don’t bother doing it.” Rather, like most of my posts, read this as an in-the-trenches account of issues we’ve encountered and solutions we’ve developed at CourtListener. </p>
<h2 id="the-past-and-present">The Past and Present</h2>
<p>For the past several years we’ve had <a href="https://www.courtlistener.com/api/bulk-info/">bulk data at CourtListener</a>, but to be frank, it’s been pretty terrible in a lot of ways. Probably the biggest issue with it was that we created it as a single massive <span class="caps">XML</span> file (~<span class="caps">13GB</span>, compressed!). That made a lot of sense for our backend processing, but people consuming the bulk data complained that it crashed 32 bit systems<sup id="fnref:sympathy"><a class="footnote-ref" href="#fn:sympathy" rel="footnote">2</a></sup>, consumed memory endlessly, decompressing it wasn’t possible on Windows<sup id="fnref:sympathy"><a class="footnote-ref" href="#fn:sympathy" rel="footnote">2</a></sup>, etc. </p>
<p>On top of these issues for people consuming our bulk data, and even though we set it up to be efficient for our servers, we did a stupid thing when we set it up and made it so our users could generate bulk files whenever they wanted for any day, month, year or jurisdiction. And create bulk files they did. Indeed in the year since we started keeping tabs on this, people made nearly fifty thousand requests for time-based bulk data<sup id="fnref:stats"><a class="footnote-ref" href="#fn:stats" rel="footnote">3</a></sup>. </p>
<p>On the backend, the way this worked was that the first time somebody wanted a bulk file, they requested it, we generated it, and then we served it. The second time somebody requested that same file, we just served the one we generated before, creating a disk-based cache of sorts. This actually worked pretty well but it let people start long-running processes on our server that could degrade the performance of the front end. It wasn’t great, but it was a simple way to serve time- and jurisdiction-based files.<sup id="fnref:file-count"><a class="footnote-ref" href="#fn:file-count" rel="footnote">4</a></sup> </p>
<p>As any seasoned developer knows, the next problem with such a system would be cache invalidation. How would we know that a cached bulk file had bad data and how would we delete it if necessary? Turns out this wasn’t so hard, but every time we changed (or deleted) an item in our database we had code that went out to the cache on disk and deleted any bulk files that might contain stale data. Our data doesn’t change often, so for the most part this worked, but it’s the kind of spaghetti code you want to avoid. Touching disk whenever an item is updated? Not so good. </p>
<p>And there were bugs. <a href="https://github.com/freelawproject/courtlistener/issues/278">Weird ones</a>.</p>
<p>Yeah, the old system kind of sucked. The last few days I’ve been busy re-working our bulk data system to make it more reliable, easier to use and just overall, better.</p>
<h2 id="the-new-system">The New System</h2>
<p>Let’s get the bad news taken care of off the bat: The new system no longer allows date-based bulk files. Since these could cause performance issues on the front end, and since <a href="http://lists.freelawproject.org/pipermail/dev/2014-August/000069.html">nobody opposed the change</a>, we’ve done away with this feature. It had a good life, may it <span class="caps">RIP</span>.</p>
<p>The good news is that by getting rid of the date-based bulk files, we’ve been able to eliminate a metric <em>ton</em> of complexity, <a href="http://theweek.com/article/index/241002/how-the-wrong-definition-of-literally-snuck-into-the-dictionary">literally</a>! No longer do we need the disk-cache. No longer do we need to parse URLs and generate bulk data on the fly. No longer is the code a mess of decision trees based on cache state and user requests. Ah, it feels so free at last! </p>
<p>And it gets even better. On top of this, we were able to resolve <a href="https://github.com/freelawproject/courtlistener/issues/285">a long-standing feature request</a> for complete bulk data files by jurisdiction. We were able to make the schema of the bulk files match that of <a href="https://www.courtlistener.com/api/rest-info/">our <span class="caps">REST</span> <span class="caps">API</span></a>. We were able to make the bulk file a tar of smaller <span class="caps">JSON</span> files, so no more issues unzipping massive files or having 32 bit systems crash. <a href="https://www.youtube.com/watch?v=8vZx7yF_a7M">We settled all the family business</a>.</p>
<p>Oh, and one more thing: When this goes live, we’ll have bulk files and an <span class="caps">API</span> for oral arguments as well — Another CourtListener first. </p>
<h2 id="jeez-thats-great-whyd-you-wait-so-long">Jeez, That’s Great, Why’d You Wait So Long?</h2>
<p>This is a fair question. If it was possible to gain so much so quickly, why didn’t we do it sooner? Well, there are a number of reasons, but at the core, like so many things, it’s because nothing is actually that easy. </p>
<p>Before we could make these improvements, we needed to: </p>
<ul>
<li>Make sure the impact on our users <a href="http://lists.freelawproject.org/pipermail/dev/2014-August/000069.html">wouldn’t be an issue</a></li>
<li>Test the performance of generating more than 350 bulk files at the end of each month<sup id="fnref:dev-aside"><a class="footnote-ref" href="#fn:dev-aside" rel="footnote">5</a></sup></li>
<li>Have <a href="https://www.courtlistener.com/api/rest-info/">our <span class="caps">REST</span> <span class="caps">API</span></a> in place so we could use it to generate the bulk files</li>
<li>Complete <a href="https://github.com/freelawproject/courtlistener/commit/a0e4326d98e9f501ec3e69955d6b5650471686e8#diff-30d04f22c69dda9704be56ec95d9d2c1R68">performance profiling</a> to identify <a href="https://github.com/freelawproject/courtlistener/commit/a0e4326d98e9f501ec3e69955d6b5650471686e8#diff-6f850cf75fe2e1d17284e0b701b26b06L47">hot spots</a> in the new bulk data <span class="caps">API</span></li>
<li><a href="https://github.com/freelawproject/courtlistener/commit/52e8eff985fdf75612837cef4d9ef55ad60f29ad#diff-6">Rewrite the documentation</a></li>
</ul>
<p>And pretty much everything else you can imagine. So, I suppose the answer is: We waited so long because it was hard. </p>
<p>But being hard is one thing. Another thing is that although a number of organizations have used our bulk data, never has any contributed either energy or resources to fixing the bugs that they reported. Despite the benefits these organizations got from the bulk files, none chose to support the ecosystem from which they benefited. You can imagine how this isn’t particularly motivational for us, but we’re hopeful that with the new and improved system, those using our data will appreciate the quality of the bulk data and consider <a href="https://www.courtlistener.com/donate/">supporting us</a> down the road. </p>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>So, without sucking on too many sour grapes, that’s the story behind the upgrades we’re making to the bulk files at CourtListener. At first blush it may seem like a fairly straightforward feature to get in place (and remember, in <em>many</em> cases bulk data is stupid-easy to do), but we thought it would be interesting to share our experiences so others might compare notes. If you’re a consumer of CourtListener bulk data, we’ll be taking the wraps off of these new features soon, so make sure to watch the <a href="https://free.law">Free Law Project blog</a>. If you’re a developer that’s interested in this kind of thing, we’re eager to hear your feedback and any thoughts you might have. </p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:privacy">
<p>For example, a few days ago some folks got access to <span class="caps">NYC</span> taxi information in bulk. In theory it was anonymized using <span class="caps">MD5</span> hashing, but because there were a limited number of inputs into the hashing algorithm, all it took to de-anonymize the data was to compute every possible hash (“<a href="https://medium.com/@vijayp/of-taxis-and-rainbows-f6bc289679a1">computing the 22M hashes took less than 2 minutes</a>“) and then work backwards from there to the original IDs. While one researcher did that, another one began finding images of celebrities in taxis and figuring out where they went. Privacy is hard. <a class="footnote-backref" href="#fnref:privacy" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:sympathy">
<p>I confess I’m not <em>that</em> sympathetic… <a class="footnote-backref" href="#fnref:sympathy" rev="footnote" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:stats">
<p>To be exact: 48271 requests, as gathered by our stats module. <a class="footnote-backref" href="#fnref:stats" rev="footnote" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:file-count">
<p>So far, 17866 files were created this way that haven’t been invalidated, as counted by: </p>
<div class="highlight"><pre><span class="n">find</span> <span class="o">-</span><span class="n">maxdepth</span> <span class="mi">1</span> <span class="o">-</span><span class="n">type</span> <span class="n">d</span> <span class="o">|</span> <span class="k">while</span> <span class="n">read</span> <span class="o">-</span><span class="n">r</span> <span class="n">dir</span><span class="p">;</span> <span class="k">do</span> <span class="n">printf</span> <span class="s">"%s:</span><span class="se">\t</span><span class="s">"</span> <span class="s">"$dir"</span><span class="p">;</span> <span class="n">find</span> <span class="s">"$dir"</span> <span class="o">-</span><span class="n">type</span> <span class="n">f</span> <span class="o">|</span> <span class="n">wc</span> <span class="o">-</span><span class="n">l</span><span class="p">;</span> <span class="n">done</span>
</pre></div>
<p><a class="footnote-backref" href="#fnref:file-count" rev="footnote" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:dev-aside">
<p>Commence a fun digression for the developers. As you might expect, aside from compressing bulk files, the bottleneck of generating 350+ bulk files at once is pulling items from the database and converting them to <span class="caps">JSON</span>. We tried a few solutions to this problem, but the best we came up with takes advantage of the fact that every item in the database belongs in exactly two bulk files: The all.tar.gz file and the {jurisdiction}.tar.gz file. One way to put the item into both places would be to generate the all.tar.gz file and then generate each of the 350 smaller files. </p>
<p>That would iterate every item in the database twice, but while making the jurisdiction files you’d have to do a lot of database filtering…something that it’s generally good to avoid. Our solution to this problem is to create a dictionary of open file handles and then to iterate the entire database once. For each item in the database, add it to both the all.tar.gz file and add it to the {jurisdiction}.tar.gz file. Once complete, close all the file handles. For example:</p>
<div class="highlight"><pre><span class="c"># Get all the courts</span>
<span class="n">courts</span> <span class="o">=</span> <span class="n">Court</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="c"># Create a dictionary with one key per jurisdiction</span>
<span class="n">tar_files</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">court</span> <span class="ow">in</span> <span class="n">courts</span><span class="p">:</span>
<span class="n">tar_files</span><span class="p">[</span><span class="n">court</span><span class="o">.</span><span class="n">pk</span><span class="p">]</span> <span class="o">=</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span>
<span class="s">'/tmp/bulk/opinions/</span><span class="si">%s</span><span class="s">.tar.gz'</span> <span class="o">%</span> <span class="n">court</span><span class="o">.</span><span class="n">pk</span><span class="p">,</span>
<span class="n">mode</span><span class="o">=</span><span class="s">'w:gz'</span><span class="p">,</span>
<span class="n">compresslevel</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Then iterate over everything, adding it to the correct key</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">item_list</span><span class="p">:</span>
<span class="c"># Add the json str to the two tarballs</span>
<span class="n">tarinfo</span> <span class="o">=</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarInfo</span><span class="p">(</span><span class="s">"</span><span class="si">%s</span><span class="s">.json"</span> <span class="o">%</span> <span class="n">item</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
<span class="n">tar_files</span><span class="p">[</span><span class="n">item</span><span class="o">.</span><span class="n">docket</span><span class="o">.</span><span class="n">court_id</span><span class="p">]</span><span class="o">.</span><span class="n">addfile</span><span class="p">(</span>
<span class="n">tarinfo</span><span class="p">,</span> <span class="n">StringIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">(</span><span class="n">json_str</span><span class="p">))</span>
<span class="n">tar_files</span><span class="p">[</span><span class="s">'all'</span><span class="p">]</span><span class="o">.</span><span class="n">addfile</span><span class="p">(</span>
<span class="n">tarinfo</span><span class="p">,</span> <span class="n">StringIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">(</span><span class="n">json_str</span><span class="p">))</span>
</pre></div>
<p>In a sense the first part creates a variable for every jurisdiction on the fly and the second part uses that variable as a dumping point for each item as it iterates over them. </p>
<p>A fine hack. <a class="footnote-backref" href="#fnref:dev-aside" rev="footnote" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
</ol>
</div>New Version of the Site is Now Live2014-08-27T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2014-08-27:posts/2014/08/27/site-v5-is-go/
<p>I have big news today for the small world of people who read my blog regularly:
A new version of the site is now live and the old version shall die a quick death. </p>
<p>Version 4 was pretty nice though, while it lasted:</p>
<p><img alt="Site v4" src="https://michaeljaylissner.com/images/oldsite/v4.png"/></p>
<p><em>Other old versions of the site <a href="https://michaeljaylissner.com/about">still available</a>!</em></p>
<h2 id="the-improvements">The improvements</h2>
<p>This new version comes with some big improvements that I’m quite
pleased with:</p>
<ol>
<li>If you find typos in a blog post, you can edit them on Github and I can
easily integrate your changes. Check out the link on the right to
edit the typos in this very page. (I’ve left a few conspicuous ones as a
treasure hunt for the reader!)</li>
<li>The site is now <em>much</em> faster and can handle immense traffic without a
hitch, thanks to being hosted by <a href="https://pages.github.com/">Github Pages</a>. The previous version would
have occasional hiccups during times of high traffic – something that’s
really quite untenable.</li>
<li>Comments are now moved to <a href="https://disqus.com">Disqus</a>, though unfortunately old comments have
not made the jump to the new version of the blog. Comments are collapsed by
default so the scrollbar actually represents the length of a
highly-commented post.</li>
<li>The site now looks bad-ass. Regardless of whether you’re on a phone, tablet
computer, or what-have-you, it’s going to look good.</li>
<li>All content has been categorized as well as tagged, as you can see in the
sidebar. There are Atom feeds for each.</li>
<li>The homepage has a new design that focuses on my projects and bio, and then
has recent posts below that.</li>
<li>Long articles like this one get an automatic table of contents on the left.</li>
<li>The site is now optimized for speed dial in Opera and to be made into apps
on mobile phones and tablets. For example, if you’re reading this on
Android Chrome, you can simply click “Add to homescreen” in the <code>⋮</code>
thing and you’ll be all set.</li>
<li>Security is now invincible: No more webserver to update, no more database,
no more outdated Drupal. It’s basically impossible to hack the new site.
I’ve also added my <a href="https://michaeljaylissner.com/archive/mike.gpg"><span class="caps">PGP</span> key</a> to the <a href="https://michaeljaylissner.com/contact">contact page</a>, for those interested. </li>
<li>The entire site is now static and doesn’t require that I pay for or maintain
a server or database. Bonus!</li>
</ol>
<p>So those are the high-level changes you can see as of now. If you’re interested
in the technical nitty-gritty, read on.</p>
<h2 id="the-tech">The Tech</h2>
<p>The original motivation to rebuild the site came when the old version kept
overwhelming the server that was running it and requiring that I step in to
make it work again. And if that weren’t annoying enough, I have been paying
for that server for the past several years, which just seems a bit silly for
a simple blog like this one. </p>
<p>The solution? A so-called <a href="http://staticsitegenerators.net/">Static Site Generator</a> or <span class="caps">SSG</span>. With one of these,
the paradigm for your site totally changes. Instead of having a dynamic site
that loads every time somebody visits the page or makes a comment, you
generate the <em>entire</em> website on your laptop (this takes about 30 seconds),
creating static <span class="caps">HTML</span>, and then push that to some cloud provider of choice (in
my case, I use Github pages for this because it’s free and easy).</p>
<p>There are about 300 SSGs right now and the one I eventually landed on was
<a href="https://github.com/getpelican/pelican/">Pelican</a> due to it being written in a language I knew (Python), and due to
it having lots of good themes and plugins. I briefly tried to make a switch to
<a href="http://hugo.spf13.com/">Hugo</a> instead because it’s written in Go and is much faster at generating
content, but the documentation for Hugo isn’t very good yet, and <a href="https://github.com/spf13/hugo/issues/96">it
doesn’t support basic pagination</a>, which is something of a showstopper. </p>
<h3 id="switching-to-a-ssg-from-drupal">Switching to a <span class="caps">SSG</span> from Drupal</h3>
<p>Switching from Drupal was pretty awful and took a <em>lot</em> of effort —
<em>days</em> of it! The goal was to get all of my posts exported from Drupal,
convert them all to markdown, and to get them all live on Github pages. Let’s
go through this process together. </p>
<h3 id="exporting-from-drupal">Exporting from Drupal</h3>
<p>This step of the puzzle was, shall we say, a pain. Nobody has yet made a
Drupal to Pelican converter, so I had to do it myself. <a href="https://michaeljaylissner.com/scripts/drupal_to_hugo.py">The script</a> that I
wrote dug directly into Drupal’s database, pulled out the contents
and converted them to a format that Hugo could understand. At the time I
thought Hugo would be the <span class="caps">SSG</span> for me, but later I switched to Pelican, and had
to write <a href="https://michaeljaylissner.com/scripts/convert_from_hugo_to_pelican.py">another script</a> to make the conversion from Hugo to Pelican.</p>
<h3 id="problems-with-drupal">Problems with Drupal</h3>
<p>This was a good start, but Drupal has a few funny conventions. One is that it
allows files to be “attached” to blog posts. Most blogs don’t do this (Pelican
and Hugo included), so I had to go through all of the items that I attached to
Drupal posts and convert them to inline links instead. This took a while.</p>
<p>Another problem I ran into is that the posts themselves were written directly
in <span class="caps">HTML</span>, which makes them kind of awful, and not very portable between blog
engines. Content for Hugo or Pelican should be written in Markdown, so I began
making this conversion to the <a href="/archives.html">200+ posts</a> on the site. In general, the process
for this was to find a post and begin cleaning it up. If I encountered
something that a computer could reliably fix across all the posts (for example,
<code><i></code> can be converted to <code>*</code> and <code><strong></code> to <code>**</code>), I wrote a little script
to do so. In the end, this took a lot of time, but I now have a collection of
a few hundred nicely-formed markdown files that power the blog.</p>
<h3 id="moving-to-github-pages">Moving to Github Pages</h3>
<p>With all of the content converted properly, the remaining step was to get the
project live on Github. I found this process confusing, but the process is
basically this:</p>
<ol>
<li>
<p>You need to take the output file from Pelican and put it into a Git
branch called <code>gh-pages</code>. To do this with Pelican is remarkably easy, as there is
a simple command you can run: <code>make github</code>. Run that, and you’ll be all set,
with the content pushed and everything.</p>
</li>
<li>
<p>You need <a href="https://github.com/mlissner/michaeljaylissner.com/blob/gh-pages/CNAME">a file named <span class="caps">CNAME</span></a> that simply contains the domain of your
website. This is easy in theory — it’s just a plaintext file — but in
practice it is difficult because you need the file to be created by the
<code>make github</code> command mentioned above. To do that add the <span class="caps">CNAME</span> file to a
directory at <code>content/extra/CNAME</code> and then add the following to your pelican
configuration file:</p>
<div class="highlight"><pre><span class="n">EXTRA_PATH_METADATA</span> <span class="o">=</span> <span class="p">{</span><span class="s">'extra/CNAME'</span><span class="p">:</span> <span class="p">{</span><span class="s">'path'</span><span class="p">:</span> <span class="s">'CNAME'</span><span class="p">},</span> <span class="p">}</span>
<span class="n">STATIC_PATHS</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">'extra/CNAME'</span><span class="p">)</span>
</pre></div>
<p>Do that, and the file will get copied over whenever you run <code>make github</code>.</p>
<p>If you’ve done this correctly, you’ll see evidence of such in the
repository’s settings page on Github, where it will tell you the domain
in the <span class="caps">CNAME</span>.</p>
</li>
<li>
<p>You need to configure your <span class="caps">DNS</span> provider to point your domain to Github.
This varies by provider, but I can tell you that your final version should
look something like this:</p>
<div class="highlight"><pre><span class="err">↪</span> <span class="n">dig</span> <span class="n">www</span><span class="p">.</span><span class="n">michaeljaylissner</span><span class="p">.</span><span class="n">com</span> <span class="o">+</span><span class="n">nostats</span> <span class="o">+</span><span class="n">nocomments</span> <span class="o">+</span><span class="n">nocmd</span>
<span class="p">;</span> <span class="o"><<>></span> <span class="n">DiG</span> <span class="mf">9.9.5</span><span class="o">-</span><span class="mi">3</span><span class="o">-</span><span class="n">Ubuntu</span> <span class="o"><<>></span> <span class="n">www</span><span class="p">.</span><span class="n">michaeljaylissner</span><span class="p">.</span><span class="n">com</span> <span class="o">+</span><span class="n">nostats</span> <span class="o">+</span><span class="n">nocomments</span> <span class="o">+</span><span class="n">nocmd</span>
<span class="p">;;</span> <span class="n">global</span> <span class="n">options</span><span class="o">:</span> <span class="o">+</span><span class="n">cmd</span>
<span class="p">;</span><span class="n">www</span><span class="p">.</span><span class="n">michaeljaylissner</span><span class="p">.</span><span class="n">com</span><span class="p">.</span> <span class="n">IN</span> <span class="n">A</span>
<span class="n">www</span><span class="p">.</span><span class="n">michaeljaylissner</span><span class="p">.</span><span class="n">com</span><span class="p">.</span> <span class="mi">3600</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">mlissner</span><span class="p">.</span><span class="n">github</span><span class="p">.</span><span class="n">io</span><span class="p">.</span>
<span class="n">mlissner</span><span class="p">.</span><span class="n">github</span><span class="p">.</span><span class="n">io</span><span class="p">.</span> <span class="mi">3600</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">github</span><span class="p">.</span><span class="n">map</span><span class="p">.</span><span class="n">fastly</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
<span class="n">github</span><span class="p">.</span><span class="n">map</span><span class="p">.</span><span class="n">fastly</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="mi">2</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">199.27.79.133</span>
<span class="n">fastly</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="mi">66087</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns4</span><span class="p">.</span><span class="n">p04</span><span class="p">.</span><span class="n">dynect</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
<span class="n">fastly</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="mi">66087</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns3</span><span class="p">.</span><span class="n">p04</span><span class="p">.</span><span class="n">dynect</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
<span class="n">fastly</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="mi">66087</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns2</span><span class="p">.</span><span class="n">p04</span><span class="p">.</span><span class="n">dynect</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
<span class="n">fastly</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="mi">66087</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns1</span><span class="p">.</span><span class="n">p04</span><span class="p">.</span><span class="n">dynect</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
</pre></div>
</li>
</ol>
<h2 id="final-words">Final Words</h2>
<p>This is been a much larger undertaking than I expected, with tons of corner
cases that I wanted to fix before releasing a new version of the site. In the
end though, this has been a good investment that I can expect to keep the site
going for the next five to ten years.</p>
<p>I hope you enjoy the new look and new features.</p>Reworking the CourtListener Datamodel2014-06-18T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2014-06-18:posts/2014/06/18/reworking-the-courtlistener-datamodel/<p>Brian and I have been hard at work the past week figuring out how to make
<a href="https://www.courtlistener.com/">CourtListener</a> able to understand more that one document type. Our goal
right now is to make it possible to add:</p>
<ul>
<li>oral arguments and other audio content,</li>
<li>video content if it’s available,</li>
<li>content from <a href="https://free.law/recap/"><span class="caps">RECAP</span></a>, and</li>
<li>thousands of ninth circuit briefs that Resource.org <a href="https://law.resource.org/pub/us/case/ca9/">has recently scanned</a></li>
</ul>
<p>The problem with our current database is that it’s not organized in a way
that supports linkages between content. So, if we have the oral argument
and the opinion from a single case, we have no way of pointing them at each
other. Turns out this is a sticky problem. </p>
<p>The solution we’ve come up with is an architecture like the following:</p>
<p><img alt="New Schema" src="https://michaeljaylissner.com/images/new-schema-design-compact_0.png" /></p>
<p>(we also have <a href="http://owncloud.freelawproject.org/public.php?service=files&t=76ef76ec69488fb72b4d96dba4809339">a more detailed version</a> and <a href="http://owncloud.freelawproject.org/public.php?service=files&t=62510f0282b06948e8c3d3b1e4946ec0">an editable version</a>)</p>
<p>And eventually, this will also have a Case table above the docket that
allows multiple dockets to be associated with a single case. For now though,
that’s moot, as we don’t have anyway of figuring out which dockets go together. </p>
<p>The first stage of this will be to add support for oral arguments,
since they make a simple case to work with. Once that’s complete the next
stage will be either to add the <span class="caps">RECAP</span> documents or those from Resource.org. </p>
<h3 id="urls">URLs</h3>
<p>Since this is such a big change, we’re also taking this opportunity to
re-work our URLs. Currently, they look like this:</p>
<div class="highlight"><pre><span class="o">/</span><span class="err">$</span><span class="n">court</span><span class="o">/</span><span class="err">$</span><span class="n">alpha</span><span class="o">-</span><span class="n">numeric</span><span class="o">-</span><span class="n">id</span><span class="o">/</span><span class="k">case</span><span class="o">-</span><span class="n">name</span><span class="o">-</span><span class="n">of</span><span class="o">-</span><span class="n">the</span><span class="o">-</span><span class="k">case</span><span class="o">/</span>
</pre></div>
<p>For example:</p>
<div class="highlight"><pre><span class="nl">https:</span><span class="c1">//www.courtlistener.com/scotus/yjn/roe-v-wade/</span>
</pre></div>
<p>A few things bug me about that. First, it doesn’t tell you anything about
what kind of thing you can expect to see if you click that link. Second,
the alpha-numeric <span class="caps">ID</span> is kind of lame. It’s just a reference to the database
primary key for the item, and we should just show that value (in this case,
“yjn” means “108713”). To fix both of these issues, the new URLs will be:</p>
<div class="highlight"><pre><span class="o">/</span><span class="n">opinion</span><span class="o">/</span><span class="err">$</span><span class="n">numeric</span><span class="o">-</span><span class="n">id</span><span class="o">/</span><span class="k">case</span><span class="o">-</span><span class="n">name</span><span class="o">/</span>
</pre></div>
<p>So:</p>
<div class="highlight"><pre><span class="nl">https:</span><span class="c1">//www.courtlistener.com/opinion/108713/roe-v-wade/</span>
</pre></div>
<p>That should be easier to read and should tell you what type of item you’re
about to look at. Don’t worry, the old URLs will keep working just fine. </p>
<p>And the rest of the new URLs will be:</p>
<div class="highlight"><pre><span class="o">/</span><span class="n">oral</span><span class="o">-</span><span class="n">argument</span><span class="o">/</span><span class="err">$</span><span class="n">numeric</span><span class="o">-</span><span class="n">id</span><span class="o">/</span><span class="k">case</span><span class="o">-</span><span class="n">name</span><span class="o">/</span>
<span class="o">/</span><span class="n">docket</span><span class="o">/</span><span class="err">$</span><span class="n">numeric</span><span class="o">-</span><span class="n">id</span><span class="o">/</span><span class="k">case</span><span class="o">-</span><span class="n">name</span><span class="o">/</span>
</pre></div>
<p>and eventually:</p>
<div class="highlight"><pre><span class="o">/</span><span class="n">recap</span><span class="o">/</span><span class="err">$</span><span class="n">numeric</span><span class="o">-</span><span class="n">id</span><span class="o">/</span><span class="k">case</span><span class="o">-</span><span class="n">name</span><span class="o">/</span>
</pre></div>
<h3 id="api"><span class="caps">API</span></h3>
<p>We expect these changes to come with changes to the <span class="caps">API</span>,
so we’ll likely be releasing <span class="caps">API</span> version 1.1 that will add support for
dockets and oral arguments. </p>
<p>The current version 1.0 should keep working just fine,
since we’re not changing any of the underlying data,
but I expect that it will have some changes to the URLs and things like
that. I’ll be posting more about this in the CourtListener dev list.
as the changes become more clear and as we sort out what a fair policy is
for the deprecation of old APIs. </p>Our New Zealand Blog2013-11-27T10:19:46-08:00Mike Lissnertag:michaeljaylissner.com,2013-11-27:posts/2013/11/27/our-new-zealand-blog/<p>If you seek our blog about our journey on the Te Araroa trail, it lies down
<a href="http://trampnewzealand.wordpress.com/">this path</a>.</p>Snow Mountain Distance Map2013-08-27T10:48:25-07:00Mike Lissnertag:michaeljaylissner.com,2013-08-27:posts/2013/08/27/snow-mountain-distance-map/<p>I put on my cartographer’s hat today and made a distance map
(<a href="https://michaeljaylissner.com/archive/distance-map.png">png</a>/<a href="https://michaeljaylissner.com/archive/distance-map.svg">svg</a>) for Snow Mountain. The regular map for this area doesn’t
have any distance markers
on it, so these are based on talking with the ranger in the park. He seemed
knowledgeable, so these numbers are probably the best we’ll get for a while.</p>
<p><img alt="map" src="https://michaeljaylissner.com/archive/distance-map.png" /></p>
<p>If somebody discovers that the rangers in Snow Mountain finally have firm
distances, let me know what they are, and I’ll happily update this map.
Until then, attached is the map as both an <span class="caps">SVG</span> and a png. Enjoy.</p>Best Energy Pack for Ultra-light, Long-Distance Backpacking2013-07-19T14:13:25-07:00Mike Lissnertag:michaeljaylissner.com,2013-07-19:posts/2013/07/19/battery-packs-for-ultralight-long-distance-backpacking/<p>Obviously, the best ultalight battery pack is <strong>no</strong> battery pack,
but on our trip we’re going to be bringing a phone, a camera,
an <span class="caps">MP3</span> player and two headlamps. The phone doubles as our <span class="caps">GPS</span> and the
headlamps might be <span class="caps">USB</span> rechargeable. Having spare energy to get us through
longer sections is important.</p>
<p>I’ve completed <a href="https://michaeljaylissner.com/archive/battery-research.xlsx">some research</a>, investigating which are the best
options. As I
was reviewing the many battery pack and solar charger solutions that are
out there, I came to a few conclusions right off the bat:</p>
<ul>
<li>The models with turbines, like the <a href="http://www.shopetoncorp.com/detail/ETO+NBOTU2000+RED">Eton BoostTurbine2000</a> are crap. I
called Eton to ask them how many cranks it would take to charge a phone. The technical support guy’s response: “You’d be at it all day. These are meant for emergency use only.” So turbines are out.</li>
<li>The idea of using a solar panel is great, but doing so will suck. I
looked far and wide for an ultralight solar panel, but they’re all heavier than just getting a battery pack. The problem with solar panels is that they need to have their own battery packs, so you end up carrying the extra battery pack <strong>and</strong> the panel itself. If you’re out for really long trips, these are probably worth it, but for trips where you’ll be in and out of towns, there are lighter options.</li>
<li>There are a million wannabe battery pack manufacturers, like Timetec,
Powergen, Rokit and Unu. They’re strong on branding, but when you go to their
website — if they have one — you’ll find more marketing but not
much real innovation or information. For example, in my attached chart,
there are many blank spots and questions marks for these brands. </li>
</ul>
<p>Looking for battery packs for backpackers means finding one that’s light,
durable and efficient. There are a few features you probably want in particular: </p>
<ul>
<li>You want a battery pack that will charge your devices as quickly as they
support. Many battery packs, particularly the small ones,
only provide 1 amp of output from a single <span class="caps">USB</span> port. If you have a device
that can handle more (like a tablet), it’ll charge quite slowly. The
best ones have as much as 2.5A output, and will adapt to send the right
amount of power to your device.</li>
<li>You want a battery pack that charges quickly when you plug it into the
wall. You don’t want to get stuck in town overnight because of how slowly
your battery pack charges. </li>
<li>You want a battery pack that offers “pass through charging”. This allows
you to plug the battery into the wall, and plug your device into the
battery — simultaneously — allowing you to charge both at the same time. Most battery packs don’t offer this. </li>
<li>Finally, you want the most energy packed into the smallest, lightest device. </li>
</ul>
<p>When looking at all these features, there are three standout energy packs,
the <a href="http://www.myinnergie.com/productdetail.php?productid=237&languageid=1">Innergie PocketCell Duo</a>, the <a href="http://www.ianker.com/anker-astro-external-battery-backup-charger/product/79UN53V1-B8P56A">Anker Astro 5600</a> and
the <a href="http://usa.just-mobile.com/all/gum-doubleplus.html">Just Mobile Gum++</a>. </p>
<p>The Anker Astro ($30) is the lightest of the bunch, but it also is complex,
charges slowly when plugged in, and has a complex body. It has a
flashlight, for what that’s worth, and, at 4.2 ounces,
has an energy density of 1333 mAh/oz. It does not appear to have
passthrough functionality. </p>
<p>The Just Mobile Gum++ ($90) is a very simple, lightweight and durable
option. At 4.6 ounces, it’s still very light. It has a slightly lower
energy density from the Astro (1304 mAh/oz), but boasts an <span class="caps">ABS</span> shell,
the fastest charge rate when plugged in (2500 mA), and just generally looks
like a good, simple option.</p>
<p>Finally is the Innergie PocketCell Duo ($90). This is the most powerful of
the bunch, at 6800 mAh, has the highest energy density at 1456 mAh/oz) and
has two output ports (both at 2100 mA). Unfortunately, unlike the Gum++,
it only chargest at 1500 mA, so it will take longer to charge. </p>
<p>The PocketCell and Gum++ are both very new products,
and don’t have many reviews. The Anker has been around awhile and has
decent reviews, though some upset people that aren’t happy with their products. </p>
<p>Here’s my recommendation: If you need a battery pack that can charge two
devices at the same time, get the Innergie PocketCell Duo. If not,
get the Just Mobile Gum++. If you want to do your own analysis,
check out the attached spreadsheet and go wild.</p>
<p><strong>Update:</strong> Since Innergie does not mention whether their device supports
pass through, I’ve contacted them via their contact form and via Twitter.
After more than two months, they’ve been entirely non-responsive. There is
another person on their Twitter stream that is complaining (loudly) that
they never responded to a broken device complaint that he had. I can’t
recommend Innergie despite their slick device, great marketing,
etc. Something is going wrong with that company.</p>New Tool to Remove Dead Feeds from OPML Files2013-06-28T22:56:37-07:00Mike Lissnertag:michaeljaylissner.com,2013-06-28:posts/2013/06/28/trim-your-dead-feeds/<p>Since Google Reader’s closure is immenent, a lot of folks are looking for
solutions. One problem I’ve run into many times throughout the years is that
the feeds I have in Google Reader are largely dead, and there’s no way to get
rid of the ones that are no longer updated or simply gone. </p>
<p><a href="https://bitbucket.org/mlissner/trim-my-feeds/overview">So I built a tool.</a></p>
<p>Check it out on BitBucket and give it a whirl. It’ll go through an <span class="caps">OPML</span> file,
check all the feeds in it, and make a new file for you that has them cleaned
out. In my case, it purged about 20% of the feeds I had — a big improvement. </p>
<p>It’s a simple tool, but look, if your friend hasn’t updated their blog in
two years…they’re probably not going to. If the feed is gone, you no longer
need it cluttering your life. If a feed has been redirected, you should fix
that in your reader! Little things, right?</p>Desolation Wilderness2013-06-17T11:41:40-07:00Mike Lissnertag:michaeljaylissner.com,2013-06-17:posts/2013/06/17/desolation-wilderness/
<p>Z and I went to Desolation Wilderness this weekend in preparation for our thru hike of the Te Araroa trail in November. It was a great trip, and photos <a href="https://plus.google.com/102845149340395808422/posts/ceSu99xpXe3">are here</a>. If you need permission to see them, let me know.</p>
<h2 id="the-route">The route</h2>
<p>Our route brought us to Wrights Lake at about 10pm on Friday night. From there, we hiked up to Twin Lakes and found a spot by the south western edge. This was pretty lucky. Getting across the lake’s outlet at midnight when we got there was a pain, especially for me, since I lacked a flashlight. </p>
<p>On Saturday, we hiked halfway to Island Lakes, then south to a east-west ridge that forms one of the edge of Mt. Price. This ridge was stupidly dangerous, hoping from bounder to boulder with no safety net and a giant fall below. In wet or snowy conditions, it’d be impossible, but with some patience we were able to do it without too much trouble. Once traversed the ridge to the east, walking up the southern side of Mt. Price was a cake walk. </p>
<p>After spending some time at the top, where we observed some friendly (but skinny) marmots, we headed east towards Mosquito Pass. Getting down from the top was a hairy mess, with lots of rocky cliffs we had to very carefully pick our way down. Eventually, we made it off the cliffs and into the snow fields, which happily were soft enough to glissade down. We didn’t have ice axes, so if we couldn’t glissade, we would have had to wait for the sun to get higher and melt more snow. The snow here was full of medium-sized sun cups, which Z naturally (and quite properly, given her running shoes) slid around on and hated. I hated them too, but my shoes at least afforded me some traction on them. The snow went down almost to the top of the ridge between Clyd and Aloha lakes, but not quite, and once we got there, we clamored over the rocks for a while until arriving back on trail at Mosquito Pass. From here, we walked along Lake Aloha, to camp at the southern edge. Mozzies were pretty bad here, but bearable.</p>
<p>On Sunday, we woke up, hiked back over Mosquito Pass, and beyond it through a long valley, up and over Rockbound Pass. From there we hiked down, back into the Mosquito zone, and beyond to our the car.</p>
<h2 id="regrets">Regrets</h2>
<ul>
<li>I forgot to put new batteries in my flashlight, and the old ones were all but dead. </li>
<li>The deet that we brought was old and didn’t seem to work too well.</li>
<li>Z needs real shoes.</li>
<li>Ice axes would have been safer.</li>
</ul>
<h2 id="awesome-things">Awesome things</h2>
<ul>
<li>Lake Aloha is amazing but crowded.</li>
<li>The snow was just right, despite it being <span class="caps">WAY</span> too early for a trip to the High Sierras. </li>
<li>My legs again were abused: Scratches from the night hike with no flashlight, and sunburns from poor sunscreen application.</li>
<li>The itinerary pushed our muscles without injury (unlike last time).</li>
<li>Z is a natural backpacker and a great hiking partner.</li>
</ul>How to help end Boy Scouts of America’s ban on gays2013-04-19T10:18:05-07:00Mike Lissnertag:michaeljaylissner.com,2013-04-19:posts/2013/04/19/help-end-the-bsa-ban-on-gays/<p>On May 3rd, the Boy Scouts are considering lifting their ban on gays, and are putting a vote to the local and national councils. This means that it’s easy to influence the vote by calling in and expressing your opinion. It’s simple to do so, and more voices could change the direction of the Boy Scouts of America, allowing all boys to be included and accepted. </p>
<p>Here’s what to do:</p>
<ol>
<li><a href="http://www.scouting.org/LocalCouncilLocator.aspx">Find your local council</a></li>
<li>Give them a call or send them an email telling them your opinion.</li>
<li>Contact the national council via email: <a href="mailto:feedback@scouting.org">feedback@scouting.org</a>.</li>
</ol>
<p>Most important is to contact your local council. We need their phones to be ringing off the hook with people expressing their opinions. It truly takes no more than two minutes. Here’s the San Diego council: (619) 298-6121, and the East Bay council: (925) 674-6100.</p>
<p>If you prefer a form letter, you can <a href="https://secure3.convio.net/hrc/site/Advocacy?cmd=display&page=UserAction&id=1623&autologin=true&utm_term=link2&JServSessionIdr004=on4q7x9ly4.app304a">just do this one through the Human Rights Campaign</a> (34,000 people already have).</p>
<p>Here’s a simple transcript for you to follow:</p>
<blockquote>
<p>I’m [calling/wrriting] to express my desire that the Boy Scouts immediately lift their ban on gays. This ban is discriminatory, outdated and pointless. Scouting teaches many great lessons to thousands of adolescents across the <span class="caps">U.S.</span> One lesson that Scouting should not teach is that homosexuality is somehow wrong or means for discrimination. </p>
<p>On May 3rd, I hope that you will help the <span class="caps">BSA</span> finally makes the right decision so it can continue to lead boys into being mature and accepting men.</p>
</blockquote>
<p>Send this to the email above, and call your local council. This could make a difference.</p>So you wanna buy a bike2013-02-05T20:19:16-08:00Mike Lissnertag:michaeljaylissner.com,2013-02-05:posts/2013/02/05/so-you-wanna-buy-a-bike/
<p>Another of my friends is asking me questions about buying a bike. I love that
they do this, but since it’s become a trend, I figure I should throw my
thoughts together here as a reference. </p>
<p>Buying a bike is actually pretty simple:</p>
<ol>
<li>You want a used road bike.</li>
<li>You want gears; more is better.</li>
<li>Lighter is better.</li>
<li>Size is important. </li>
<li>Exotic isn’t for you (yet).</li>
</ol>
<p>That’s pretty much all there is to it, at least on the macro level. Let’s dive
into each of these a tad, shall we? </p>
<p>First, you want a used road bike. The reason for this is pretty logical: As a
commuter, you’ll be riding mostly on…roads! You could get a cruiser (but
that defies rule #2), or a mountain bike (defies rule #3) or a recumbent (see
rule #5). But ultimately, road bikes are the best for what you want to do:
travel quickly and safely to and from work and around town with minimal fuss.
New ones cost a fortune, so get one used.</p>
<p>I wish I didn’t have to mention rule number two, but for all the hipsters out
there, you’re wrong about fixies. If you live in San Francisco, a city with
<a href="http://www.sfbike.org/download/map.pdf">specific maps for the hills</a>, you should use the things that were invented
to get you up hills: Gears! Even if you live in a flat-ish city, you should get
gears because they give you flexibility. Sure, your bike is a commuter today,
but tomorrow your friend might want to go on a bike ride with you. Or maybe
you move to a new city. Who knows? Get gears. Don’t be trendy.</p>
<p>Enough said. </p>
<p>Rule number three is that lighter is better. If you look at new road bikes,
you’ll quickly learn that you can spend an incredible amount on bikes. And
naturally, the lighter they are, <a href="http://road-bikes.findthebest.com/l/607/2012-Specialized-S-Works-McLaren-Venge">the more expensive they are</a>. So how
light is right? Well, this one is tough and somewhat subjective, so I say,
find one that’s as light as you can buy for your dollar. Off the cuff, I’d
wager that around $400 is the point of diminishing returns for most people.</p>
<p>Size is important. If it doesn’t fit, it’s useless. Go to a bike shop and get
sized before you do much shopping. It’ll help you winnow the stuff you’re
looking at anyway. This may as well be the first step of your search.</p>
<p>Rule five explains itself. When you know more about bikes, branch out if you
care. You probably won’t, so save yourself the effort of looking at exotic
stuff. It’s exotic for a reason.</p>
<h1 id="bonus-questions-for-the-avid-reader">Bonus questions for the avid reader</h1>
<h2 id="what-brand-should-i-buy">What brand should I buy?</h2>
<p>Doesn’t much matter, surprisingly. There are better and worse brands, but if
you’re buying a used road bike, and follow rule number 3, your goals will be accomplished.</p>
<h2 id="what-material-should-my-bike-be">What material should my bike be?</h2>
<p>Probably steel. Aluminum is good too, but probably out of your price range.
Steel’s a very reputable material though. If you can find Reynold’s steel, all
the better.</p>
<h2 id="how-do-i-know-the-bike-im-buying-isnt-stolen">How do I know the bike I’m buying isn’t stolen?</h2>
<p>Good question! This one’s hard. You can <a href="https://www.utexas.edu/parking/transportation/biking/find_serial.html">look for the serial number</a> or try
to only deal with people that seem legit. There is a national bike registry
(which you should use!), but otherwise there’s not a whole lot you can do…yet.</p>
<p>Comments? Thoughts? Email me. You’re probably my friend already if you’re
reading this…</p>Enabling Two-Factor Authentication2013-02-02T14:27:15-08:00Mike Lissnertag:michaeljaylissner.com,2013-02-02:posts/2013/02/02/enabling-two-factor-authentication/<p>This post is as much Public Service Announcement as anything else. I didn’t realize that two-factor authentication had finally taken off. It’s practically vital for your email account (you’re asking for trouble without it), but in the past year or so, a bunch of other services have begun offering it. </p>
<p>Today I went on a little security binge, and found that I could turn on two-factor authentication at:</p>
<ul>
<li>Google/Gmail</li>
<li>Yahoo</li>
<li>Dropbox</li>
<li>Charles Schwab (they send you a fob for free)</li>
<li>Facebook</li>
<li>Paypal</li>
<li>Amazon Web Services</li>
</ul>
<p>One note about Charles Schwab is that getting their fob is great, but it’s hardly all you should do to secure your account. You should also set up what they call a “verbal password” that you have to provide whenever you call in. Without it, it’s pretty easy to get into an account via their surprisingly weak phone security.</p>
<p>Anyway, this is a pretty good list so far. The companies are using a handful of different techniques for doing this, but they all seem pretty solid in the end. Google’s, naturally, seems to be one of the most robust, but I’m impressed there’s so much offered.</p>
<p>Go set these up! </p>2013 Donations2013-01-04T18:12:03-08:00Mike Lissnertag:michaeljaylissner.com,2013-01-04:posts/2013/01/04/2013-donations/<p>Long-time friends will probably realize that with the coming of the new year comes a revisit to my annual donations. </p>
<p>This year’s donations are larger than any previous year, but largely fall along similar trends as in the past. The larger donations this year (about $1,000-worth) go towards non-profit organizations. The choices this year were hard. After consulting with a few friends, I decided to donate to two new categories: Environmental and Anti-Gun.</p>
<p>Finding a good environmental organization to give your money is <span class="caps">HARD</span>. After a few hours of research, I had looked at many organizations that were doing good work. But a lot of those organizations were still trying to prove the point that climate change is an issue, or were focused on small-scale issues. These are both noble goals, but I think what we need now are big solutions on an international level. I’m no expert in this topic, by far, but I’m fairly convinced that individual decision making isn’t going to solve the problem fast enough. It’s great if we all learn to recycle and to consider environmental impact in our daily lives. That, I don’t disagree with. But I don’t think it’s enough. I think we need to start forcing governments and organizations to be cleaner. I’m convinced that so long as the economic incentives are in place that have led to the current behaviors, the market will follow those incentives. I’m hopeful that my donation to the Center for Climate and Energy Solutions will help bring changes to these incentives.</p>
<p>Finding an anti-gun organization is easier, especially given the current state of affairs after Sandyhook Elementary School. While I’m not so sure that anti-gun legislation is going to solve any truly big problems, I hope that donating my money here will help strike while the iron is hot. I simply can’t believe that the 2nd Amendment pro-gun lobby is as successful as it is, and I am hopeful that we’ll be able to change the dialog around guns over the next few years. Gun ownership is trending down in the U.S., and I hope that we can accellerate that trend, bringing a cease to the needless gun deaths violence we currently live with.</p>
<p>The other big donations in this year’s list go mostly towards organizations that I’ve donated to in the past. Fair Vote and Rootstrikers are organizations that work to fix the current political system. Most Americans (about 70%, I believe) agree that the current Federal legislation system is corrupt, and these organizations are working to fix that. I’m pessimistic that until these organizations find success, we won’t be able to deal with the small or large issues facing the country, so these organizations continue to get the plurality of my donation ($400 between them). I think the ridiculous fiscal cliff “negotiations” are testament to how bad things have gotten. Our political system is paralyzed.</p>
<p>Other organizations that did well this year include a handful of open-source foundations that I rely on, but which otherwise give away their work for free. My livelihood and these very donations rely on these bits of infrastructure we take for granted, so I figure I should give them some money to keep ‘em going. </p>
<p>Here’s the nitty gritty breakdown of my donations this year (as well as last):
<iframe width='689' height='500' frameborder='0' src='https://docs.google.com/spreadsheet/pub?key=0Agzoqmo9VXMvdGYzWWVWbDVRSndvLVhKQjd2aW1iV1E&single=true&gid=0&output=html&widget=true'></iframe></p>
<p>As always, I welcome input on these decisions, and suggestions for the years ahead. Those that made suggestions for this year, I truly appreciate your help.</p>Year in Review: Travel Edition2012-12-31T22:42:05-08:00Mike Lissnertag:michaeljaylissner.com,2012-12-31:posts/2012/12/31/year-in-review-2012-travel-edition-goddamn-too-much-traveling/<p>I did a lot of traveling this year; more than anybody should ever really do. Since I’m already forgetting all the places I went to, I figured I’d write it all down. </p>
<p>Here’s the tally:</p>
<table>
<tr><th>Trip</td><th>Flights</td><th>Distance (miles)</td></tr>
<tr><td>London, Germany, Turkey</td><td>9</td><td>15500</td></tr>
<tr><td>Germany for work</td><td>2</td><td>11362</td></tr>
<tr><td>Montreal Bike Trip and Visit to Montreal</td><td>2</td><td>5221</td></tr>
<tr><td>L.A., San Diego, Colorado backpacking</td><td>5</td><td>2586</td></tr>
<tr><td>Olympic Peninsula Backpacking</td><td>2</td><td>1356</td></tr>
<tr><td>Paris, Brussels</td><td>2</td><td>11092</td></tr>
<tr><td>Law via the Internet Conference at Ithaca</td><td>4</td><td>5454</td></tr>
<tr><td><strong><span class="caps">TOTAL</span></strong></td><td><strong>26</strong></td><td><strong>52571</strong></td></tr>
</table>
<p>I’m pretty sure some things are left out from the beginning of the year, and I’m still trying to figure out how I ended up doing so much goddamn traveling. For comparison’s sake, I must note that the Earth is 24,901 around its belly, and this is a total of more than twice that. </p>
<p>Next year will be another banner year, as I already have seven weddings on the books. I don’t think there will be so many trips to Europe though. That’ll make the biggest difference. </p>
<p>I just hope I have enough suits. It’s gonna be crazy.</p>Setting up etherpad with postgres on Windows2012-12-27T11:20:36-08:00Mike Lissnertag:michaeljaylissner.com,2012-12-27:posts/2012/12/27/install-etherpad-lite-with-postgres-on-windows/<p>There don’t seem to be any successful installation instructions for postgres on Windows. It’s not that hard, but there are a couple things you need to do. </p>
<p>I haven’t gone through these instructions to make sure they work, but this is roughly what I’ve done to get my Postgres/Windows/Node/Etherpad working together:</p>
<ul>
<li>Install git</li>
<li>Install node.js</li>
<li>Install python<ul>
<li>add <span class="caps">PYTHON</span> as an env</li>
</ul>
</li>
<li>Install postgres<ul>
<li>add C:\Program Files\PostgreSQL\9.2\bin to your path</li>
</ul>
</li>
<li>Download etherpad-lite with git</li>
<li>Run the etherpad-lite windows installer per the instructions</li>
<li>start etherpad-lite<ul>
<li>make sure it works with the dirty <span class="caps">DB</span> before getting exotic</li>
</ul>
</li>
<li>Set up postgres<ul>
<li>npm install pg (will throw an error about msbuild version, but ignore that, the native <span class="caps">JS</span> drivers are installed)</li>
<li>add a user using pgadmin</li>
<li>add a <span class="caps">DB</span> using pgadmin and the user created a second ago</li>
<li>reconfigure to use postgres in the settings.json file</li>
</ul>
</li>
<li>Run start.bat to make sure it works</li>
<li>Turn down the log messages to only <span class="caps">ERROR</span> in the settings.json file.</li>
<li>Use <a href="http://nssm.cc/"><span class="caps">NSSM</span></a> to daemonize it, per the instructions <a href="https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service">here</a>.</li>
</ul>
<p>Note that <span class="caps">NSSM</span> doesn’t yet have stdout and stderr redirection built in. Thus, to start the daemon with these working, you have to create a little script like this: </p>
<div class="highlight"><pre><span class="p">@</span><span class="k">ECHO</span> <span class="k">OFF</span>
<span class="p">@</span>REM This runs etherpad with stdout and stderr getting redirected to special logs
<span class="k">call</span> D:\etherpad\etherpad-lite\start.bat ><span class="p">></span> <span class="n">D</span>:\etherpad\etherpad-lite\logs\stdout.log <span class="m">2</span>><span class="p">></span> <span class="n">D</span>:\etherpad\etherpad-lite\logs\stderr.log
</pre></div>Presentation on Juriscraper and CourtListener for LVI20122012-10-09T19:42:47-07:00Mike Lissnertag:michaeljaylissner.com,2012-10-09:posts/2012/10/09/presentation-on-juriscraper-and-courtlistener-for-lvi2012/<p>Yesterday and today I’ve been in Ithaca, New York, participating in the Law
via the Internet Conference (<span class="caps">LVI</span>), where I’ve been learning tons!</p>
<p>I had the good fortune to have my proposal topic selected for <a href="http://blog.law.cornell.edu/lvi2012/overview/track-4-application-development-for-open-access-and-engagement/">Track 4:
Application Development for Open Access and Engagement</a>.</p>
<p>In the interest of sharing, I’ve <a href="https://michaeljaylissner.com/pdfs/LVI-Presentation-Lissner-Juriscraper.pdf">attached the latest version of my slides</a>
to this Blog post, and the audio for the talk may eventually get posted <a href="http://blog.law.cornell.edu/lvi2012/presentation/wrangling-court-data-on-a-national-level/">on
the <span class="caps">LVI</span> site</a>.</p>Calculating the average elevation of a trip using a TCX file2012-09-16T10:33:31-07:00Mike Lissnertag:michaeljaylissner.com,2012-09-16:posts/2012/09/16/calculate-the-average-elevation-for-a-trip-using-a-tcx-file/<p>If you use a site like <a href="http://ridewithgps.com">ridewithgps</a>, something you may want to know is how to calculate the average elevation for a trip. Unfortunately, most sites don’t seem to provide this, so we have to do a little hacking. </p>
<p>Here’s what worked for me:</p>
<ul>
<li>download the <span class="caps">GPS</span> <span class="caps">TCX</span> file</li>
<li>grep out the altitude lines (<code>grep -i 'altitude' your_file.tcx</code>)</li>
<li>find <span class="amp">&</span> replace out the remaining <span class="caps">XML</span> tags and whitespace using a basic text editor</li>
<li>average the remaining values in a spreadsheet</li>
</ul>
<p>Takes about five minutes. For <a href="http://ridewithgps.com/routes/1701701">my trip</a> the number came out to be 10,753 feet!</p>URL Hacking at REI.com2012-07-31T19:19:00-07:00Mike Lissnertag:michaeljaylissner.com,2012-07-31:posts/2012/07/31/url-hacking-at-rei-dot-com/<p>I’m about two hours away from heading on vacation to Montreal, but I wanted to post a quick update about a vulnerability I found on <span class="caps">REI</span>.com last night.</p>
<p>The vulnerability was a simple one. A few days ago, to get a 15% off coupon, I signed up for their Gear Mail newsletter. It eventually came, and at the bottom it had a link to unsubscribe, which I clicked (I was only after the 15% sign-up coupon). </p>
<p>The link led to:</p>
<div class="highlight"><pre><span class="nl">http:</span><span class="c1">//email.rei.com/cgi-bin12/DM/t/nCT4n0N3xbv0ESo05DPf0Et&EmailAddr=mlissner@michaeljaylissner.com</span>
</pre></div>
<p>Which redirects to:</p>
<div class="highlight"><pre><span class="nl">https:</span><span class="c1">//preferences.rei.com/rei/rei_PrefCtr.asp?EmailAddr=mlissner@michaeljaylissner.com</span>
</pre></div>
<p>I immediately noticed the badness in these URLs, and at a whim, I tried modifying the <span class="caps">URL</span> to use a friend’s email address. Sure enough it worked, and I could look up the full name and zip code of anybody who had an email address that was in <span class="caps">REI</span>’s system.</p>
<p>Around midnight last night, I sent <span class="caps">REI</span> an email informing them of the problem, giving them a month to fix it, and I posted on Twitter that I had found a vulnerability on <span class="caps">REI</span>.com. Naively, I thought that if I didn’t post the link on Twitter, nobody would be able to figure it out, but of course, by morning a friend of mine (a security/privacy researcher, sigh) had found the link and posted it. Not only that, but for fun, he had tried his address book against the link, and turned up 30 of his friend’s names and zip codes out of a sample of about 200.</p>
<p>I sent another note to <span class="caps">REI</span> to make sure that they knew about the link now being in the open, and that the month I promised them had been curtailed by my own mistake. </p>
<p>It’s now 7:15pm, about 19 hours after I first informed them of the problem, and it’s fixed. It still seems to be possible for me to update your email subscriptions, but at least I can’t look up information about you.</p>New tool for testing lxml XPath queries2012-05-20T15:48:06-07:00Mike Lissnertag:michaeljaylissner.com,2012-05-20:posts/2012/05/20/new-tool-for-testing-lxml-xpath-queries/<p>I got a bit frustrated today, and decided that I should build a tool to fix my frustration. The problem was that we’re using a lot of XPath queries to scrape various court websites, but there was no tool that could be used to test xpath expressions efficiently.</p>
<p>There are a couple tools that are quite similar to what I just built: There’s one called Xacobeo, Eclipse has one built in, and even Firebug has a tool that does similar. Unfortunately though, these each operate on a different <span class="caps">DOM</span> interpretation than the one that lxml builds. </p>
<p>So the problem I was running into was that while these tools helped, I consistently had the problem that when the <span class="caps">HTML</span> got nasty, they’d start falling over. </p>
<p>No more! Today I built <a href="https://github.com/mlissner/lxml-xpath-tester/">a quick Django app</a> that can be run locally or on a server. It’s quite simple. You input some <span class="caps">HTML</span> and an XPath expression, and it will tell you the matches for that expression. It has syntax highlighting, and a few other tricks up its sleeve, but it’s pretty basic on the whole.</p>
<p>I’d love to get any feedback I can about this. It’s probably still got some bugs, but it’s small enough that they should be quite easy to stamp out.</p>
<p><strong>Update:</strong> I got in touch with the developer of Xacobeo. There’s an <code>--html</code>
flag that you can pass to it at startup, if that’s your intention. If you use
that, it indeed uses the same <span class="caps">DOM</span> parser that my tool does. Sigh. Affordances
are important, especially in a <span class="caps">GUI</span>-based tool.</p>Further privacy protections at CourtListener2012-04-27T17:05:21-07:00Mike Lissnertag:michaeljaylissner.com,2012-04-27:posts/2012/04/27/further-privacy-protections-at-courtlistener/<p>I’ve <a href="https://michaeljaylissner.com/posts/2012/01/16/respecting-privacy-while-providing-hundreds-of-thousands-of-public-documents/">written previously</a> about the lengths we go to at CourtListener to
protect people’s privacy, and today we completed one more privacy enhancement. </p>
<p>After my last post on this topic, we discovered that although we had
already blocked cases from appearing in the search results of all major
search engines, we had a privacy leak in the form of our computer-readable
sitemaps. These sitemaps contain links to every page within a website,
and since those links contain the names of the parties in a case,
it’s possible that a Google search for the party name could turn up results
that should be hidden.</p>
<p>This was problematic, and as of now we have changed the way we serve
sitemaps so that they use the <code>noindex X-Robots-Tag</code> <span class="caps">HTTP</span> header. This tells
search crawlers that they are welcome to read our sitemaps,
but that they should avoid serving them or indexing them.</p>My Presentation Proposal for LVI 20122012-03-15T20:09:29-07:00Mike Lissnertag:michaeljaylissner.com,2012-03-15:posts/2012/03/15/my-presentation-proposal-for-lvi-2012/<p>The <a href="http://blog.law.cornell.edu/lvi2012/">Law Via the Internet</a> conference is celebrating its 20th anniversary
at Cornell University on October 7-9th. I will be attending,
and with any luck, I’ll be presenting on the topic proposed below.</p>
<h3 id="wrangling-court-data-on-a-national-level">Wrangling Court Data on a National Level</h3>
<p>Access to case law has recently become easier than ever: By simply visiting
a court’s website it is now possible to find and read thousands of cases
withou ever leaving your home. At the same time, there are nearly a hundred
court websites, many of these websites suffer from poor funding or
prioritization, and gaining a higher-level view of the law can be
challenging. “<a href="https://github.com/freelawproject/juriscraper/">Juriscraper</a>” is a new project designed to ease these
problems for all those that wish to collect these court opinions daily. The
project is under active development, and we are looking for others to get involved.</p>
<p>Juriscraper is a liberally-licensed open source library that can be picked
up and used by any organization to scrape the case data from court websites.
In addition to a simply scraping the websites and extracting metadata from
them, Juriscraper has a number of other design goals: </p>
<ul>
<li>Extensibility to support video, oral argument audio, and other media types</li>
<li>Support for all metadata provided by court websites</li>
<li>Extensibility to support varied geographies and jurisdictions</li>
<li>Generalized object-oriented architecture with little or no code repetition</li>
<li>Standardized coding techniques using the latest libraries and standards (Python, xpath, lxml, requests, chardet)</li>
<li>Simple installation, configuration, and <span class="caps">API</span></li>
<li>Friendly and transparent to court websites</li>
</ul>
<p>As well as a number of features: </p>
<ul>
<li>Harmonizatio of metadata (<span class="caps">US</span>, <span class="caps">USA</span>, United States of America,
etc ? United States; et al, et. al., etc. get eliminated; vs., v,
vs ? v.; all dates are Python objects; etc.)</li>
<li>Smart title-casing of case names (several courts provide case names in
uppercase only)</li>
<li>Sanity checking and sorting of metadata values returned by court websites</li>
</ul>
<p>Once implemented, Juriscraper is part of a two-part system. The second part
is the caller, which uses the <span class="caps">API</span>, and which itself solves some interesting questions: </p>
<ul>
<li>How are duplicates detected and avoided? </li>
<li>How can the impact on court websites be minimized?</li>
<li>How can mime type detection be completed successfully so that textual contents can be extracted?</li>
<li>What should we do if it is an image-based <span class="caps">PDF</span>?<ul>
<li>How should <span class="caps">HTML</span> be tidied?</li>
<li>How often should we check a court website for new content? </li>
</ul>
</li>
<li>What should we do in case of failure?</li>
</ul>
<p>Juriscraper is currently deployed by CourtListener.com to scrape all of the
Federal Appeals courts, and we are slowly adding additional state courts
over the coming weeks. </p>
<p>We have been scraping these sites in various ways for several years,
and Juriscraper is the culmination of what we’ve learned. We hope that by
presenting our work at <span class="caps">LVI</span> 2012, we will be able to share what we have
learned and gain additional collaborators in our work.</p>Adding New Fonts to Tesseract 3 OCR Engine2014-10-06T00:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2012-02-11:posts/2012/02/11/adding-new-fonts-to-tesseract-3-ocr-engine/
<h2 id="status">Status</h2>
<p>I’m attempting to keep this up to date as Tesseract changes. If you have
corrections, please send them directly using the <a href="https://michaeljaylissner.com/contact">contact page</a>.</p>
<p>I’ve turned off commenting on this article because it was just a
bunch of people asking for help and never getting any. If you need help
with these instructions, go to <a href="https://stackoverflow.com/questions/tagged/tesseract">Stack Overflow</a> and ask there. If you send
me a link to a question on such a site, I’m much more likely to respond positively.</p>
<h2 id="introduction">Introduction</h2>
<p><a href="http://code.google.com/p/tesseract-ocr/">Tesseract</a> is a great and powerful <span class="caps">OCR</span> engine, but their <a href="http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3">instructions
for adding a new font</a> are incredibly long and complicated. At
CourtListener we have to handle several unusual <a href="http://en.wikipedia.org/wiki/Blackletter">blackletter fonts</a>,
so we had to go through this process a few times. Below I’ve explained the
process so others may more easily add fonts to their system.</p>
<p>The process has a few major steps:</p>
<ul>
<li><a href="#create-training-documents">Create training documents</a></li>
<li><a href="#train-tesseract">Teach Tesseract about the documents</a></li>
</ul>
<h2 id="create-training-documents">Create training documents</h2>
<p>To create training documents, open up <span class="caps">MS</span> Word or LibreOffice, paste in the contents of the attached file named ‘standard-training-text.txt’. This file contains the training text that is used by Tesseract for the included fonts.</p>
<p>Set your line spacing to at least 1.5, and space out the letters by about 1pt. using character spacing. I’ve attached a sample doc too, if that helps. Set the text to the font you want to use, and save it as font-name.doc.</p>
<p>Save the document as a <span class="caps">PDF</span> (call it [lang].font-name.exp0.pdf, with lang being an <a href="http://www.sil.org/iso639-3/iso-639-3_Name_Index_20120203.tab"><span class="caps">ISO</span>-639 three letter abbreviation</a> for your language), and then use the following command to convert it to a 300dpi tiff (requires imagemagick):</p>
<p><code>convert -density 300 -depth 4 lang.font-name.exp0.pdf lang.font-name.exp0.tif</code></p>
<p>You’ll now have a good training image called lang.font-name.exp0.tif. If you’re adding multiple fonts, or bold, italic or underline, repeat this process multiple times, creating one doc → pdf → tiff per font variation.</p>
<h2 id="train-tesseract">Train Tesseract</h2>
<p>The next step is to run tesseract over the image(s) we just created, and to see how well it can do with the new font. After it’s taken its best shot, we then give it corrections. It’ll provide us with a box file, which is just a file containing x,y coordinates of each letter it found along with what letter it thinks it is. So let’s see what it can do:</p>
<div class="highlight"><pre><span class="n">tesseract</span> <span class="n">lang</span><span class="p">.</span><span class="n">font</span><span class="o">-</span><span class="n">name</span><span class="p">.</span><span class="n">exp0</span><span class="p">.</span><span class="n">tiff</span> <span class="n">lang</span><span class="p">.</span><span class="n">font</span><span class="o">-</span><span class="n">name</span><span class="p">.</span><span class="n">exp0</span> <span class="n">batch</span><span class="p">.</span><span class="n">nochop</span> <span class="n">makebox</span>
</pre></div>
<p>You’ll now have a file called font-name.exp0.box, and you’ll need to open it in a box-file editor. There are a bunch of these <a href="http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3#Box_File_Editors">on the Tesseract wiki</a>. The one that works for me (on Ubuntu) is <a href="http://code.google.com/p/moshpytt/">moshpytt</a>, though it doesn’t support multi-page tiffs. If you need to use a multi-page tiff, see <a href="http://code.google.com/p/moshpytt/issues/detail?id=2">the issue on the topic</a> for tips. Once you’ve opened it, go through <strong>every</strong> letter, and make sure it was detected correctly. If a letter was skipped, add it as a row to the box file. Similarly, if two letters were detected as one, break them up into two lines.</p>
<p>When that’s done, you feed the box file back into tesseract:</p>
<div class="highlight"><pre><span class="n">tesseract</span> <span class="n">eng</span><span class="p">.</span><span class="n">font</span><span class="o">-</span><span class="n">name</span><span class="p">.</span><span class="n">exp0</span><span class="p">.</span><span class="n">tif</span> <span class="n">eng</span><span class="p">.</span><span class="n">font</span><span class="o">-</span><span class="n">name</span><span class="p">.</span><span class="n">box</span> <span class="n">nobatch</span> <span class="n">box</span><span class="p">.</span><span class="n">train</span> <span class="p">.</span><span class="n">stderr</span>
</pre></div>
<p>Next, you need to detect the Character set used in all your box files:</p>
<div class="highlight"><pre><span class="n">unicharset_extractor</span> <span class="o">*</span><span class="p">.</span><span class="n">box</span>
</pre></div>
<p>When that’s complete, you need to create a <code>font_properties</code> file. It should list every font you’re training, one per line, and identify whether it has the following characteristics: <fontname> <italic> <bold> <fixed> <serif> <fraktur></p>
<p>So, for example, if you use the standard training data, you might end up with a file like this:</p>
<div class="highlight"><pre>eng.arial.box 0 0 0 0 0
eng.arialbd.box 0 1 0 0 0
eng.arialbi.box 1 1 0 0 0
eng.ariali.box 1 0 0 0 0
eng.b018012l.box 0 0 0 1 0
eng.b018015l.box 0 1 0 1 0
eng.b018032l.box 1 0 0 1 0
eng.b018035l.box 1 1 0 1 0
eng.c059013l.box 0 0 0 1 0
eng.c059016l.box 0 1 0 1 0
eng.c059033l.box 1 0 0 1 0
eng.c059036l.box 1 1 0 1 0
eng.cour.box 0 0 1 1 0
eng.courbd.box 0 1 1 1 0
eng.courbi.box 1 1 1 1 0
eng.couri.box 1 0 1 1 0
eng.georgia.box 0 0 0 1 0
eng.georgiab.box 0 1 0 1 0
eng.georgiai.box 1 0 0 1 0
eng.georgiaz.box 1 1 0 1 0
eng.lincoln.box 0 0 0 0 1
eng.old-english.box 0 0 0 0 1
eng.times.box 0 0 0 1 0
eng.timesbd.box 0 1 0 1 0
eng.timesbi.box 1 1 0 1 0
eng.timesi.box 1 0 0 1 0
eng.trebuc.box 0 0 0 1 0
eng.trebucbd.box 0 1 0 1 0
eng.trebucbi.box 1 1 0 1 0
eng.trebucit.box 1 0 0 1 0
eng.verdana.box 0 0 0 0 0
eng.verdanab.box 0 1 0 0 0
eng.verdanai.box 1 0 0 0 0
eng.verdanaz.box 1 1 0 0 0
</pre></div>
<p>Note that this is the standard font_properties file that should be supplied with Tesseract and I’ve added the two bold rows for the blackletter fonts I’m training. You can also see which fonts are included out of the box.</p>
<p>We’re getting near the end. Next, create the clustering data:</p>
<div class="highlight"><pre>mftraining -F font_properties -U unicharset -O lang.unicharset *.tr
cntraining *.tr
</pre></div>
<p>If you want, you can <a href="http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3#Dictionary_Data_(Optional)">create a wordlist</a> or a <a href="http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3#The_last_file_(unicharambigs)">unicharambigs file</a>. If you don’t plan on doing that, the last step is to combine the various files we’ve created. </p>
<p>To do that, rename each of the language files (normproto, Microfeat, inttemp, pffmtable) to have your lang prefix, and run (mind the dot at the end):</p>
<div class="highlight"><pre><span class="n">combine_tessdata</span> <span class="n">lang</span><span class="p">.</span>
</pre></div>
<p>This will create all the data files you need, and you just need to move them to the correct place on your <span class="caps">OS</span>. On Ubuntu, I was able to move them to;</p>
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mv</span> <span class="n">eng</span><span class="p">.</span><span class="n">traineddata</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">tessdata</span><span class="o">/</span>
</pre></div>
<p>And that, good friend, is it. Worst process for a human, ever.</p>
<h2 id="enclosures">Enclosures</h2>
<ul>
<li><a href="https://michaeljaylissner.com/archive/ocr/standard-training-text.txt">Training data file</a></li>
<li><a href="https://michaeljaylissner.com/archive/ocr/old-english.doc">Old English example file</a></li>
</ul>The Winning Font in Court Opinions2012-01-27T22:15:58-08:00Mike Lissnertag:michaeljaylissner.com,2012-01-27:posts/2012/01/27/and-the-winning-font-in-court-documents-is/<p>At CourtListener, we’re developing a new system to convert scanned court
documents to text. As part of our development we’ve analyzed more than 1,000
court opinions to determine what fonts courts are using. </p>
<p>Now that we have this information, our next step is to create training data
for <a href="http://code.google.com/p/tesseract-ocr/">our <span class="caps">OCR</span> system</a> so that it specializes in these fonts,
but for now we’ve attached <a href="https://michaeljaylissner.com/archive/court-font-analysis/font-analysis.ods">a spreadsheet</a> with our findings,
and <a href="https://michaeljaylissner.com/archive/court-font-analysis/extract_font_metadata_from_files.py">a script that can be used by others</a> to extract font metadata
from PDFs.</p>
<p>Unsurprisingly, the top font — drumroll please — is Times New Roman. </p>
<table>
<tr>
<th>Font</td>
<th>Regular</td>
<th>Bold
<th>Italic
<th>Bold Italic
<th>Total
</tr>
<tr>
<td>Times
<td>1454
<td>953
<td>867
<td>47
<td><strong>3321</strong>
</tr>
<tr>
<td>Courier
<td>369
<td>333
<td>209
<td>131
<td><strong>1042</strong>
</tr>
<tr>
<td>Arial
<td>364
<td>39
<td>11
<td>41
<td><strong>455</strong>
</tr>
<tr>
<td>Symbol
<td>212
<td>0
<td>0
<td>0
<td><strong>212</strong>
</tr>
<tr>
<td>Helvetica
<td>24
<td>161
<td>2
<td>2
<td><strong>189</strong>
</tr>
<tr>
<td>Century Schoolbook
<td>58
<td>54
<td>52
<td>9
<td><strong>173</strong>
</tr>
<tr>
<td>Garamond
<td>44
<td>42
<td>41
<td>0
<td><strong>127</strong>
</tr>
<tr>
<td>Palatino Linotype
<td>36
<td>24
<td>24
<td>1
<td><strong>85</strong>
</tr>
<tr>
<td>Old English
<td>42
<td>0
<td>0
<td>0
<td><strong>42</strong>
</tr>
<tr>
<td>Lincoln
<td>27
<td>0
<td>0
<td>0
<td><strong>27</strong>
</tr>
</table>Support for x-robots-tag and robots HTML meta tag2012-01-24T23:20:20-08:00Mike Lissnertag:michaeljaylissner.com,2012-01-24:posts/2012/01/24/support-for-x-robots-tag-http-header-and-robots-html-meta-tag/
<p>As part of our research for <a href="/blog/respecting-privacy-while-providing-hundreds-of-thousands-of-public-documents">our post</a> on how we block search engines, we
looked into which search engines support which privacy standards. This
information doesn’t seem to exist anywhere else on the Internet, so below are
our findings, starting with the big guys, and moving towards more obscure or
foreign search engines.</p>
<h2 id="google-bing">Google, Bing</h2>
<p>Google (known as Googlebot) and Bing (known as Bingbot) support the
<code>x-robots-tag</code> header and the robots <span class="caps">HTML</span> tag. Here’s <a href="http://support.google.com/webmasters/bin/answer.py?hl=en&answer=79812">Google’s page</a> on
the topic. And <a href="http://www.bing.com/community/site_blogs/b/webmaster/archive/2009/08/21/prevent-a-bot-from-getting-lost-in-space-sem-101.aspx">here’s Bing’s</a>. The <a href="http://www.bing.com/community/site_blogs/b/webmaster/archive/2009/11/04/msnbot-1-1-is-retired.aspx">msnbot is retired</a>.</p>
<h2 id="yahoo-aol">Yahoo, <span class="caps">AOL</span></h2>
<p>Yahoo!’s search engine is provided by Bing. <span class="caps">AOL</span>’s is provided by Google. These
are easy ones.</p>
<h2 id="ask-yandex-nutch">Ask, Yandex, Nutch</h2>
<p>Ask (known as teoma), and Yandex (Russia’s search engine, known as yandex),
support the robots meta tag, but do not appear to support the <code>x-robots-tag</code>.
Ask’s page on the topic <a href="http://www.ask.com/staticcontent/about/helpcenter/about_helpcenter_webmaster#5">is here</a>, and Yandex’s <a href="http://help.yandex.com/webmaster/?id=1113833">is here</a>. The popular
open source crawler, <a href="http://nutch.apache.org/">Nutch</a>, also <a href="http://nutch.sourceforge.net/docs/en/bot.html">supports the robots <span class="caps">HTML</span> tag</a>, but
<a href="http://lucene.472066.n3.nabble.com/Support-for-x-robots-tag-td3678606.html">not the <code>x-robots-tag</code> header</a>. <em>Update:</em> Newer versions of Nutch now
support <code>x-robots-tag</code>!</p>
<h2 id="the-internet-archive-alexa">The Internet Archive, Alexa</h2>
<p>The Internet Archive uses Alexa’s crawler, which is known as ia_archiver. This
crawler does not seem to support either the <span class="caps">HTML</span> robots meta tag nor the
<code>x-robots-tag</code> <span class="caps">HTTP</span> header. Their page on the subject <a href="http://www.alexa.com/help/webmasters">is here</a>. I have
requested more information from them, and will update this page if I hear back.</p>
<h2 id="blekko-baidu">Blekko, Baidu</h2>
<p>Blekko does not support either the robots meta tag nor the
<code>x-robots-tag</code> header, per emails I’ve had with them. I also requested
information from Baidu, but their response totally ignored my question and was
in Chinese. They do have some information <a href="http://wenku.baidu.com/view/ec4457d4b14e852458fb5793.html">here</a>, but it does not seem to
provide any information on the noindex value for the robots tag. In any case,
the only way to block these crawlers seems to be via a robots.txt file.</p>
<h2 id="duckduckgo">Duckduckgo</h2>
<p>I previously stated that <span class="caps">DDG</span> did not support the <code>x-robots-tag</code> header, but
while that was true, it didn’t tell the entire story. The entire story is that
<span class="caps">DDG</span> uses other search crawlers for their content aggregation and uses their
own crawler only for maintenance-type work. You can read more about this in <a href="http://stackoverflow.com/a/24089393/64911">my
answer on StackOverflow</a>.</p>Respecting privacy while providing hundreds of thousands of public documents2012-01-16T22:13:22-08:00Mike Lissnertag:michaeljaylissner.com,2012-01-16:posts/2012/01/16/respecting-privacy-while-providing-hundreds-of-thousands-of-public-documents/<p>At CourtListener, we have always taken privacy very seriously. We <a href="http://courtlistener.com/coverage/">have over 600,000</a> cases currently, most of which are available on Google and other search engines. But in the interest of privacy, we make two broad exceptions to what’s available on search engines: </p>
<ol>
<li>As is stated in our <a href="http://courtlistener.com/removal/">removal policy</a>, if someone gets in touch with us in writing and requests that we block search engines from indexing a document, we generally attempt to do so within a few hours. </li>
<li>If we discover a privacy problem within a case, we proactively block search engines from indexing it. </li>
</ol>
<p>Each of these exceptions presents interesting problems. In the case of requests to prevent indexing by search engines, we’re often faced with an ethical dilemma, since in many instances, the party making the request is merely displeased that their involvement in the case is easy to discover and/or they are simply embarrassed by their past. In this case, the question we have to ask ourselves is: Where is the balance between the person’s right to privacy and the public’s need to access court records, and to what extent do changes in <a href="http://scholar.google.com/scholar?hl=en&q=practical+obscurity+privacy">practical obscurity</a> compel action on our behalf? For example, if someone convicted of murder or child molestation is trying to make information about their past harder to discover, how should we weigh the public’s interest in easily locating this information via a search engine? In the case of convicted child molesters, we can look to <a href="http://en.wikipedia.org/wiki/Megan%27s_Law">Megan’s law</a> for a public policy stance on the issue, but even that forces us to ask to what extent we should chart our own path, and to what extent we should follow public policy decisions. </p>
<p>On the opposite end of the spectrum, many of the cases that we block search engines from indexing are asylum cases where a person has lost an attempt to stay in the United States, and been sent back to a country where they feel unsafe. In such cases, it seems clear that it’s important to keep the person’s name out of search engine results, but still we must ask to what extent do we have an obligation to identify and block such cases from appearing proactively rather than post hoc? </p>
<p>In both of these scenarios, we have taken a middle ground that we hope strikes a balance between the public’s need for court documents and an individual’s desire or need for privacy. Instead of either proactively blocking search engines from indexing cases or keeping cases in search results against a party’s request, our current policy is to block search engines from indexing a web page as each request comes in. We currently have 190 cases that are blocked from search results, and the number increases regularly. </p>
<p>Where we do take proactive measures to block cases from search results is where we have discovered unredacted or <a href="https://freedom-to-tinker.com/blog/tblee/what-gets-redacted-pacer">improperly redacted</a> social security numbers in a case. Taking a cue from the now-defunct Altlaw, whenever a case is added, we look for character strings that appear to be social security numbers, tax <span class="caps">ID</span> numbers or alien <span class="caps">ID</span> numbers. If we find any such strings, we replace them with x’s, and we try to make sure the unredacted document does not appear in search results outside of CourtListener. </p>
<p>The methods we have used to block cases from appearing in search results have evolved over time, and I’d like to share what we’ve learned so others can give us feedback and learn from our experiences. There are five technical measures we use to keep a case out of search results: </p>
<ol>
<li>robots.txt file </li>
<li><span class="caps">HTML</span> meta noindex tags </li>
<li><span class="caps">HTTP</span> X-Robots-Tag headers </li>
<li>sitemaps.xml files </li>
<li>The webmaster tools provided by the search engines themselves</li>
</ol>
<p>Each of these deserves a moment of explanation. <a href="http://www.robotstxt.org/">robots.txt</a> is a protocol that is respected by all major search engines internationally, and which allows site authors (such as myself) to identify web pages that shouldn’t be crawled. Note that I said <strong>crawled</strong> not <strong>indexed</strong>. This is a very important distinction, as I’ll explain momentarily. </p>
<p><span class="caps">HTML</span> meta tags are a tag that you can place into the <span class="caps">HTML</span> of a page, and which instructs search engines not to <strong>index</strong> a page. Since this is an <span class="caps">HTML</span> format, this method only works on <span class="caps">HTML</span> pages. </p>
<p><span class="caps">HTTP</span> X-Robots-Tag headers are similar to <span class="caps">HTML</span> meta tags, but they allow site authors to request that an <em>item</em> not be indexed. That item may be an <span class="caps">HTML</span> page, but equally, it may be a <span class="caps">PDF</span> or even an image that should not searchable. </p>
<p>Further, we provide an <a href="http://www.sitemaps.org/protocol.html"><span class="caps">XML</span> sitemap</a> that search engines can understand, and which tells them about every page on the site that they should crawl and index. </p>
<p>All of these elements fit together into a complicated melange that has
absorbed many development hours over the past two years,
as different search engines interpret these standards in different ways. </p>
<p>For example, Google and Bing interpret the robots.txt files as blocks to
their crawlers. This means that web pages listed in robots.txt will not be
<strong>crawled</strong> by Google or Bing, but that does not mean those pages will not
be <strong>indexed</strong>. Indeed, if Google or Bing learn of the existence of a web
page (for example, because another page linked to it),
then they will include it in <a href="http://www.youtube.com/watch?v=KBdEwpRQRD0">their</a> <a href="http://www.bing.com/community/site_blogs/b/webmaster/archive/2009/08/21/prevent-a-bot-from-getting-lost-in-space-sem-101.aspx">indexes</a>. This is true even if
robots.txt explicitly blocks robots from crawling the page,
because to include it in their indexes, they don’t <strong>have to</strong> crawl it
— they just need to know about it! Even your own link to a page is
sufficient for Google or Bing to know about the page. And what’s worse,
if you have a good <span class="caps">URL</span> with descriptive words within it,
Google or Bing will know the terms in the URLs even when they haven’t
crawled the page. So if your <span class="caps">URL</span> is example
.com/private-page-about-michael-jackson, a query for [ Michael Jackson ]
could certainly bring it up, even if it were never crawled. </p>
<p>The solution to this is to allow Google and Bing to crawl the pages, but to use noindex meta or <span class="caps">HTTP</span> tags. If these are in place, the pages will not appear in the index at all. This sounds paradoxical: to exclude pages from appearing in Google and Bing, you have to allow them to be crawled? <a href="https://support.google.com/webmasters/bin/answer.py?hl=en&answer=93710">Yes, that’s correct</a>. Furthermore, it’s theoretically possible that Google or Bing could learn about a page on your site from a link, and then not crawl it immediately or at all. In this case, they will know the <span class="caps">URL</span>, but won’t know about and X-Robots-Tag headers or meta tags. Thus, they might include the document against your wishes. For this reason, it’s important to <strong>include</strong> private pages in your sitemap.xml file, inviting and encouraging Google and Bing to crawl the page specifically so the page can be excluded from their indexes.</p>
<p>Yahoo! uses Bing to power their search engine, and <span class="caps">AOL</span> uses Google, so the above strategy applies to them as well.</p>
<p>Other search engines take a different approach to robots.txt. Ask.com, The Internet Archive and the Russian search engine Yandex.ru all respect the robots meta tag, but not the x-robots-tag <span class="caps">HTTP</span> header. Thus, for these search engines, the strategy above works for <span class="caps">HTML</span> files, but not for any other files. These crawlers therefore need to be blocked from accessing those other files. On the upside, unlike Google and Bing, it appears that these search engines will not show a document in their results if they have not crawled it. Thus, using robots.txt alone should be sufficient.</p>
<p>A third class of search engines support neither the robots <span class="caps">HTML</span> meta tag, nor the x-robots-tag <span class="caps">HTTP</span> header. These are typically less popular or less mature crawlers, and so they must be blocked using robots.txt. There are two approaches to this. The first is to list blocked pages individually in the robots.txt file, and the second is to simply block these search engines from all access. While it’s possible to list each private document in robots.txt, doing so creates a privacy loophole, since it lists all private documents in one place. At CourtListener, therefore, we take a conservative approach, and completely block all search engines that do not support the <span class="caps">HTML</span> meta tag or the x-robots-tag <span class="caps">HTTP</span> header.</p>
<p>The final action we take when we receive a request that a document on our site stop appearring in search results, is to use the webmaster tools provided by the major search engines<sup>1</sup> to explicitly ask those search engines to exclude the document(s) from their results.</p>
<p>Between these measures, private documents on CourtListener should be removed from all major and minor search engines. Where posssible this strategy takes a very granular approach, and where minor search engines do not support certain standards, we take a conservative approach, blocking them entirely.</p>
<p><strong>Update, 2012-04-29:</strong> You may also want to look at our <a href="https://michaeljaylissner.com/posts/2012/04/27/further-privacy-protections-at-courtlistener/">discussion of the impact of putting people’s names into your URLs, and the way that affects your sitemap files</a>.</p>
<!-- actual footnotes -->
<ol>
<li>We use <a href="http://www.google.com/webmasters/tools">Google’s Webmaster
Tools</a> and <a href="http://www.bing.com/toolbox/webmaster">Bing’s
Webmaster Tools</a>. Before it was merged into Bing’s tools,
we also previously used <a href="http://siteexplorer.search.yahoo
.com/">Yahoo’s Site Explorer</a>.</li>
</ol>Android Icons from Ice Cream Sandwich2012-01-12T18:38:34-08:00Mike Lissnertag:michaeljaylissner.com,2012-01-12:posts/2012/01/12/android-icons-from-ice-cream-sandwich/<p>For those that are looking for the stock Android icons that come with the
platform, I just pulled them together, and put them in a zip for you.</p>
<p>I’ve gone through and deleted a couple hundred images that weren’t icons -
things like blue backgrounds and the like, but the rest should be here.</p>
<p><strong><a href="https://michaeljaylissner.com/archive/android-icons.zip">Enjoy.</a></strong></p>Integrating Solr Search with Django at CourtListener2011-12-02T09:37:39-08:00Mike Lissnertag:michaeljaylissner.com,2011-12-02:posts/2011/12/02/integrating-solr-search-with-django-at-courtlistener/
<p>Over the past few weeks, I’ve been hard at work on the new version of <a href="http://courtlistener.com">CourtListener</a>. Unfortunately, progress has been slower than I’d like due to the limitations of the Solr frameworks I’ve been using. There are a number of competing frameworks available, each with its own strengths and pitfalls.</p>
<p>So far, I’ve tried two of the popular ones, <a href="http://haystacksearch.org/">Haystack</a> and <a href="http://opensource.timetric.com/sunburnt/index.html">Sunburnt</a>. I’m pretty impressed by both, but today’s blog post is to outline the problems I’m having with these frameworks so that others that are faced with choosing one might be better informed. The difference between these frameworks is vast. Haystack aims to solve all of your integration needs, while Sunburnt is a fairly lightweight wrapper around Solr.</p>
<h2 id="courtlisteners-needs">CourtListener’s needs</h2>
<p>At CourtListener, we have some big goals for the new search version. At its
core, it’s essentially a search-powered site, so we have some big needs:</p>
<ul>
<li><a href="http://www.uxmatters.com/mt/archives/2009/09/best-practices-for-designing-faceted-search-filters.php">Parallel Faceted Search</a></li>
<li>Highlighting</li>
<li>Complex boolean searches supported by Solr’s eDisMax syntax</li>
<li>Snippets below search results and in emails</li>
<li>Standard search stuff: field-level boosting, result and facet counts, field-level searching, result pagination, performance, etc.</li>
</ul>
<p>We’re currently using <a href="http://sphinxsearch.com">Sphinx Search</a> with <a href="http://github.com/dcramer/django-sphinx">django-sphinx</a>, which does a fine job, but it has some problems:</p>
<ul>
<li>django-sphinx hasn’t been maintained in years, and requires patching</li>
<li>django-sphinx doesn’t support snippets</li>
<li>Sphinx doesn’t (yet) support real time indexing (though it’s in beta, I believe)</li>
<li>Sphinx doesn’t have the community and features that Solr does</li>
<li>Unfamiliar syntax for users</li>
</ul>
<p>In general, these problems aren’t too difficult, but in combination, they make for a poor user experience. The last point is a real deal breaker, since most users are accustomed to making queries like [ site:google.com ], which works for Solr and Google, but not for Sphinx. In Sphinx, your query is [ @site(google.com) ]. While we could do post processing of the user’s query to convert it to Google/Solr-style syntax, it’s unreliable and prone to failing in corner cases. Parsing queries is hard. More on this in a moment. </p>
<h2 id="lets-try-haystack">Let’s try Haystack</h2>
<p>In switching from Sphinx, I first tried Haystack as a solution, since it has excellent documentation and seems to be the most popular solution. I spent about two weeks learning about it and getting it in place, but ultimately, I gave up on it because I found that I was subclassing it everywhere. Haystack is a good solution, to be sure, but I found that I was:</p>
<ul>
<li>Subclassing the FacetView so it could support parallel facet counts</li>
<li>Subclassing the FacetForm for another feature I needed</li>
<li>Subclassing the Solr backend so it could support Solr’s highlighting syntax</li>
<li>Further subclassing the Solr backend so it can support additional Solr parameters that aren’t built in</li>
<li>…etc…</li>
</ul>
<p>I worked on that third point for the better part of a day before deciding that Haystack wasn’t for me. Rather than spending my time working on the search needs of CourtListener, I was spending most of it hacking on Haystack, and trying to understand the way it fits together. It’s not unreasonably complex, but there is a <span class="caps">LOT</span> of documentation, and a lot of complexity that I don’t need (such as the ability to switch search backends). Instead of a big solution that allows me to subclass whatever I need (which is good), I needed a lighter-weight solution that was more nimble, and which allowed me to interact with Solr in a more direct way.</p>
<h2 id="enter-sunburnt">Enter Sunburnt</h2>
<p>Sunburnt is a lightweight solution that is everything that Haystack isn’t. From the moment it’s installed, you can start making queries without configuring Django to use it, and without really knowing much else. Its documentation is a single page, which is actually a big relief after coming from Haystack. But Sunburnt has a major problem in its design: It doesn’t support just sending queries to Solr. The expectation in Sunburnt is that each system using it does post-processing on the user’s query, and then submits the query to Sunburnt in stages. </p>
<p>So, if a user searches for “foo bar”, rather than just passing that to Sunburnt, you have to split on the white space, then pass: </p>
<div class="highlight"><pre><span class="n">si</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s">'bar'</span><span class="p">)</span>
</pre></div>
<p>At first you think, “<span class="caps">OK</span>, I can do that - just split on white space, no big deal.” Then you start thinking about the <a href="http://lucene.apache.org/java/3_4_0/queryparsersyntax.html#Escaping%20Special%20Characters">other syntax</a> that Solr supports, and you realize that you have a real problem if you have to split up queries appropriately. Trust me when I say that you don’t want to be thinking about how to send a query like this one to Sunburnt: [ foo bar “jakarta apache”~10 ]. </p>
<p>The author of Sunburnt will point out that there’s a workaround for this problem. You can use </p>
<div class="highlight"><pre><span class="n">si</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="s">'"jakarta apache"~10'</span><span class="p">)</span>
</pre></div>
<p>That works, to a point, but that syntax isn’t supported on facets, so your facet counts won’t have the same counts as your results. And so, Sunburnt, though powerful and lightweight, fails.</p>
<h2 id="what-now">What now?</h2>
<p>Good question.</p>Tripling Down2011-10-27T21:09:36-07:00Mike Lissnertag:michaeljaylissner.com,2011-10-27:posts/2011/10/27/tripling-down/<p>I’m tripling down on my donations <a href="/blog/2011-donations">that I placed</a> at the beginning of the year. Feels right.</p>The abolishment of the Emergency Court of Appeals (April 18, 1962)2011-08-10T20:50:54-07:00Mike Lissnertag:michaeljaylissner.com,2011-08-10:posts/2011/08/10/the-abolishment-of-the-emergency-court-of-appeals-1962/<p>One of the coming features at <a href="http://courtlistener.com">CourtListener</a> is an <span class="caps">API</span> for the law. Part of that feature is going to be some basic information about the courts themselves, so I spent some time over the weekend researching courts that served a special purpose but were since abolished.</p>
<p>One such court was the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Emergency_Court_of_Appeals">Emergency Court of Appeals</a>. It was created during World War <span class="caps">II</span> to set prices, and, naturally, was the court of appeals for many cases. The creation date of the court is prominently published in various places on the Internet, but the abolishment history of the court was very difficult to find. After researching online for some time, and learning that my library card had expired (sigh), I put in a query with the <a href="http://www.loc.gov">Library of Congress</a>, which provides free research of these types of things.</p>
<p>Within a couple days, the provided me with this amazing response,
which I’m sharing here, and on the above Wikipedia article:</p>
<blockquote>
<p>As stated in the Legislative Notes to 50 <span class="caps">U.S.</span> Code Appendix § 921 to 926,
as posted at http://www.law.cornell.edu/uscode/html/uscode50a/usc_sec_50a_00000921——000-notes.html,
the following explanation is given regarding the amendment and repeal of Act
of Jan. 30, 1942, ch. 26, title <span class="caps">II</span>, § 204, 56 Stat. 23, 31-33: </p>
<p><span class="dquo">“</span>Section 924, acts Jan. 30, 1942, ch. 26, title <span class="caps">II</span>, § 204,
56 Stat. 31; June 30, 1944, ch. 325, title I, § 107, 58 Stat. 639; June 30,
1945, ch. 214, § 6, 59 Stat. 308; July 30, 1947, ch. 361, title I, § 101,
61 Stat. 619; June 25, 1948, ch. 646, § 32(a), 62 Stat. 991; May 24, 1949,
ch. 139, § 127, 63 Stat. 107, authorized review of orders of the Office of
Price Administrator under the Emergency Price Control Act of 1942,
and created the Emergency Court of Appeals for this purpose. The Emergency
Price Control Act of 1942 terminated on June 30, 1947,
under the provisions of act July 25, 1946, ch. 671, § 1,
60 Stat. 664. The Housing and Rent Act of 1948, act Mar. 30, 1948, ch. 161,
62 Stat. 93, classified to section 1881 of this Appendix,
continued the Court for the purpose of reviewing recommendations of local
advisory boards for the decontrol or adjustment of maximum rents. Later,
the Defense Production Act of 1950, act Sept. 8, 1950, ch. 932,
64 Stat. 798, classified to sections 2061 to 2166 of this Appendix,
continued the Court to review regulations and orders relating to price
control. The Housing and Rent Act of 1948 and the Defense Production Act of
1950 both terminated, however, the Court remained in existence “to complete
the adjudication of rights and liabilities incurred prior to their
termination dates.” (Transcript of Proceedings of the Final Session of the
Court, 299 F.2d 1.) The final decision of the Court, Rosenzweig v. General
Services Administration, 1961, 299 F.2d 22, was decided on Dec. 6,
1961. A petition for rehearing was denied on Jan. 2, 1962,
and a petition for writ of certiorari to the Supreme Court of the United
States was denied on Mar. 19, 1962, 82 S. Ct. 830. </p>
<p>The order of Chief Judge Albert B. Maris, set forth in 299 F.2d 20, provided: </p>
<p>The business of this Court having been completed, it is ordered that at the
expiration of 30 days from this date, if a petition for certiorari has not
been filed in the Supreme Court in Case No. 676 [Rosenzweig v. General
Services Administration], just decided, the acting clerk shall deliver the
records and papers of the Court in his office to the General Services
Administration for permanent custody as records of the Government,
and shall thereupon inform the Chief Justice of the United States that the
work of the Court has been completed and that the designations of the judges
of the Court may therefore appropriately be terminated. </p>
<p>If a petition for certiorari is filed in Case No. 676 this order shall take
effect and be carried out at the expiration of 30 days after the final
disposition of Case No. 676.</p>
<p>In accordance with the terms of this order, the petition for certiorari
having been filed, and denied Mar. 19, 1962, the Court terminated on Apr. 18, 1962.” </p>
</blockquote>
<p>Pretty fantastic research. And for free! Thanks <span class="caps">LOC</span>.</p>Project Idea: “Programming library for curse words”2011-03-13T23:13:34-07:00Mike Lissnertag:michaeljaylissner.com,2011-03-13:posts/2011/03/13/project-idea-curse-word-library/<p>When programming, there are occasionally times when you need to detect or block curse words. At CourtListener, for example, we make URLs with <span class="caps">ID</span> numbers in them that are formed by converting an <span class="caps">ID</span> number to letters (so a → 1, b → 2, 27 → A, etc). Higher numbers create longer strings of letters, so over time, this creates curse words in the <span class="caps">URL</span>. Currently, the site is only has a few four letter strings, but I will rue the day when any of the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Seven_dirty_words">seven dirty words</a> is being shown to users on my site.</p>
<p>There are many lists of curse words on the web, but none that is maintained or curated. Having that alone would be a useful project. What would make it better would be libraries in popular programming languages that efficiently told you if a string contained a curse word. </p>
<p>The next feature would be to add additional languages, and then to add words like pen1s, which aren’t normally curse words, but are certainly words you’d want to eliminate.</p>
<p>It’d be a pretty simple project, so I may just go for it.</p>
<p>Only question is, what do I name it?</p>Viewsonic Drivers, Repair and Service Manuals2011-02-20T00:33:40-08:00Mike Lissnertag:michaeljaylissner.com,2011-02-20:posts/2011/02/20/viewsonic-repair-manuals/<p>Don’t ask me how I came upon these, but please enjoy your hacking and repairs.</p>
<ul>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/17PS-2_SERVICE_MANUAL.pdf"><span class="caps">17PS</span>-2_SERVICE_MANUAL.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/a90fplus-1_SM_1a.pdf">a90fplus-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/cd1010-1_ug_eng.pdf">cd1010-1_ug_eng.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/E90fB-4_SM_Rev.1a.pdf">E90fB-4_SM_Rev.1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/G90f_SM_1a.pdf">G90f_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/KU206-306.zip"><span class="caps">KU206</span>-306.zip</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N2635w-1M_SM_Rev.1a_Jul.2007.pdf">N2635w-1M_SM_Rev.1a_Jul.2007.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n2750w-1_sm.pdf">n2750w-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n2750w-2g_sm.pdf">n2750w-2g_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N3235w-1M_SM_1a.pdf">N3235w-1M_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n3250w-1g_sm.pdf">n3250w-1g_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N3250w-1L_SM_Rev.1b_Aug.2008.pdf">N3250w-1L_SM_Rev.1b_Aug.2008.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n3250w-1_sm_1a.pdf">n3250w-1_sm_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N3250wb-1G_SM_1a.pdf">N3250wb-1G_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N3250w-G_SM_1a.pdf">N3250w-G_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N3252w-1M_SM_Rev.1b_Aug.2008.pdf">N3252w-1M_SM_Rev.1b_Aug.2008.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n3260w-1_sm.pdf">n3260w-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n3752w-1_sm.pdf">n3752w-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n4060w-1nt_sm.pdf">n4060w-1nt_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/n4200w-1_sm.pdf">n4200w-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N4251w-1M_SM_Rev.1b_Jul.2007.pdf">N4251w-1M_SM_Rev.1b_Jul.2007.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/N4261w-M_SM.pdf">N4261w-M_SM.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/NMP530_2.43.zip">NMP530_2.43.zip</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/NMP530_2.50_firmware_update.zip">NMP530_2.50_firmware_update.zip</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/P90f-1_SM_1a.pdf">P90f-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/pj1158-1_sm.pdf">pj1158-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/PJ402D-1_SM_1a.pdf"><span class="caps">PJ402D</span>-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/PJ402D-2_SM_Rev.1e_Dec.2008.pdf"><span class="caps">PJ402D</span>-2_SM_Rev.1e_Dec.2008.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/PJ501_SM_1a.pdf">PJ501_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/PJ513D_SM_Rev.1b_May.2009.pdf">PJ513D_SM_Rev.1b_May.2009.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/PJ650_UG_French.pdf">PJ650_UG_French.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/PJ875_SM_1a.pdf">PJ875_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/Pro8100_SM_Rev.1b_Dec.2008.pdf">Pro8100_SM_Rev.1b_Dec.2008.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/UBRC-100.pdf"><span class="caps">UBRC</span>-100.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/UBRC remote codes.pdf"><span class="caps">UBRC</span> remote codes.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/V1100 Drivers and Utilities on C.zip">V1100 Drivers and Utilities on C.zip</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/va702-1_sm.pdf">va702-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/va912-4_ug_eng~1a.pdf">va912-4_ug_eng~1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/ve155-1_SM_1a.pdf">ve155-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vg150m-1_SM_1a.pdf">vg150m-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vg2030m-1_sm.pdf">vg2030m-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vg800b-1_SM_1a.pdf">vg800b-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vg930m-3_sm.pdf">vg930m-3_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VP2030b-1_SM_1a .pdf">VP2030b-1_SM_1a .pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VP2130b_SM_1a.pdf">VP2130b_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vp2330wb-1_sm.pdf">vp2330wb-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vp930-2_sm.pdf">vp930-2_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VPW425_SM_1a.pdf">VPW425_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vt2430-1m_ug_eng.pdf">vt2430-1m_ug_eng.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VT2730-1M_SM_1a.pdf"><span class="caps">VT2730</span>-1M_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VTMS2431_SM.pdf">VTMS2431_SM.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VTMS2431_SM Rev. 1a Apr. 2009.pdf">VTMS2431_SM Rev. 1a Apr. 2009.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vx1935wm-3_sm.pdf">vx1935wm-3_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vx2245wm-1_sm.pdf">vx2245wm-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VX2835wm-1_SM.pdf">VX2835wm-1_SM.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/vx922-1_sm.pdf">vx922-1_sm.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/VX924-1_SM_1a.pdf"><span class="caps">VX924</span>-1_SM_1a.pdf</a></li>
<li><a href="https://michaeljaylissner.com/archive/viewsonic-manuals/WPG150V1501030019.zip"><span class="caps">WPG150V1501030019</span>.zip</a></li>
</ul>Firefox images and icons2011-02-20T00:27:20-08:00Mike Lissnertag:michaeljaylissner.com,2011-02-20:posts/2011/02/20/firefox-images-and-icons/<p>A few weeks ago, I was in need of a free star icon, and for the life of me,
I couldn’t find one that was quite right. I scoured over the Internet,
all the while noticing the perfect little star in my browser.</p>
<p>A couple of times, I Googled for Firefox icons, but I couldn’t find them
posted anywhere. Finally, I realized that if I just downloaded the source,
I could easily find the icons, zip them up neatly, and post them for all to share.</p>
<p>So that’s what I’ve done here. Behold the Firefox icons. These are
organized more usefully in the actual Firefox source,
but if you don’t mind a little icon browsing, the attached zip should have
all the icons you see in your browser.</p>
<p><a href="https://michaeljaylissner.com/archive/firefox-images.zip"><strong>Enjoy.</strong></a></p>
<p><span class="caps">PS</span> - these are licensed under the following licenses: <span class="caps">MPL</span> 1.1/<span class="caps">GPL</span> 2.0/<span class="caps">LGPL</span>
2.1, and are copyright Mozilla.</p>2011 Donations2011-01-22T16:07:21-08:00Mike Lissnertag:michaeljaylissner.com,2011-01-22:posts/2011/01/22/2011-donations/<p>I’m entering year number two of my plan to annually donate a small sum of
money to a handful of organizations at the beginning of every year. This
year I picked the organizations that had a major effect on me personally,
are fixing environmental problems, or are working towards fixing the
American political system.</p>
<p>You’ll see that I’ve given the most money to organizations that are working
to reform voting methods, and campaign finance. I believe that if those two
things were fixed properly, we’d have good people in office that could fix
all of the other issues we see from day to day.</p>
<p><a href="https://michaeljaylissner.com/posts/2010/01/12/2010-donations/">Last year’s donations</a>.</p>
<TABLE><Tr><Th>Organization</TD><Th>Amount</TD><Th>Why</TD><Th>Donation link</TD></Tr><TR><TD><span class="caps">UC</span> Berkeley School of Information</TD><TD >$50.00</TD><TD>They’re my alma mater, and generally teach good things.</TD><TD><A HREF="http://ischool.berkeley.edu/makeagift">Donate</A></TD></TR><TR><TD>Pitzer College</TD><TD>$25.00</TD><TD>They’re my other alma mater, and generally create good people. They also influenced me greatly.</TD><TD><a href="https://mypz.pitzer.edu/NetCommunity/SSLPage.aspx?pid=184">Donate</a></TD></TR><TR><TD>Pacific Crest Trail Association</TD><TD>$25.00</TD><TD>Because they are maintaining and creating a trail from Mexico to Canada, so that’s awesome.</TD><TD><a href="https://www.pcta.org/help/donate/?type=Donation">Donate</a></TD></TR><TR><TD>Catalog Choice</TD><TD>$25.00</TD><TD>Can you imagine how much junk mail there is in America? Catalog Choice actually makes it pretty easy to opt out, and they just keep getting better and better.</TD><TD><a href="http://www.catalogchoice.org/donate">Donate</a></TD></TR><TR><TD>Geany</TD><TD>$25.00</TD><TD>It’s a pretty darned good open-source <span class="caps">IDE</span> that I use regularly. I shall give them my money.</TD><TD><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8049199&lc=GB">Donate</a></TD></TR><TR><TD>Django</TD><TD>$50.00</TD><TD>Without Django, I’d be a less-skilled, and less useful programmer. It’s a great tool and a great community.</TD><TD><a href="http://www.djangoproject.com/foundation/donate/">Donate</a></TD></TR><TR><TD>Electronic Frontier Foundation</TD><TD>$75.00</TD><TD>Because the Internet needs more lawyers to keep it useful.</TD><TD><a href="https://secure.eff.org/site/Donation2?idb=206189199&df_id=1200&1200.donation=form1">Donate</a></TD></TR><TR><TD>Fair Vote</TD><TD>$100.00</TD><TD>Democracy in the <span class="caps">U.S.</span> has many issues, and they’ve got excellent ideas for fixing them through voter reform.</TD><TD><a href="http://www.fairvote.org/thank-you-for-supporting-fairvote">Donate</a></TD></TR><TR><TD>Fix Congress First</TD><TD>$75.00</TD><TD>Until we fix campaign finance, what’s the point of electing people? They’re all going to be biased towards getting the next buck if we don’t fix this.</TD><TD><a href="https://donate.fixcongressfirst.org/page/contribute/fcf-contribute">Donate</a></TD></TR><TR><TD>Public Citizen</TD><TD>$50.00</TD><TD>They are looking at a handful of important issues, and generally leading the way on all of them.</TD><TD><a href="https://secure.citizen.org/t/10694/shop/custom.jsp?donate_page_KEY=6079">Donate</a></TD></TR></TABLE>Changes and Plans at CourtListener.com2010-11-04T23:30:21-07:00Mike Lissnertag:michaeljaylissner.com,2010-11-04:posts/2010/11/04/changes-and-plans-at-courtlistener/<p>A few weeks ago, we made a fairly major change at CourtListener.com to include
<span class="caps">ID</span> numbers in all of our case URLs. This change meant that links that were
previously like this:</p>
<div class="highlight"><pre><span class="nl">http:</span><span class="c1">//courtlistener.com/scotus/Wong-v.-Smith/</span>
</pre></div>
<p>Are now like this:</p>
<div class="highlight"><pre><span class="nl">http:</span><span class="c1">//courtlistener.com/scotus/V5o/wong-v-smith/</span>
</pre></div>
<p>Most of the old links should continue to work, but using the new links should
be much faster and more reliable. The major difference between the two is the
<span class="caps">ID</span> number, which is encoded as a set of numbers (in this case <em>V5o</em>). This
<span class="caps">ID</span> corresponds directly with the <span class="caps">ID</span> number in our database, aiding us greatly
in serving up cases quickly and accurately.</p>
<p>Around the same time as this change, we added social networking links to all
of our case pages to make them easier to share with friends and colleagues.
These links use our new tiny domain, <em>http://crt.li/</em>, and should thus be
ideal for websites like Twitter or Reddit.</p>
<p>In the next few months we will be getting a major new server, and will be
migrating our data to it. This will allow us to serve more data,
and—drum roll please—will allow us to begin serving audio content
on the site. That’s right, in the next few months, we will begin getting oral
arguments from the circuit courts, and will be serving it directly to you on
the case pages. </p>
<p>We also have plans to revisit our search interface in order to add date
filtering and query building so look for that soon.</p>
<p>As always, we welcome your feedback and support, so don’t hesitate to get in
touch with us if you have any questions or suggestions.</p>Swimlane Diagram Generator Written in XSLT2010-09-06T23:26:18-07:00Mike Lissnertag:michaeljaylissner.com,2010-09-06:posts/2010/09/06/swimlane-diagram-generator-written-in-xslt/<p>For the past couple years, I’ve been wanting to make a swimlane diagram
showing all of my roommates and which room they lived in. I considered
drawing it out by hand with a charting program, but the idea of updating it
whenever somebody moved in or out seemed daunting, and I decided that the
best thing would be to make a program that could generate a chart from <span class="caps">XML</span>.
My new job at <a href="http://recommind.com">Recommind</a> requires that
I learn and use <span class="caps">XSLT</span>, so I took the opportunity to write an <span class="caps">XSLT</span> script
that converts the <span class="caps">XML</span> data to <span class="caps">HTML</span>, Javascript and <span class="caps">SVG</span>. </p>
<p>The final product looks something like this (anonymized with Presidential
info for good measure):</p>
<p><a href="https://michaeljaylissner.com/archive/swimlanes/dummy.html"><img alt="Diagram" src="https://michaeljaylissner.com/images/swimlane-screenshot.png" /></a></p>
<p><em>(click through for complete demo)</em></p>
<p>For the technically inclined: The program is an <span class="caps">XSLT</span> script,
which converts the <span class="caps">XML</span> into <span class="caps">HTML</span> and Javascript. The Javascript is then
interpreted by the <a href="http://raphaeljs.com/">Raphael library</a>,
which finally generates the <span class="caps">SVG</span> you see. It’s overly complex,
but it was a fun mis-mash of technologies to play with and the point was
learning new things as much as anything.</p>
<p>The transformation should work to make all kinds of swimlane diagrams,
so if you’re interested in the code, let me know.</p>Using Pylint in Geany2010-08-11T12:07:23-07:00Mike Lissnertag:michaeljaylissner.com,2010-08-11:posts/2010/08/11/using-pylint-in-geany/<p><a href="http://www.logilab.org/857">Pylint</a> is a tool that tells you
when your Python code is broken or when it has coding problems. As a newish
Python coder, using it has taught me a lot about conventions,
and has helped to make my code significantly cleaner. Enabling it in my <span class="caps">IDE</span>,
<a href="http://www.geany.org/">Geany</a>, makes it so that using it is
just another part of my development workflow. </p>
<p>Enabling Pylint in Geany is easy. Simply open Geany, and create a new build
command that uses <code>pylint -r no "%f"</code> as the command, and <code>(W|E|F):([0-9]+):
(.*)</code> as the error regular expression. After you’ve done this,
using this build command instead of saving your work will run Pylint on your
current file, showing you warnings, errors and fatal errors in red.</p>Project Idea: “Community-Curated Data Repository”2010-08-02T13:02:42-07:00Mike Lissnertag:michaeljaylissner.com,2010-08-02:posts/2010/08/02/project-idea-community-curated-data-repository/<p>There’s an interesting problem that I’ve run into a number of times that goes
like this: You want to start a new project studying <strong>X</strong> dump of
data, and you have a great idea of how to do <strong>Y</strong> with it. You
go download the data, but then you spend hours (days and weeks) manipulating
it, manicuring it, and stuffing it neatly into a database. The problem is that
the data is in <em>their</em> format, and they probably haven’t told you much
about it, much less put it into a useful format for other people. You have no
option but to figure it out, optimize it, make it queryable, etc, when really,
what you wish you were doing was simply <em>working with it</em>.</p>
<p>In other words, the data format and quality keeps you from working with the
data itself. I’ve run into this a number of times, most notably when trying to
work with the <a href="http://www.recovery.gov/FAQ/Pages/DownLoadCenter.aspx">Recovery
Data</a>. I’ve also had fun working with <a href="http://census.gov">census
data</a>, geographic data, and the list goes on. There are any number of useful
data sources that are provided by non-profits and government bodies, such as
population, economic, health, and agricultural data.</p>
<p>The solution to this problem is simple. A community needs to be built around
curating the data and providing it in useful formats, and a repository of some
sort needs to be made so people can download <em>and install</em> the data.
Similar ideas have come up a few times in various formats. Most notably,
Google has taken a stab at solving this with their <a href="http://www.google.com/publicdata/home"
target="_blank">public data sets</a>, and back around the turn of the
millennium, Debian <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=38902"
target="_blank">considered making a repository</a> for the data.</p>
<p>Neither of these solutions are good enough though. In Google’s case, they’re
providing a one-way street: They choose the data source, they tune-up the
data, and they provide the data. If there’s a source you don’t like, or if
it’s in a format you don’t like, well, too bad. In the case of Debian, they
decided not to go for it, but they should have. They had the right idea, but
weren’t prepared to give the idea its due.</p>
<p>The right solution will be one in which the community can suggest and debate
data sources, and which treats the data with the respect it deserves. I think
we’ll see a data source like this eventually, but I fear that until we do,
researchers around the world will be stuck doing unnecessary data transformations.</p>Haiku2010-08-02T13:02:17-07:00Mike Lissnertag:michaeljaylissner.com,2010-08-02:posts/2010/08/02/haiku-nectarine/<p>Gradients: red, white.
Explosion in the middle.
I am nectarine.</p>Lecturing at UC Berkeley2010-07-30T13:10:56-07:00Mike Lissnertag:michaeljaylissner.com,2010-07-30:posts/2010/07/30/lecturing-at-uc-berkeley/<p>This summer I’ve been busy with a number of things. One of them has been
teaching <a href="http://courses.ischool.berkeley.edu/i153-waim/su10/">Web Architecture and Information Management</a> at <span class="caps">UC</span> Berkeley
with two other guys from the School of Information. It’s been a <span class="caps">TON</span> of work
for not a whole lot of pay, but it’s been really interesting.</p>
<p>Since the three of us split up the work, I only have to do about four
lectures, but the class is two and a half hours long three times a week,
which is a lot of talking time. I imagine it’s not easy for the students to
be in the class that frequently either.</p>
<p>I’m giving lectures on the following topics:</p>
<ul>
<li><span class="caps">HTML</span></li>
<li>Search</li>
<li>Browsers</li>
<li>Privacy</li>
</ul>
<p>If you’re interested, I’ve posted my slides for these in the <a href="https://michaeljaylissner.com/projects-and-papers">projects and
papers</a> section of the site. It’s definitely true that the best way to
learn it to teach.</p>
<p>I’ve also been learning a little about how to get the class to participate
and be involved, but that’s probably the most challenging part. A lot of
the students know a lot about the material, and are pretty bored,
while others are seeing everything for the first time. It makes it pretty
tricky, but it’s working out as the class gets to know each other. We
started doing student presentations this week, and that has helped
everybody get a little more skin in the game.</p>The eBook Wars Continue, but The Gravy Train Hasn’t Arrived2010-07-24T17:15:23-07:00Mike Lissnertag:michaeljaylissner.com,2010-07-24:posts/2010/07/24/the-ebook-wars-continue-but-the-gravy-train-has-not-arrived/<p>Friends, I hate to be a wet towel, but do us all a favor: Don’t buy an ebook reader yet. I know, I know, Amazon just dropped the price of the Kindle by like 30% or something, which is very cool, but better things are coming if we vote with our feet.</p>
<p>The current eBook readers that are on the market are gaining steam rapidly, and, yes, the devices are actually pretty cool, but there are some real problems with what we’re being offered. Today, I read that <a href="http://www.crunchgear.com/2010/07/22/amazon-strikes-sweet-exclusive-deal-good-for-them-bad-for-consumers/">Amazon just signed an exclusivity deal with a publisher,</a> guaranteeing that the books by that publisher will only be distributed in paper and to the Kindle. This means that if you have any other eBook reader, you will have to buy the book in print, and won’t be able to download it.</p>
<p>You probably don’t think this is a big deal, just as you didn’t think buying CDs was a big deal ten years ago, but if you’re like me, these days you consider buying CDs to be old school, and would rather sit at home and buy the <span class="caps">MP3</span> over the Internet. Downloading MP3s has become easier than buying CDs, and similarly, in another couple years, buying eBooks will be most people’s preferred method of getting a book — that is, if we have certain freedoms when buying electronic books. </p>
<p>The deal Amazon just signed is going to prompt the competition to try to make similar deals with other publishers, with the result being a fractured market for eBooks. If you want this book, you have to have a Kindle. If you want that book, you have to have a Nook. Etc. Right now, that isn’t too annoying since eBooks aren’t yet that popular, but once eBooks become the norm, this is going to get more and more frustrating for all of us. </p>
<p>On top of this problem, there are other issues with the current eBook ecosystem. For me to switch to using and buying eBooks, I want to be able to do the same things that I can do with real books. I want to be able to share them with my friends. I want them to be in a format that I can keep for decades, read again at a later date, and give to my children. I want to be able to bookmark and underline things, and use them on multiple devices. </p>
<p>There are some movements towards these directions, but until Amazon stops with the exclusivity deals, and all the other eBook readers stop with their locked down devices, it looks like I’ll be voting with my wallet, and staying out of the game. </p>Project Idea: “User contribution aggregator”2010-06-28T14:20:41-07:00Mike Lissnertag:michaeljaylissner.com,2010-06-28:posts/2010/06/28/project-idea-user-contribution-aggregator/<p>As a frequent contributor to various open source projects, I find that I often want to know just how much I have contributed over the years, and to which projects. With enough time, I could figure out every bug that I’ve filed, every comment I’ve posted, every patch that I’ve submitted (there aren’t many), and every <em>contribution</em> I’ve made. But it would take me a <span class="caps">LOT</span> of effort, and after not too long, I’d be knee deep in records and notes of where I had been.</p>
<p>For people that contribute and work on such projects, knowing these kinds of things is valuable in forming an online reputation. This lets people know whether you are a helpful person, what you find interesting, and where your expertise may be. If you’re looking for work in such a field, it’s great to be able to point to a record of contribution, and say, “Yes, I am interested in this field, and I have a track record to prove it.” It creates competition amongst contributors.</p>
<p>But since the current eco-system of online contribution is so diversified, it becomes very challenging to determine a person’s online reputation. Some sites do admirable work building in algorithms to calculate the value of users, and this is good. But if you’re a person that has been interested in many applications, or that has been working on open-source projects for a long time, it’s more likely than not that such systems fall short.</p>
<p><strong>What we need is an aggregated, centralized system that uses public APIs to build global “meta”-reputations.</strong> This is likely not that hard, since many of the more-common systems for tracking user contributions already have APIs and <span class="caps">RSS</span> feeds for so many things. I’m sure it’s more complicated than simply plugging into an <span class="caps">API</span>, but creating such a system might not be that hard, and would create great value for the open-source community.</p>Project Idea: “Bug Trackers for Cities.”2010-06-22T16:59:02-07:00Mike Lissnertag:michaeljaylissner.com,2010-06-22:posts/2010/06/22/project-idea-bug-tracker-for-cities/<p>Well, today’s project idea was to post about the use of bug trackers for the management of city problems, but as it should turn out, I’m behind the curve on this one, so I’ll just explain the concept, and post some links to people that have live implementations or have already blogged about this. When I first researched this idea about six months ago, I didn’t find anything, but it seems that steam is building behind this idea.</p>
<p>Essentially, the idea is this: Cities have problems that citizens know about such as potholes, busted lampposts, gang activity, etc. They want to report these things to the city, but unfortunately reporting the problems by the phone or navigating the city websites is usually an awful, time-consuming, and unrewarding experience. It goes like this: First you get bumped from one department to another, eventually finding somebody who seems like they care. You tell them about the problem and feel satisfied that you’ve done your part, but you don’t know if it’s really in their system, or when it’s going to get fixed or anything. You hang up the phone, and the problem is still a part of your daily life. You know if you call again, you won’t be able to get an update, and you resign yourself to simply <em>hoping</em> that the problem will eventually be resolved. The next time you notice something that’s in need of fixing, you’re less likely to try to help. As this goes on, eventually the people that once cared no longer do, and getting residents of a city engaged in the problems in their community becomes increasingly difficult.</p>
<p>In the software world, there is a similar phenomenon, except instead of infrastructure and safety problems, the problems are errors in the software that need to be fixed – bugs. The solution to getting these bugs triaged and managed is to use what’s known as a <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Bug_tracking_system">bug tracker</a>. These systems allow the programmers behind the software to respond to problems that people find, and to triage them appropriately. In addition, they allow other people to vote on bugs, and help solve them. They allow careful prioritization of the bugs, and they allow visualizations of the bugs to be created such as the speed that they are fixed by department, the oldest bug in the system, etc.</p>
<p>If such as system were used for citizens to track problems they find in their city, it would have all kinds of benefits, and indeed a few such systems have been created. The most popular that I have found is called <a href="http://seeclickfix.com/">SeeClickFix</a>, and looking at <a href="http://seeclickfix.com/berkeley">the page for Berkeley</a>, it seems like it is a system that is at least used by Berkeley residents. Another popular one is <a href="http://www.fixmystreet.com/">http://www.fixmystreet.com/</a>. Of course, for the system to be truly effective, it would have to be endorsed by the city itself, and used by its employees as well, which is something I have yet to find an example of.</p>
<p>Other people have also <a href="http://speedbird.wordpress.com/2010/04/22/frameworks-for-citizen-responsiveness/">written about this idea</a>, and <a href="http://portlandwiki.org/CivicApps#Notes_from_CivicApps_Meetup_at_Open_Source_Bridge_2010">Portland appears to be considering it</a>, so it seems this idea is ripe on the vine and ready to be picked. </p>
<p>The question now is what will it take to implement it correctly, and what system will be the one that gains usage. I fully expect to see more cities using this type of technology in the next few years. </p>Project Idea: “Breaking the Cycle: Isolating Easy Solutions to the Bike Theft Problem”2010-06-15T11:44:13-07:00Mike Lissnertag:michaeljaylissner.com,2010-06-15:posts/2010/06/15/project-idea-breaking-the-cycle-isolating-easy-solutions-to-the-bike-theft-problem/<p>I’ve decided that I should start blogging my project ideas so that they may be aired more widely in public. I have amassed quite a number of these, and have been sitting on them for some time, but more and more, it’s looking like I won’t have time to get to all of my ideas. Starting today, I’ll be writing out ideas that I have had. If you have project ideas of your own that you think might be interesting to share here, let me know, and we’ll get yours posted too. If you’re interested in pursuing one of these ideas, go for it!</p>
<p>And so, without further ado, I present…….</p>
<p><strong>Breaking the Cycle: Isolating Solutions to the Bike Theft Problem</strong>
This is something that I have been thinking about for a good while, but considering more seriously as of late. Basically, what it amounts to is 90% a social/political solution, and 10% a programming and system design solution.</p>
<p>Here’s the problem: Last year, during the recession, <a href="http://nbda.com/articles/industry-overview-2009-pg34.htm">about 15 million new bikes were sold in the United States</a>, and according to the <span class="caps">FBI</span>, <a href="http://www.fbi.gov/ucr/cius2008/data/table_07.html">in 2008, about 220,000 bikes were reported stolen</a>. Obviously, both of these numbers are suspect. The former doesn’t include the many thousand <em>used</em> bikes that were purchased during 2009, and the <span class="caps">FBI</span>’s number clearly doesn’t include the vast majority of the bikes stolen. Other estimates of the number of bikes stolen are much higher than the reported number. One estimate is that more than five million bikes are stolen every year in the <span class="caps">U.S.</span> Another estimate from the <a hrerf="http://www.icpsr.umich.edu/NACJD/NCVS/">National Crime Victimization Survey</a> is less pessimistic, with a 2006 estimate of 1.3 million stolen bikes per year. Despite these differences in numbers, and the problems of under reporting, the point is clear that this is a major problem in the United States.</p>
<p><strong>Solutions: Honey pots and databases</strong>
There are at least three simple and cost-effective solutions to this problem. I’ll start with the most fun one, which is to place a <span class="caps">GPS</span> unit deep in the bowels of a nice bike, and to poorly lock up that bike in a high theft area. This, in theory, will tempt thieves to steal the bike, and will lead to their arrest. Such sting operations have been done in the past, and have had great success, since many of the people stealing bikes are mass offenders, that are also wanted for other illegal activity [<a href="http://www.popcenter.org/problems/bicycle_theft/summary/#r7">ref</a>]. There are worries that this may amount to inducement to steal (and thus may be illegal), and also that linking the person that has the bike after the fact with the person that stole the bike in the first place may be difficult. But both of these are fairly easy problems to solve, if the operation is done carefully.</p>
<p>The second solution to this problem is to create a <a href="http://www.lojack.com/">LoJack system</a> for bikes. As far as I can tell, such as system has not yet been created. As was mentioned in the <a href="http://freakonomics.blogs.nytimes.com/2010/06/08/what-car-thieves-think-of-the-club/">freakonomics</a> blog, such a system creates a <a href="http://en.wikipedia.org/wiki/Externality#Positive">positive externality</a>: Your placing a <span class="caps">GPS</span> device in your bike also reduces the theft of other bikes in the area by creating a scare that those bikes might have the system as well. There are challenges in placing such a system in a bike, such as battery life and getting the satellite signal in and out of the bike, but again, these can be worked out. There is demand for such a system: When working on another project related to bike theft, I asked a number of people about LoJack for bikes, and they were all excited about creating and using such a system.</p>
<p>The third, and perhaps most important, step in breaking the bike theft problem is to create a better national registry of bikes. At present, there are a number of registration systems. Cities have implementations, there is a <a href="http://www.nationalbikeregistry.com/">for-profit organization that does registrations nationally</a> (this is where my bikes are registered), and there is even a <a href="http://stolenbicycleregistry.com/index.php">registry of bikes that have been stolen</a>. <strong><em>What we need, is a single national registry</em></strong>. It has to be good, and it has to be used. All new bikes sold in the United States need to be entered into the system before the sale, and if somebody is buying a new bike, they need to first look it up in the system. This is a <em>cultural</em> shift, and can be brought about in a number of ways. For example, sites like Craigslist and E-Bay can encourage linking to the system when bikes are sold, manufacturers and bikes shops can be required (legally) to check the system for the bike, a paperwork trail can be created and enforced, similar to the system for car sales. These are all ideas for such a system, but the point is, that it needs to be built, and it needs to be supported. Some states already have laws relating to bike registration, but they aren’t enforced. The assumption needs to shift from “This bike isn’t registered, oh well” to “This bike isn’t registered in your name, it is not yours.”</p>
<p><strong>Conclusions</strong>
Some clear conclusions emerge when looking at this problem. First, bike theft is huge. Millions of bikes are stolen each year. And, judging by the number of thefts that are reported and trickle up to the <span class="caps">FBI</span>’s database, people don’t feel that reporting the theft is worth the effort. If we assume that five million bikes are stolen each year, and that of those, 250,000 are reported, that’s a reporting rate of only 5%. </p>
<p>A second conclusion we can draw from the above is that this problem is <em>solvable</em>. Using social and technical approaches, this can be solved quickly and relatively inexpensively. Furthermore, it’s quite likely that many of the solutions to this problem can be profitable for both the organization implementing it, as well as the bikers whose bikes are no longer stolen.</p>
<p>In parting, I will conclude by pointing you to the best resource I’ve found on this problem, which is the Center for Problem-Oriented Policing’s report on bicycle theft. It’s brief, to the point, and informative. <a href="http://www.popcenter.org/problems/bicycle_theft/1">Enjoy</a>.</p>
<p><strong>References</strong>
A lot of the information for this post was gleaned from the following excellent resources:</p>
<ol>
<li><a href="http://www.popcenter.org/problems/bicycle_theft">Problem-Oriented Guides for Police, Problem-Specific Guides Series, Guide No. 52: Bicycle Theft (Sponsored by the Department of Justice)</a></li>
<li><a href="http://www.nationalbikeregistry.com/">The National Bike Registry (A for-profit organization)</a></li>
<li><a href="http://nbda.com/articles/industry-overview-2009-pg34.htm">National Bicycle Dealers Association</a></li>
<li><a href="http://www.fbi.gov/ucr/cius2008/index.html">Federal Bureau of Investigation Uniform Crime Reporting Program</a></li>
<li><a href="http://www.icpsr.umich.edu/NACJD/NCVS/">National Crime Victimization Survey</a></li>
</ol>Announcing CourtListener.com2010-05-01T20:08:16-07:00Mike Lissnertag:michaeljaylissner.com,2010-05-01:posts/2010/05/01/announcing-courtlistener/<p>I’m elated to announce today that I am officially taking the ropes of my
final project and letting it loose into the wild. It’s been seven months
since development on it officially started and finally,
the beta version is done and <a href="https://michaeljaylissner.com/pdfs/courtlistener-final-report.pdf">the report</a> is released.</p>
<p>If you haven’t been following along, the <a href="http://courtlistener.com">project
itself</a> is an open source legal research tool which allows anybody to
keep up to date with federal precedents as they are set by the 13 Federal
Circuit courts. Right now, it has <a href="http://courtlistener.com/coverage/">more
than 130,000 documents in its corpus</a>,
including almost all of the Supreme Court record dating back to 1754. Every
day it downloads the latest documents within about a half hour of when
each court publishes them.</p>
<p>One thing we’ve focused on while building the site has making it as useful
as possible for as many people as possible. Since not everybody likes
getting updates in their inbox, we’ve also tied the search engine in with
an Atom feed generator so that you can search for whatever you want,
and then follow updates in your feed reader.</p>
<p>Everything we’ve built uses a powerful boolean search engine on the backend.
At present, there are <a href="https://www.courtlistener.com/search/advanced-techniques/">a ton of boolean connectors</a> that you can use on our
site to search our corpus or create alerts and feeds. Unlike full text search
that most people are familiar with, boolean search allows incredibly complex
queries, such as every document mentioning Attorney General Holder that is
published in the Third Circuit of Appeals (<a href="http://courtlistener.com/search/results/?q=%40court+ca3+%40doctext+holder&search=">@court ca3 @doctext holder</a>),
or perhaps every document that mentions “Roe” and “Wade” within ten words of
each other (<a href="http://courtlistener.com/search/results/?q=%40doctext+%22roe+wade%22~10&search=">@doctext “roe wade”~10</a>).</p>
<p>But that’s not all. Because we also want you to be able to use this
efficiently during your day-to-day searching,
we’ve built an <a href="http://courtlistener.com/tools/">add-on that will
work in most browsers</a>, which allows you to search CourtListener.com
without first going to our homepage.</p>
<p>You can also browse all of documents in our corpus,
or you can go to the details page for an opinion, where you can read the
text of its body without having to download a <span class="caps">PDF</span> and crank up Adobe Acrobat.</p>
<p>As I mentioned earlier, this project has been designed as an open source
project, so if you’re looking for something to contribute to,
look no further. We have a very active <a href="https://github.com/freelawproject/courtlistener/issues">bug list</a> where you can dip your
toes in, or if you prefer something meatier, we can cook something up
specifically for you.</p>
<p>I’ve greatly enjoyed working on this project so far,
and I’d love to get more people using it, working on it,
and recommending it to their friends. We’re already planning version 1.0,
so drop me a line if you’re interested in helping out, otherwise, <a href="https://www.courtlistener.com">go check it
out already</a>, and see all that it has to offer!</p>In consideration of Apple2010-05-01T17:56:08-07:00Mike Lissnertag:michaeljaylissner.com,2010-05-01:posts/2010/05/01/in-consideration-of-apple/<p>There’s some news circulating today that Steve Jobs <a href="http://hugoroy.eu/jobs-os.php">emailed an intern at the Free Software Foundation</a> and informed him that:<blockquote>A patent pool is being assembled to go after Theora and other “open source” codecs now.</blockquote></p>
<p>This doesn’t seem too surprising, and the email seems pretty legit, so I was pretty frustrated to see that Apple may be doing this. I’ve been getting a reputation among my friends for demonizing Apple, so I thought I’d take a moment and lay down some of the reasons that they’ve gotten the brunt of my technology-related ire. A lot of people see them as a great and open company with a great product, but more and more, they are locking in users, and creating products and technologies that are just as bad, if not worse than, the lock-in technologies that Microsoft used back in the day.</p>
<p>Here’s a short list of the things that Apple has recently done that has been for the worse for technological progress and for the worse for users. I write this not just to make a list, but to point out that Apple has become just as bad as the other companies before them. I fully admit, their hardware is great, but at this point, there can be little doubt that they are doing bad for technology and hindering the forward motion of progress.</p>
<ol>
<li><strong>The power cord.</strong> As I understand it, Apple invented (or at least patented) the really cool magnet on a cord thing. It would be great if this were offered on all laptops, but because of their patent, only Apple laptops have this feature. This is an example of a company using a patent in a way that only helps their customers. But what’s worse is that because they have this patent, they can mark up the prices of their replacement cords. They’re nice, but are they really $80 nice? Normally, you could get a replacement cord from anybody for your laptop, but because of the patent, you have to buy theirs. For $80.</li>
<li><strong>The requirement to own a Mac to develop for a Mac.</strong>To develop for a Mac, you have to use XCode, and to use XCode, you have to have a Mac. This is another case of Apple finding a way to lock in its customers and developers. No other explanation of this that I know of holds water.</li>
<li><strong>Gizmodo, an iPhone and police.</strong> It appears that Apple has sent police after a blogger that purchased a lost v4 iPhone. The verdict is not yet in as to whether the blogger’s actions were legal or not, but he did have his house searched, and all of his computers taken by the police. All of this because he wrote a story about an iPhone that wasn’t yet released. He was able to do this because an Apple employee goofed by leaving the phone at a bar, so it seems like the company should simply chalk it up to their mistake and move on. Instead, they send police.</li>
<li><strong>iPod lock-in, lack of compatibility, etc.</strong> iPods are the worst when it comes to using them as general purpose music players. You want to move your music from one computer to another with an iPod? Oooh…I don’t know if you can do that. You want to use <span class="caps">USB</span> cable with that? Oh, no, we have a /special/ cable for that. You want to dump your MP3s onto the device outside of iTunes? No, no, no, you have to use iTunes or else it won’t work. Etc. Anybody who has owned an iPod for any length of time knows the pains of which I speak.</li>
<li><strong>iPad <span class="caps">VGA</span> is a private <span class="caps">API</span>.</strong> It appears that in order to have an application on the iPad use an external monitor or projector, you have to get Apple’s permission first, because the <span class="caps">VGA</span> <span class="caps">API</span> is not public. This means that Apple has a monopoly on which applications can be used in this way. The result: More lock in for Apple, and less power and utility for users.</li>
<li><strong>Psystar and Palm.</strong> Both of these companies tried to leverage the Apple platform to their advantage. Both were hit hard when Apple locked them out. Both of these outcomes were bad for consumers.</li>
<li><strong>Music store lock-in.</strong> I don’t know if they’re only selling MP3s now or if they are still doing DRMed music, but their DRMed music has been a pain for a number of people I know, since it can only be played through iTunes. Again, this creates more lock in, since users can’t take their music with them.</li>
<li><strong>Suing <span class="caps">HTC</span> over multitouch.</strong> Apple is now suing <span class="caps">HTC</span> over their use of Apple’s patented multitouch interface technique. This is another case of Apple using a software patent for the worse. Which would you prefer: only Apple having multitouch phones/computers, or every company making them?</li>
</ol>
<p>I don’t follow Apple news as closely as a number of people I know, so I’m interested in hearing other people’s thoughts about all this. From my perspective, Apple has become a very secretive company that is incredibly willing to sue and patent. It doesn’t seem like they want to help people or innovate so much any more. It seems more like their goal is making money, which is an important goal, but doing so should not be in conflict with taking care of those people that buy your products as well as those people who do not.</p>How to Recover a Broken Drupal Install Resulting from a Full Hard Drive2010-04-26T11:26:38-07:00Mike Lissnertag:michaeljaylissner.com,2010-04-26:posts/2010/04/26/recover-a-broken-drupal-install-from-full-hd/<p>This is amazingly, the second time I’ve filled my server’s hard drive, and the results are becoming predictable. One moment, things are working fine, the next, cron alerts you with something like this:</p>
<div class="highlight"><pre><span class="n">Table</span> <span class="p">[</span><span class="n">tablename</span><span class="p">]</span> <span class="n">is</span> <span class="n">marked</span> <span class="n">as</span> <span class="n">crashed</span> <span class="n">and</span> <span class="n">last</span> <span class="p">(</span><span class="n">automatic</span><span class="o">?</span><span class="p">)</span> <span class="n">repair</span> <span class="n">failed</span> <span class="n">query</span>
</pre></div>
<p>This is a bad warning to get, and running df on the server confirms that indeed my hard drive is full. Fixing this is a matter of doing some minor MySQL hacking to clean up all the tables:</p>
<div class="highlight"><pre>mysql -u<span class="s1">'drupalusername'</span> -p
> use drupal_DB_name;
> check table tablename;
> repair table tablename;
</pre></div>
<p>Then, simply iterate this for each broken table reported by cron.php, and you will soon have a repaired <span class="caps">DB</span>. Whew.</p>Berkman Broadband Study2010-03-15T22:18:06-07:00Mike Lissnertag:michaeljaylissner.com,2010-03-15:posts/2010/03/15/berkman-broadband-study/<p>Last month the Berkman Center at Harvard, under the guidance of Yokai Benkler, published a <a href="http://cyber.law.harvard.edu/pubrelease/broadband/">200+ page document</a> describing the broadband situation in the United States. The document is an absolute must read if you use the Internet (and you do if you’re reading this), but before I share some real analysis of it (another time and post), I just wanted to share this quote discussing the best network bundle available in the world today:<blockquote>[The best] currently available [bundle] includes 100Mbps service to the home, digital <span class="caps">TV</span> with <span class="caps">HD</span> and the ability to create your own private television channel for others to watch on their <span class="caps">TV</span> sets, unlimited voice telephony throughout France and to 70 other countries, including the U.S., and secure nomadic Wi-Fi access wherever one’s laptop or Wi-Fi-enabled phone is within range of the Freebox of any other Free subscriber in the country (24% of the French market), for <span class="caps">USD32</span>.59 <span class="caps">PPP</span> a month.</blockquote></p>
<p>Compared to the $40 I spend per month for a tenth that Internet speed and nothing else, my mind is blown.</p>Designing the Final Project2010-03-13T18:28:28-08:00Mike Lissnertag:michaeljaylissner.com,2010-03-13:posts/2010/03/13/designing-the-final-project/<p>Over the past week, I’ve been working to create scrapers for each of the 13
federal appeals courts. Last night I finally finished the last of them,
so today I’m moving on to the design of the site. Design is always much
better when people work in a team, so I’m putting these designs here so
others can look at them and give me feedback. Please, please do!</p>
<p>So far, I’ve sketched out four of the major pages that the site will have. A
user’s will begin using the site on its homepage. Here,
they will be given few options. Basically, they can login,
register for an account, make a search, or read one of the ancillary pages
such as the “About” or “Privacy” page:</p>
<p><img alt="No alt" src="/images/final-project/1.jpeg" /></p>
<p>Also, note the advanced button under the search field. When this is
clicked, it expands to show the advanced search queries that the site will
support, as you can see on the next page.</p>
<p>If people are logged in, their homepage becomes the “Create new alert page,
” which you can see below. For now, this allows users to create very
complicated queries by hand. In the future, it would be nice to build their
queries for them. By default, the advanced section will be collapsed,
but in the wire frame, I sketched it out. Also, if users click on “More
details,” (in the bottom-right of the “Advanced” box) they can get
explanations and examples of all the connectors shown.</p>
<p><img alt="No alt" src="/images/final-project/2.jpeg" /></p>
<p>From that page, they would normally be redirected to their settings page,
where their alerts are listed. Here, they can edit and see their alerts.</p>
<p><img alt="No alt" src="/images/final-project/4.jpeg" /></p>
<p>Clicking the “Edit” button takes a user back to the “create alert” page,
except that it will be pre-filled with the alert they’re trying to edit. </p>
<p>Of course, users can also edit their profile by clicking on the settings
link on the top of every page . This page isn’t too special,
though it does have a couple unusual features, such as the bar memberships
the user is a part of and whether they prefer <span class="caps">HTML</span> or plain text emails (not
shown in the below version - sorry).</p>
<p><img alt="No alt" src="/images/final-project/3.jpeg" /></p>
<p>And that’s it for now. I’d <span class="caps">LOVE</span> any feedback anybody has on these. Typing
this up, I’ve already come across a couple problems:</p>
<ul>
<li>Users currently get to their alerts by clicking settings - that ain’t intuitive.</li>
<li>The about page is pretty hard to find. It may need more emphasis.</li>
</ul>
<p>I’m sure there are more problems I’m not seeing. That’s why I need your help
. What am I missing? What should I change? What’s stupid? What’s outmoded?</p>Exploratory Analysis of Service Recipients of the Contra Costa County Community Services Bureau2010-02-26T17:45:19-08:00Mike Lissnertag:michaeljaylissner.com,2010-02-26:posts/2010/02/26/exploratory-analysis-of-service-recipients-of-community-services-bureau/
<h2 id="introduction-and-background">Introduction and Background</h2>
<p>As part of my <a href="http://courses.ischool.berkeley.edu/i247/s10/schedule.html">information visualization</a> class at the <a href="http://ischool.berkeley.edu"><span class="caps">UC</span> Berkeley
School of Information</a>, I have completed an exploratory analysis of the
characteristics of the children and families that have received services
from the Community Services Bureau (<span class="caps">CSB</span>) of the Contra Costa County
Employment and Human Services Department (<a href="http://ehsd.org"><span class="caps">EHSD</span></a>). As indicated below,
at any given time the Bureau provides subsidized childcare services to
approximately 2,700 children aged zero to five that live in and around
Contra Costa County. When granting services, priority is given to the
neediest families and children, and thus the data should not be considered
a representative sample of the county at large. With that in mind however,
extrapolations could likely be made by comparing the number of children in
a geographic area against the number of children analyzed herein.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/Residential Density of Families2.png"/></p>
<p>The data that is used was exported from the Bureau’s <q><span class="caps">COPA</span></q> database,
pseudo-anonymized by the Bureau,<a name="ref1"></a><a href=".#fn1"><sup>1</sup></a>
and then provided to me for this research. The <span class="caps">COPA</span> database is an online
tool into which county workers have input vast quantities of personal
information about the children and families who apply for and receive
services. It has been in use since approximately 2003,
and at present contains records for approximately 22,500 children. Of these
children, approximately 6,600 have been given a series of developmental
assessments by county employees. These assessments consist of 41 measures,
which attempt to plot each child’s development as he/she progresses in
the program. For the explorations I have completed here,
I have averaged the scores for these measures, thus approximating the
child’s developmental standing shortly after enrolling in the program.</p>
<p>As a former employee of this Bureau, I am familiar with this data, however in
the past I have not completed exploratory research as broadly as I have here.</p>
<h2 id="hypotheses">Hypotheses</h2>
<p>This is a very rich data source containing dozens of measures about both
the children and the families, and I have had a difficult time determining
how best to approach forming my hypotheses. After looking at many of the
measures that were available in the dataset, I have formed the following
three hypotheses:</p>
<ol>
<li>An increase in parental involvement and/or stability will result in improved developmental scores;</li>
<li>Children with better language skills will have higher developmental scores; and</li>
<li>Gender and race/ethnicity will have marginal effects on developmental scores, but the presence, absence or suspicion of a disability will.</li>
</ol>
<h3 id="hypothesis-1-correlation-of-parental-involvementstability-and-developmental-scores">Hypothesis 1: Correlation of Parental Involvement/Stability and Developmental Scores</h3>
<p>In testing this hypothesis, I have used a number of measures as proxies to
the level of parental involvement that may be present in a child’s life.
The first of these measures is the presence or absence of a secondary
caregiver. Although I anticipated that the presence of a secondary
caregiver would result in higher scores, this has only been true to a
negligible degree.</p>
<p>This could be a result of the eligibility process for childcare services,
which prioritizes a low ratio of family size to dollars earned in a family.
This priority might create an incentive to report that there is a secondary
caregiver in the child’s life, even when there is not. A less pessimistic
explanation could be that a child is able to develop equally well
regardless of whether they have one or two caregivers.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/By Secondary Caregiver.png"/></p>
<p>In a similar vein, I examined if there was a correlation between family
size and the developmental scores of a child. As can be seen below,
no correlation seems to exist in this dataset. An explanation for this
could be that the added difficulty a caregiver might experience taking care
of a larger family might be equally offset by the additional attention and
stimulus a larger family provides to a child.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/Number in Household.png"/></p>
<p>Another potential indicator of home stability could be age of the parent,
since older parents are more likely to have stable lives. As indicated
below, as the parental age increases, so too do the scores of their children.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/PC Age.png"/></p>
<p>Teen parenting is known to be very difficult, but of the 41 teen parents
that were in the data set, their children do not score significantly worse
on the developmental measures. An interesting fact that emerged during this
analysis was that there were no teen-aged male primary caregivers in the
data set of more than 6,000 primary caregivers. </p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/Teen Parent, PC Gender.png"/></p>
<p>A final test that I ran on this data was to see if there was a correlation
between the number of hours that a primary caregiver works and the
developmental results for a child. Again, although I had expected the
children of parents working as many as 12 hours/day to have lower
developmental scores than those of parents working fewer hours,
this was not borne out by the data. Instead, there is a downward trend as
the primary caregiver worked more hours until they began working <em>more
than</em> eight hours/day, at which point developmental scores begin to
rise again.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/PC Hours Per Day 2.png"/></p>
<p>Ultimately, and much to my surprise, it appears that my hypothesis —
that an increase in parental involvement results in a more developmentally
advanced child — is not borne out by the data. With the exception of
the age of the primary caregiver, none of the proxies above seem to have
strong correlations with improved developmental scores.</p>
<h3 id="hypothesis-2-increased-language-skills-result-in-faster-childhood-development">Hypothesis 2: Increased language skills result in faster childhood development</h3>
<p>This hypothesis was formed in the recognition that many children struggle
in class both socially and pedagogically as a result of speaking one
language at home and another at school. In testing this hypothesis,
I looked at two measures: (1) the English skill of the child,
as described by their primary caregiver, and (2) the geographic origin of
the child’s primary language.</p>
<p>In looking at the child’s English skill, as described by their primary
caregiver, a very clear trend emerges, confirming this hypothesis: As
English skills improve, children score higher on developmental assessments.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/English Skill.png"/></p>
<p>When the primary languages are broadly binned by geographic origin,
clear trends emerge in the average assessment results of the children.
Although the sample sizes are small for some of the bins,
it appears that children with African and European languages on average
have lower developmental scores than those children that speak Spanish,
English, Middle Eastern or Asian languages.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/Language Origin.png"/></p>
<h3 id="hypothesis-3-gender-and-raceethnicity-will-not-affect-the-development-of-the-children-but-disability-status-will">Hypothesis 3: Gender and race/ethnicity will not affect the development of the children, but disability status will.</h3>
<p>Although in many cases, race/ethnicity and language are tightly coupled,
my hypothesis is that race/ethnicity will not be a significant factor in
the development of the children. In the chart below,
I have compared race and ethnicity of children that have English and
non-English as their primary language. This demonstrates that for children
for whom English is their primary language, race does not play a role in
their developmental advancement. For those children for whom English is
their second language, significant differences can be seen between races,
but this finding mirrors that above, with non-English speakers performing
worse on the developmental measures.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/By Race and Language.png"/></p>
<p>Consistent with my hypothesis, differences between child gender and
developmental scores can also be considered negligible.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/By Gender.png"/></p>
<p>I decided to examine the average development of the children against their
disability status in order to determine the validity of the developmental
assessments themselves. Since children that have diagnosed disabilities
(indicated below as IFSPs or IEPs), should have lower developmental scores,
this should serve as a useful proxy for the validity of the assessment. </p>
<p>The data is consistent with this hypothesis, but because the assessments
are generally administered by county workers that are aware of the
disability status of the children, it remains unclear whether this
contributes to the extreme results shown below.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/ehsd/By Disability Status.png"/></p>
<h2 id="tool-analysis">Tool Analysis</h2>
<p>For this research, I have used a number of tools,
few of which worked particularly well. I began this work by doing a survey
of the information exploration tools that are natively available on the
Linux <span class="caps">OS</span>. Unfortunately, this search ended quite quickly. I discovered a
number of tools that can be used for visualization of data,
particularly scientific visualization, but I was unable to find anything
that had the data <em>exploration</em> features found in the Windows-based
Tableau software.</p>
<p>Because it is a $1,000 Windows-only product, I was hesitant to spend a lot
of time learning the features of Tableau, but since it was my only data
exploration option, I used it for the bulk of this assignment,
and I have found it to be fairly intuitive and useful. I have struggled a
number of times to do things that Tableau does not seem to support (such as
custom gradients for color palettes), or to figure out why some right-click
menus have entries that others lack. The use of right-click menus as a
primary form of interaction has been a particularly difficult part of
learning Tableau. I can right click anywhere on the chart I am designing,
and more often than not, the menu that pops up will have features that I
had not seen before, and sometimes, which I cannot find again. Similarly,
after having spent a significant amount of time using Tableau,
I am still not always certain what double-clicking certain things will do.</p>
<p>A better system for this type of interaction is used by Gnumeric,
which is a Linux-based spreadsheet application. In it,
you can right-click a visualization, and it will allow you to edit
<em>all</em> of its properties, which are divided according to axis, plot,
data source, etc. With this form of interaction, it is very easy to find a
setting a second time, and all of the settings are located in one central
location, saving you from having to remember where to click in various charts.</p>
<p>For this project, I had to perform data manipulation on many of the fields
in the data that was provided to me. In addition to dates that Tableau could
not recognize, I also had to use vlookup and averaging functions in my
spreadsheet application to combine the child and family characteristics
with the assessment results. I also had to complete data de-duplication,
since many of the children had completed many assessments over their years
receiving services. In these cases, I used filters to choose only the first
assessment completed by the children, since that should be a better proxy
of their development before receiving services from the Bureau.</p>
<p>Completing this data preparation work was complicated by major problems of
<span class="caps">RAM</span> scarcity. Because Tableau only works in Windows,
I booted it up in a virtual machine, and provided it with a quarter of the
<span class="caps">RAM</span> on my system. While this was sufficient for it to run,
because I was initially working with a data set of approximately 22K
records, I required quite a lot of <span class="caps">RAM</span> to do my own computations. Due to a
rather unfortunate bug which crashes OpenOffice Spreadsheet when it runs
out of <span class="caps">RAM</span>, I had to complete all of my data manipulation while the virtual
machine was not running. This made task-switching particularly daunting.
In an effort to avoid this problem, I used Gnumeric for some of the
calculations, but, while it doesn’t crash when it runs out of <span class="caps">RAM</span>,
it is poorly optimized and required tens of minutes for some computations.
Ultimately, in order to manipulate the data, I used a combination of
OpenOffice Spreadsheet, Gnumeric, and command line tools (e.g. uniq, sort, awk).</p>
<h2 id="footnotes">Footnotes</h2>
<p><a name="fn1"></a><a href=".#ref1">1.</a> Pseduo-anonymization is the
process of using unique identification numbers to identify records within a
database. It is distinct from true anonymization because it does not
preclude re-identification of the records by way of piecing various parts
of it together. True anonymization can be achieved by aggregation of such
data, as I have done here.</p>Using Revision Control on a Django Project Without Revealing Your Passwords2010-02-24T17:15:54-08:00Mike Lissnertag:michaeljaylissner.com,2010-02-24:posts/2010/02/24/using-revision-control-on-a-django-project-without-revealing-your-passwords/<p>Just a quick post today, since this took me way too long to figure out. If you have a django project that you want to share without sharing the private bits of settings.py, there is an easy way to do this. </p>
<p>I tried for a while to to set up mercurial hooks that would strip out my passwords before each commit, and then place them back after each commit, thus avoiding uploading them publicly. This does not work however because all of the mercurial hooks happen after snapshots of the modified files have been made. So you can edit the files using a hook, but your edits will only go into effect upon the <strong><em>next</em></strong> check in. Clearly, this will not do.</p>
<p>Another solution that I tried was the mercurial <a href="http://mercurial.selenic.com/wiki/KeywordExtension">keyword extension</a>. This could work, but ultimately it does not because you have to remember to run it before and after each commit — something I know I’d forget sooner or later.</p>
<p>The solution that <strong><em>does</em></strong> work is to split up your settings.py file into
multiple pieces such that there is a private file and a public file. I
followed the instructions <a href="http://code.djangoproject.com/wiki/SplitSettings#UsingalistofconffilesTransifex">here</a>, with the resulting code looking being
checked in <a href="https://github.com/freelawproject/courtlistener/blob/master/alert/settings.py">here</a> and <a href="https://github.com/freelawproject/courtlistener/blob/master/alert/settings/10-public.py">here</a>. There is also a file called
“20-private.py” which is not uploaded publicly, and which contains all the
private bits of code that would normally be found in settings.py. Thus, all of
my settings can be found my django, but I do not have to share my private ones.</p>Converting PDF Files to HTML2010-02-06T15:03:18-08:00Mike Lissnertag:michaeljaylissner.com,2010-02-06:posts/2010/02/06/converting-pdf-files-to-html/<p>For my final project, we are considering posting court cases on our site, and so I did some work today analyzing how best to convert the <span class="caps">PDF</span> files the courts give us to <span class="caps">HTML</span> that people can actually use. I looked briefly at google docs, since it has an amazing tool that converts <span class="caps">PDF</span> files to something resembling text, but short of spending a few days hacking the site, I couldn’t figure out any easy way to leverage their technology in any sort of automated way. </p>
<p>The other two tools I have looked at today are <a href="http://www.foolabs.com/xpdf/">pdftotext</a> and <a href="http://pdftohtml.sourceforge.net/">pdftohtml</a>, which, not surprisingly, do what their names claim they do. Since we’re going to be pulling cases from the 13 federal circuit courts, I wanted to figure out which method works best for which court, and which method will provide us with the most generalizable solution across whatever <span class="caps">PDF</span> a court may crank out.</p>
<p>The short version is that the best option seems to be:</p>
<div class="highlight"><pre>pdftotext -htmlmeta -layout -enc <span class="s1">'UTF-8'</span> yourfile.pdf
</pre></div>
<p>This creates an html file with the text of the case laid out best as possible, some basic html meta data applied, and the <span class="caps">UTF</span>-8 encoding applied. </p>
<p>Before coming to this conclusion though, I looked at two settings that pdftohtml has. With the -c argument, it can generate a ‘complex’ <span class="caps">HTML</span> document that closely resembles that of the original. Without the -c argument, it will create a more simple document. Although the complex documents are rather impressive in appearance, they’re abysmal when it comes to the quality of the <span class="caps">HTML</span> code that is generated. For an example, look at the source code for this <a href="/archive/shared/pdf-to-html-test/pdftohtml-complex-noframes-noimages-2ndCircuit-08-6301-cv_opn.html">this file</a>. If, on the other hand, the -c argument is not run, and the simple documents are generated, the appearance of the final product is worse than the simple text documents that are created by pdftotext. Check out <a href="/archive/shared/pdf-to-html-test/pdftohtml-simple-noframes-noimages-2ndCircuit-08-6301-cv_opn.html">this one</a> for example.</p>
<p>For thoroughness, here is a table containing the results from this test.
<table>
<tr>
<th>Court</th>
<th>pdftotext</th>
<th>pdftohtml complex</th>
<th>pdftotext simple</th>
<th>Original <span class="caps">PDF</span></th>
</tr>
<tr>
<td>1<sup>st</sup></td>
<td colspan="4" align="center">The first circuit publishes in <span class="caps">HTML</span> Format by default</td>
</tr>
<tr>
<td>2<sup>nd</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-2ndCircuit-08-6301-cv_opn.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-2ndCircuit-08-6301-cv_opn.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-2ndCircuit-08-6301-cv_opn.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/2ndCircuit-08-6301-cv_opn.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>3<sup>rd</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-3rdCircuit-091225p.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-3rdCircuit-091225p.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-3rdCircuit-091225p.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/3rdCircuit-091225p.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>4<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-4thCircuit-082373.P.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-4thCircuit-082373.P.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-4thCircuit-082373.P.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/4thCircuit-082373.P.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>5<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-5thCircuit-07-30815-CR0.wpd.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-5thCircuit-07-30815-CR0.wpd.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-5thCircuit-07-30815-CR0.wpd.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/5thCircuit-07-30815-CR0.wpd.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>6<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-6thCircuit-10a0023p-06.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-6thCircuit-10a0023p-06.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-6thCircuit-10a0023p-06.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/6thCircuit-10a0023p-06.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>7<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-7thCircuit-UZ1FFY4T.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-7thCircuit-UZ1FFY4T.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-7thCircuit-UZ1FFY4T.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/7thCircuit-UZ1FFY4T.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>8<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-8thCircuit-071306U.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-8thCircuit-071306U.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-8thCircuit-071306U.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/8thCircuit-071306U.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>9<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-9thCircuit-07-55393.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-9thCircuit-07-55393.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-9thCircuit-07-55393.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/9thCircuit-07-55393.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>10<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-10thCircuit-06-6247.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-10thCircuit-06-6247.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-10thCircuit-06-6247.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/10thCircuit-06-6247.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>11<sup>th</sup></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-11thCircuit-200814991.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-11thCircuit-200814991.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-11thCircuit-200814991.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/11thCircuit-200814991.pdf"><em>link</em></a></td>
</tr>
<tr>
<td><span class="caps">DC</span> Circuit</td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-DC-Circuit-07-3125-1229519.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-DC-Circuit-07-3125-1229519.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-DC-Circuit-07-3125-1229519.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/DC-Circuit-07-3125-1229519.pdf"><em>link</em></a></td>
</tr>
<tr>
<td>Federal Circuit</td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftotext-layout-htmlmeta-utf-8-FederalCircuit-09-1361.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-complex-noframes-noimages-FederalCircuit-09-1361.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/pdftohtml-simple-noframes-noimages-FederalCircuit-09-1361.html"><em>link</em></a></td>
<td><a href="https://michaeljaylissner.com/archive/pdf-to-html-test/FederalCircuit-09-1361.pdf"><em>link</em></a></td>
</tr>
</table></p>
<p><strong>A caveat regarding pdftotext:</strong> This library is developed by a company called <a href="http://www.glyphandcog.com/index.html">Glyph <span class="amp">&</span> Cog</a>. Although the code is open source, I couldn’t for the life of me figure out how to file a bug against it. This doesn’t particularly bode well for using something as a dependency. On the flip side, Glyph <span class="amp">&</span> Cog is happy to provide support for the product.</p>With Howard Zinn’s Death, We All Suffer a Little2010-01-27T20:11:37-08:00Mike Lissnertag:michaeljaylissner.com,2010-01-27:posts/2010/01/27/with-howard-zinns-death-we-all-suffer-a-little/<p>Howard Zinn was one of the greats. He may not have freed the slaves or
created the nation, but it is safe to say that his every action and his
every belief furthered the dream and the ideals of the American state. After
eight years of Bush policies dragging down the nation,
and a year of Obama sounding increasing like an echo of Bush,
it is truly tragic that we are losing this thinker. </p>
<p>I <a href="https://michaeljaylissner.com/posts/2008/01/19/howard-zinn-the-use-and-abuse-of-history/">posted</a> this quote from Zinn’s <em>Passionate Declarations</em>
some time ago, but now more than ever it seems relevant:</p>
<blockquote>
<p>What sorts of values and ideals are encouraged in the young people of the
coming generation by the enormous emphasis on the Founding Fathers and the
presidents? It seems to me that the result is the creation of dependency on
powerful political figures to solve our problems.</p>
<p>…</p>
<p>Consider how much attention is given in historical writing to military
affairs–to wars and battles–and how many of our heroes are military
heroes. And consider also how little attention is given to antiwar movements and to those who struggled against the idiocy of war.</p>
<p>…</p>
<p>As a result of omitting, or downplaying, the importance of social movements
of the people in our history…a fundamental principle of democracy is
undermined: the principle that it is the citizenry,
rather than the government, that is the ultimate source of power and the
locomotive that pulls the train of government in the direction of equality
and justice. Such histories create a passive and subordinate citizenry.</p>
</blockquote>
<p>If you haven’t read <em><a href="http://www.amazon.com/exec/obidos/ASIN/0060557672/simiansbooksonli">Passionate Declarations</a></em>, you should.</p>New Server!2010-01-26T20:22:42-08:00Mike Lissnertag:michaeljaylissner.com,2010-01-26:posts/2010/01/26/new-server/<p>When I <a href="/blog/drupal-is-go">started</a> this blog more than two years ago, it was an experiment in blogging and an experiment in running my own server. At this point, it’s safe to say that the results of the experiment are in. While running my own server out of my attic has been an enlightening experience, teaching me about everything from <span class="caps">DNS</span> to <span class="caps">PHP</span>, ultimately, I have come to the conclusion that if I want a reliable, powerful and secure sever, running it myself is not the way to do it.</p>
<p>In that light, today I’ve transferred this website over to the people at <a href="http://slicehost.com">slicehost</a>. This will give me (almost) all the freedom of running the server myself, and should relieve some of the headaches I’ve had for the past couple of years when it came to power outages, comcast and <span class="caps">AT</span>&T outages, and the like.</p>
<p>Moving the site over has been a bit complicated, so if you see anything weird,
let me know via the <a href="https://michaeljaylissner.com/contact">contact</a> link, which should work as of now. </p>How to Protect Your Open Source Code from Theft and a Mercurial Hook to Help2010-01-15T10:27:18-08:00Mike Lissnertag:michaeljaylissner.com,2010-01-15:posts/2010/01/15/how-to-protect-your-open-source-code-from-theft-and-a-mercurial-hook-to-help/<p><strong>Updated, 2010-01-24:</strong> Some edits regarding the Affero license (thanks to
Brian at <a href="http://cyberlawcases.com/">http://cyberlawcases.com</a> for the corrections).</p>
<p>I’ve finally begun doing some of the actual coding for <a href="http://www.ischool.berkeley.edu/programs/masters/projects/2010/judicialnlp">my final
project</a> so the time has come to set up <a href="https://github.com/freelawproject/courtlistener">a mercurial repository</a> to
hold the code.</p>
<p>Once we complete our project, we will have built a free product that
competes with some of the core functionality of both LexisNexis and
Westlaw, so something we wanted to do was make sure they couldn’t steal our
code, enhance their product and thus moot ours.</p>
<p>To achieve this, we’re using the <a href="http://www.gnu.org/licenses/agpl.html"><span class="caps">GNU</span> Affero General Public License
v3</a>, which allows people to take our code for free, but requires that they
publicly share any modifications that they make to the code. The normal <span class="caps">GNU</span>
General Public License allows the code to be used at no cost,
but only requires that changes to the code be shared with the public if one
distributes the changed version to the public. With a server-based
project, like ours, one could operate modified versions of the code
without ever having a need to distribute any of the software to the public.
This loophole is closed by the Affero license.</p>
<p>In order to license our work, we must be its copyright holder. This is easy
enough, since we get copyright instantly in the U.S., but,
as has been demonstrated in <a href="http://en.wikipedia.org/wiki/Jacobsen_v._Katzer">Jacobsen v. Katzer</a>, in order to seek remedies
for copyright violations, we would have to register everything we made with
the copyright office. This <a href="http://www.copyright.gov/docs/fees.html">costs $35</a> per registration,
and with open source software, it’s not clear whether each and every
version needs to be registered or just major releases, or what. </p>
<p>Since this is too onerous to be practical, an additional approach to
protecting our works is useful, and in the <span class="caps">DMCA</span> (<a href="http://www.copyright.gov/title17/92chap5.html#506">17 <span class="caps">U.S.C.</span>§ 506(d)</a>),
remedies are provided for the “fraudulent removal of copyright notice.”
Although these do not (in any way) match the protections provided by normal
copyright registration, they are a useful place to begin. Thus,
if we place a copyright notice into each file of our code,
those using our code must either risk violating the <span class="caps">DMCA</span> by removing these
notices, or leave our copyright information intact. (Placing such notices
in each file is also <a href="http://www.fsf.org/licensing/licenses/gpl-howto.html">the recommendation</a> of the Free Software Foundation.)</p>
<p>To place our information into each and every file of code that we upload
publicly, I wrote <a href="https://michaeljaylissner.com/archive/checklicense.py">a short mercurial hook</a> that adds copyright and
licensing information it to the top of every file that is modified or added
to the repository. To use the script, simply make it executable,
place it in the .hg directory of your project, and add the following lines
to .hg/hgrc:</p>
<div class="highlight"><pre>[hooks]
pretxncommit = .hg/checklicense.py
</pre></div>
<p>A couple of things I should note about this script is that it currently
only checks for java and python files, and that it requires files called
java_license.txt and python_license.txt to be in the root of your
repository. It should be fairly easy to modify though to fit your own needs.</p>2010 Donations2010-01-12T16:28:02-08:00Mike Lissnertag:michaeljaylissner.com,2010-01-12:posts/2010/01/12/2010-donations/<p>Every year, a handful of organizations reach out to me to give them my money. I’m never sure how much I’ve given them, when the last time was, etc, so I’m always convinced some of them are tricking me into donating more than I would otherwise.</p>
<p>Well, this shall happen no more. I’m starting a new scheme this year in which on January 1<sup>st</sup> of each year, I donate to all the organizations that make the cut. </p>
<p>Here are this year’s results, including amount donated and links to their donation page. Please let me know if I’m making any grave mistakes:
<table>
<tr><td><strong>Organization</strong></td><td><strong>Amount</strong></td><td><strong>Link to donate</strong></td></tr>
<tr><td>Pacific Crest Trail Association</td><td>$25</td><td><a href="https://www.pcta.org/help/donate_form.asp">Donate</a></td></tr>
<tr><td>Secular Coalition</td><td>$15 </td><td> <a href="http://donate.secular.org/index.html">Donate</a></td></tr>
<tr><td>Pitzer College (my alma mater) </td><td> $30 </td><td> <a href="https://mypz.pitzer.edu/NetCommunity/SSLPage.aspx?pid=184">Donate</a></td></tr>
<tr><td>Zotero </td><td> $25 </td><td> <a href="http://chnm.gmu.edu/donate/">Donate</a></td></tr>
<tr><td>Electronic Frontier Foundation </td><td> $40 </td><td> <a href="http://www.eff.org/support">Donate</a></td></tr>
<tr><td>Catalog Choice </td><td> $10 </td><td> <a href="http://www.catalogchoice.org/donate">Donate</a></td></tr>
<tr><td>Food and Water Watch </td><td> $10 </td><td> <a href="https://salsa.democracyinaction.org/o/1185/t/3287/shop/custom.jsp?donate_page_KEY=3545">Donate</a></td></tr>
<tr><td>Creative Commons </td><td> $20 </td><td> <a href="https://support.creativecommons.org/donate">Donate</a></td></tr>
<tr><td>International <span class="caps">AIDS</span> Vaccine Initiative </td><td> $10</td><td> <a href="http://www.iavi.org/how-to-help/donate/Pages/default.aspx">Donate</a></td></tr>
<tr><td>gnome-do </td><td> $15 </td><td> Summon > Donate > Enter</td></tr></table></p>Cheap Metal Bike Stand2009-12-29T12:05:12-08:00Mike Lissnertag:michaeljaylissner.com,2009-12-29:posts/2009/12/29/cheap-metal-bike-stand/<p>It’s my winter break right now, so I’m taking advantage of it by doing some
of the things that have been on my list for far too long. One of those
things was to build a repair stand for the work I do on the bikes in my life.
For about $50, you can build this stand, which works remarkably well. </p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bike-stand/000-DSC02109.JPG" /></p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bike-stand/000-DSC02106.JPG" /></p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bike-stand/001-DSC02110.JPG" /></p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bike-stand/002-DSC02111.JPG" /></p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bike-stand/003-DSC02112.JPG" /></p>
<p>Essentially, what you need to make this beauty is five pipes,
a 90 degree elbow, a 45 degree elbow, and a welder. Since I don’t weld,
I went to <a href="http://www.yelp.com/biz/rons-berkeley-muffler-service-oakland">a local muffler shop</a> and they were happy to do it (for
free!) The one big lesson I’ll share is that you can’t (and shouldn’t) make
this from galvanized metal, since welding that <a href="http://en.wikipedia.org/wiki/Metal_fume_fever">is dangerous</a>. The
stuff you want is called “black pipe.”</p>Script to Rid Thyself of Autocomplete = Off in Firefox2009-12-15T17:41:27-08:00Mike Lissnertag:michaeljaylissner.com,2009-12-15:posts/2009/12/15/script-to-rid-thyself-of-autocomplete-in-firefox/<p>I took some time today and wrote up <a href="https://michaeljaylissner.com/archive/autocomplete-killer.sh">a script</a> that can be run to
eliminate
<code>autocomplete=off</code> in Firefox. It basically does the same thing as is
described <a href="https://michaeljaylissner.com/posts/2009/10/28/rid-thyself-of-autocomplete-in-firefox/">here</a>, but it automates it. </p>
<p>The script can be run with one of five arguments:</p>
<ul>
<li>You can choose to use find (<code>--find</code>) or locate (<code>--locate</code>) to find the
files that need to be changed on your system;</li>
<li>You can dictate the location of the file if you want to modify a
specific one or know exactly where it’s located (<code>--dictate</code>);</li>
<li>You can choose to use the Ubuntu default location (<code>--default</code>); or</li>
<li>You can print the help information (<code>--help</code>)</li>
</ul>
<p>Once the program is run, it will make a back up, and modify it the original
versions of the file. Once that’s complete, all you have to do is restart Firefox.</p>
<p>It has been pointed out to me by some security folks that removing a
utocomplete’s functionality from the browser might not be the best thing,
since it will allow you to save your passwords in the browser. There’s some
truth to that: Anything that’s on your computer can be hacked. So,
if you’re going to use this script, use it wisely.</p>
<p>Here’s the code. I’ve attached it to this message as well. Any bugs or
comments are greatly appreciated.</p>
<div class="highlight"><pre><span class="c">#!/bin/bash</span>
<span class="c"># a simple script to destroy autocomplete in linux installations.</span>
<span class="c">##############</span>
<span class="c"># We begin with our functions, it's not efficient, but it works</span>
<span class="c">##############</span>
<span class="c"># a function to print the help message.</span>
<span class="k">function </span>printHelp <span class="o">{</span>
cat <span class="s"><<EOF</span>
<span class="s">NAME</span>
<span class="s"> autocompleteDestroyer.sh</span>
<span class="s">SYNOPSIS</span>
<span class="s"> autocompleteDestroyer.sh [ --find | --default | --help | --locate | --dictate ]</span>
<span class="s">OPTIONS</span>
<span class="s"> This program will find the nsLoginManager.js file on your computer, and will fix it so that autocomplete is disabled in your installation of Firefox. Since this program will be altering your installation of Firefox, it will require your root password.</span>
<span class="s"> --help Print this help file</span>
<span class="s"> --default Attempt to use the default location of the files (/usr/lib/xulrunner*/components/nsLoginManager.js)</span>
<span class="s"> --locate Use the locate database, if installed, to find the files. This will only find the files that were added before the last time the locate database was updated (which is typically once a day). It is faster than the --find option, but might not find all versions.</span>
<span class="s"> --find Use the find command to locate the nsLoginManager.js files. This will search in /usr/lib by default. Edit the script if you would like to change this. This is the slowest, but most thorough option.</span>
<span class="s"> --dictate Allows input of a known location.</span>
<span class="s">EXIT STATUS</span>
<span class="s"> autocompleteDestroyer.sh exists with a status of 0 if it encounters no problems. An exit status of 1 means incorrect usage. An exit status of 2 indicates it was unable to find your files. An exit status of 3 indicates the user terminated the program. An exit status of 4 means it encountered problems editing your file.</span>
<span class="s">BUGS</span>
<span class="s"> If any bugs are encountered, please see http://michaeljaylissner.com/contact/</span>
<span class="s">AUTHOR AND COPYRIGHT</span>
<span class="s"> This script was authored by Michael Lissner and is released under GNU GPLv3.</span>
<span class="s">EOF</span>
<span class="o">}</span>
<span class="c"># takes an argument, and creates an array containing the files to be modified.</span>
<span class="k">function </span>identifyEvilFiles <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$1</span> <span class="o">==</span> <span class="s2">"find"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="k"> </span><span class="nv">files</span><span class="o">=</span><span class="k">$(</span>find /usr/lib -name nsLoginManager.js 2> /dev/null<span class="k">)</span>
<span class="k">if</span> <span class="o">[[</span> ! <span class="nv">$files</span> <span class="o">]]</span>
<span class="k">then</span>
<span class="c"># Test if files has been set.</span>
<span class="nb">echo</span> <span class="s2">"autocompleteDestroyer.sh: No files found. Try loosening the find parameter in the script, per the help file."</span>
<span class="nb">exit </span>2
<span class="k">fi</span>
<span class="k"> elif</span> <span class="o">[</span> <span class="nv">$1</span> <span class="o">==</span> <span class="s2">"default"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># We assume the default location of nsLoginManager.js</span>
<span class="nv">files</span><span class="o">=</span><span class="k">$(</span>ls /usr/lib/xulrunner*/components/nsLoginManager.js 2> /dev/null<span class="k">)</span>
<span class="k">if</span> <span class="o">[[</span> ! <span class="nv">$files</span> <span class="o">]]</span>
<span class="k">then</span>
<span class="c"># We didn't have any hits. Exit.</span>
<span class="nb">echo</span> <span class="s2">"autocompleteDestroyer.sh: We didn't find anything at the default locations. Perhaps try the --locate or --find arguments."</span>
<span class="nb">exit </span>2
<span class="k">fi</span>
<span class="k"> elif</span> <span class="o">[</span> <span class="nv">$1</span> <span class="o">==</span> <span class="s2">"locate"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># We run the locate command, see if we have any hits.</span>
<span class="nv">files</span><span class="o">=</span><span class="k">$(</span>locate -b <span class="s1">'\nsLoginManager.js'</span> 2> /dev/null<span class="k">)</span>
<span class="k">if</span> <span class="o">[[</span> ! <span class="nv">$files</span> <span class="o">]]</span>
<span class="k">then</span>
<span class="c"># No hits. Exit.</span>
<span class="nb">echo</span> <span class="s2">"autocompleteDestroyer.sh: We didn't find anything using the locate command. Perhaps try the --find argument."</span>
<span class="nb">exit </span>2
<span class="k">fi</span>
<span class="k"> elif</span> <span class="o">[</span> <span class="nv">$1</span> <span class="o">==</span> <span class="s2">"dictate"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># "Why don't you just tell me what movie you'd like to see?" --Kramer.</span>
<span class="nb">read</span> -p <span class="s2">"Where is the file nsLoginManager.js located on your machine: "</span> files
<span class="k">if</span> <span class="o">[</span> -f <span class="nv">$files</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># Good. The file exists. We press on.</span>
<span class="nb">echo</span> <span class="s2">"Thank you. That file exists, and we will modify it."</span>
<span class="k">else</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"autocomplete.sh: That file doesn't seem to exist. Please try again."</span>
<span class="nb">exit </span>2
<span class="k">fi</span>
<span class="k"> fi</span>
<span class="o">}</span>
<span class="k">function </span>modifyFiles <span class="o">{</span>
<span class="nb">echo</span> <span class="s2">"The following files will be modified: </span>
<span class="s2">$files "</span>
<span class="nb">echo </span>
<span class="nb"> read</span> -p <span class="s2">"Shall we proceed (y/n): "</span> proceed
<span class="k">if</span> <span class="o">[</span> <span class="nv">$proceed</span> <span class="o">==</span> <span class="s2">"y"</span> -o <span class="nv">$proceed</span> <span class="o">==</span> <span class="s2">"Y"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># Here we go!</span>
<span class="k">while </span><span class="nb">read</span> -r line
<span class="k">do</span>
<span class="k"> </span><span class="nb">echo </span>Now processing <span class="nv">$line</span>
<span class="c">#find the function in the file, label it with FILLERWORD, then replace the first line, and delete the rest. A messy approach, but functional</span>
sed -i.bak <span class="s1">'/[[:space:]]*_isAutocompleteDisabled[[:space:]]*:[[:space:]]*function.*{[[:space:]]*$/,/^[[:space:]]*},[[:space:]]*$/s/^/FILLERWORD/'</span> <span class="nv">$line</span>
sed -r -i <span class="s1">'s/FILLERWORD.*_isAutocomplete.*/ _isAutocompleteDisabled : function (element) { return false; },/'</span> <span class="nv">$line</span>
sed -i <span class="s1">'/FILLERWORD/d'</span> <span class="nv">$line</span>
<span class="c"># test if it worked</span>
grep -i -q <span class="s1">'isautocompletedisabled.*return false'</span> <span class="nv">$line</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$?</span> !<span class="o">=</span> 0 <span class="o">]</span>
<span class="k">then</span>
<span class="c"># something failed...probably. Tell the user</span>
<span class="nb">echo</span> <span class="s2">"Unable to successfully edit the file. Exiting"</span>
<span class="nb">exit </span>4
<span class="k">fi</span>
<span class="k"> done</span> <span class="o"><<<</span> <span class="s2">"$files"</span>
<span class="nb">echo</span> <span class="s2">"All the files have been processed properly. Please restart Firefox, and thanks for using this script."</span>
<span class="nb">exit </span>0
<span class="k">else</span>
<span class="c"># It appears they'd like to abort. Let's exit.</span>
<span class="nb">echo</span> <span class="s2">"OK. You know what to do if you change your mind."</span>
<span class="nb">exit </span>3
<span class="k">fi</span>
<span class="o">}</span>
<span class="c">#initiation sequence</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$# </span>-eq 0 -o <span class="nv">$# </span>-gt 1 <span class="o">]</span>
<span class="k">then</span>
<span class="c"># We need to give them help using the program. </span>
<span class="nb">echo</span> <span class="s2">"autocompleteDestroyer.sh: Invalid number of arguments."</span>
<span class="nb">echo</span> <span class="s2">"Usage: autocompleteDestroyer.sh [ --help | --default | --locate | --find | --dictate ] "</span>
<span class="nb">exit </span>1
<span class="k">elif</span> <span class="o">[[</span> <span class="nv">$EUID</span> -ne 0 <span class="o">]]</span>;
<span class="k">then</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"autoCompleteDestroyer.sh: This script must be run as root"</span> 1>&2
<span class="nb">exit </span>1
<span class="k">else</span>
<span class="k"> case</span> <span class="nv">$1</span> in
--help<span class="o">)</span> printHelp;;
--find<span class="o">)</span> identifyEvilFiles find; modifyFiles;;
--default<span class="o">)</span> identifyEvilFiles default; modifyFiles;;
--locate<span class="o">)</span> identifyEvilFiles locate; modifyFiles;;
--dictate<span class="o">)</span>identifyEvilFiles dictate; modifyFiles;;
*<span class="o">)</span> <span class="nb">echo</span> <span class="s2">"autocompleteDestroyer.sh: Invalid argument. Try the --help argument."</span>
<span class="nb">exit </span>1;
<span class="k">esac</span>
<span class="k">fi</span>
</pre></div>Some Legal Gems2009-12-12T23:11:37-08:00Mike Lissnertag:michaeljaylissner.com,2009-12-12:posts/2009/12/12/some-legal-gems/<p>As anybody who has been following my <a href="http://twitter.com/mlissner">twitter stream</a> today knows, I have been spending the entire day hunting, pecking, avoiding, and kind of working on my final exam for my <a href="http://people.ischool.berkeley.edu/~bcarver/mediawiki/index.php/Intellectual_Property_Law_for_the_Information_Industries_Syllabus">Intellectual Property Law Class</a>.</p>
<p>While working on the exam, I have found some real legal gems today. These
kinds of things don’t often turn up unless you know to look for them, and
since I’m betting nobody ever looks, I figured I’d share them here.</p>
<ul>
<li>First, a warm up. May I present the laws that protects the <a href="http://www.law.cornell.edu/uscode/html/uscode18/usc_sec_18_00000706----000-.html">Red Cross</a>, and <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00220506----000-.html">The Olympics</a>?</li>
<li>Or, perhaps the ones that define and protect (sort of) America’s <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000301----000-.html">anthem (Star Spangled Banner)</a>, <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000302----000-.html">motto (“In God we trust”)</a>, <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000303----000-.html">floral emblem (the rose)</a>, <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000304----000-.html">march (Stars and Stripes Forever)</a>, and <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000305----000-.html">tree (the mighty oak)</a>?</li>
<li>Maybe you’d prefer a <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sup_01_36_06_I_08_A_10_1.html">list of the national observances</a> that are codified by law, such as the May, the <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000139----000-.html">Steelmark month</a>?</li>
<li>And finally, those laws that <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sup_01_36_06_I_08_A_10_5.html">govern the inauguration</a>, including <a href="http://www.law.cornell.edu/uscode/html/uscode36/usc_sec_36_00000504----000-.html">the regulations of the electricity</a> that day.</li>
</ul>
<p>America, sometimes you have the strangest laws.</p>More Security Papers: Breaking ReCAPTCHA and Proactive Methods for Secure Design2009-12-12T12:07:58-08:00Mike Lissnertag:michaeljaylissner.com,2009-12-12:posts/2009/12/12/more-security-papers-breaking-recaptcha-and-proactive-methods-for-secure-design/<p>Two more security papers today. </p>
<p>In the first, <a href="https://michaeljaylissner.com/pdfs/breaking-recaptcha.pdf"><strong>Breaking ReCAPTCHA</strong></a> I discuss a few methods that
ReCAPTCHAs can be hacked, and talk a bit about the ways that they were
attacked by the Anonymous hacker group. I should mention at the outset that
none of the approaches here are particularly useful though,
and that ultimately, the hacker group beat ReCAPTCHA by simply out
numbering it.</p>
<p><a href="https://michaeljaylissner.com/pdfs/proactive-security.pdf">The <em>second paper</em></a> is a brief discussion of some approaches an
organization might take when beginning a project in which security is a
high concern. Essentially, it takes a chronological approach,
from the start to the end of the project. </p>
<p>Enjoy.</p>Technology Revolution and the Fourth Amendment2009-12-08T12:29:15-08:00Mike Lissnertag:michaeljaylissner.com,2009-12-08:posts/2009/12/08/technology-revolution-and-the-fourth-amendment/<p>I realized today that for some reason I never posted <a href="https://michaeljaylissner.com/pdfs/tech-revolution-4th-amendment.pdf">this paper</a> back in May
when I wrote it. This paper is a brief analysis of the ways that our
fourth amendment rights are being daily eroded by technology marching on.
I didn’t go too deeply into the importance of the fourth amendment (I
probably should have), but if you’re not up on your rights (or lack
thereof), you might find this to be interesting reading.</p>Analyzing Facebook’s Security Mechanisms2009-11-15T17:43:55-08:00Mike Lissnertag:michaeljaylissner.com,2009-11-15:posts/2009/11/15/analyzing-facebooks-security-mechanisms/<p>For my <a href="http://is219.blogspot.com/">Privacy,
Security and Cryptography</a> class, we studied a set of 13 principles for
secure systems:</p>
<ol>
<li>Security is Economics</li>
<li>Least Privilege</li>
<li>Use Fail-Safe Defaults</li>
<li>Separation of Responsibility</li>
<li>Defense in Depth</li>
<li>Psychological Acceptability</li>
<li>Usability</li>
<li>Ensure Complete Mediation</li>
<li>Least Common Mechanism</li>
<li>Detect if You Cannot Prevent</li>
<li>Orthogonal Security</li>
<li>Don’t Rely on Security Through Obscurity</li>
<li>Design Security in, From the Start</li>
</ol>
<p>For our midterm, we were asked to analyze how Facebook exemplifies or does not
follow these principles. It was an interesting assignment, which finally
forced me to think more thoroughly about Facebook’s security policies, and I’m
happy to <a href="https://michaeljaylissner.com/pdfs/facebook-security.pdf">attach my findings</a> here. </p>
<p>For some people these may be rather run of the mill notes. For others, you may
be surprised at poor security of the world’s biggest photo and social
networking site.</p>
<p>Enjoy.</p>Testing Deletion Speed of Online Photo Sites2009-11-14T16:28:44-08:00Mike Lissnertag:michaeljaylissner.com,2009-11-14:posts/2009/11/14/testing-deletion-speed-of-online-photo-sites/
<h2 id="updates">Updates</h2>
<ul>
<li><strong>2014-08-22</strong>: While updating this blog to a new platform,
I wound down these tests and put notes about each service’s final result.
After nearly five years, some of these sites still haven’t taken down the image.</li>
<li><strong>2010-03-08</strong>: Added an image at drop.io</li>
<li><strong>2010-01-28</strong>: Added an image at Orkut.com</li>
<li><strong>2010-01-28</strong>: At <a href="http://www.ftc.gov/bcp/workshops/privacyroundtables/index.shtml">the <span class="caps">FTC</span> privacy round table</a> today,
Facebook’s director of public policy, Tim Sparapani, claimed that information
deleted from Facebook cannot be retrieved even by Facebook staff,
because it is almost instantly deleted. I informed him this was not true in
the case of pictures, and he said he would look into it. Will update this
post when/if I hear more.</li>
</ul>
<h2 id="background-and-threat-model">Background and Threat Model</h2>
<p>Imagine an embarrassing photo of you is placed online by one of your
friends. You ask them to take it down, and they do. Now,
imagine that your enemy had gotten a link to that photo,
and had posted it to their blog. You’d hope that your friend taking the
photo down would in fact delete the photo, but I’m sorry to say that isn’t
always the case.</p>
<p>Inspired by <a href="http://arstechnica.com/web/news/2009/07/are-those-photos-really-deleted-from-facebook-think-twice.ars">Jacqui Cheng’s article</a>, I decided to test some of the
more popular online services for photo hosting to see what happens when you
press the delete button on a photo from their site. On <strong>November
14<sup>th</sup>, 2009</strong>, I uploaded and then deleted the following image of
a black box with white text to Facebook, Flickr, Picasa, MySpace, Photobucket,
Shutterfly, Twitpic and WalMart. A few months later,
I also added drop.io and Orkut: </p>
<p><img alt="I will attempt to delete this photo" src="https://michaeljaylissner.com/images/photo-deletion-tests/PostedAndDeleted.jpg"/></p>
<p>When you look below, if you can see the black box for a site,
that means that it was not truly deleted and is still live. You can verify
this by clicking on the image. This is checked each time this page is
loaded, so the information is constantly verified. If the image has been
deleted, you will see the date that it was deleted.</p>
<p>There are a number of reasons why photo services might be lazy about
properly removing images from their site, but until they have proper
deletion mechanisms, we should all think twice about what we upload.</p>
<p>If there’s a service that is not shown here that you’d like to see,
please <a href="https://michaeljaylissner.com/contact">let me know</a>. And now, without further ado,
I present, the ongoing results of the test:</p>
<h2 id="facebook">Facebook</h2>
<p>Facebook properly deleted the photo from their server as of May 27, 2010.</p>
<h2 id="flickr">Flickr</h2>
<p>Flickr began showing the following message approximately an hour after the
image was deleted.</p>
<p><img alt="Flickr Response" src="https://michaeljaylissner.com/images/photo-deletion-tests/flickr-response.jpg"/></p>
<h2 id="picasa">Picasa</h2>
<p>Picasa properly deleted the photo from their server as of at least November
15, 2009.</p>
<h2 id="myspace">MySpace</h2>
<p>At an unknown time, MySpace began showing this photo instead:</p>
<p><img alt="MySpace Response" src="https://michaeljaylissner.com/images/photo-deletion-tests/myspace.png"/></p>
<h2 id="photobucket">Photobucket</h2>
<p>Photobucket properly deleted the photo from their server as of at least
November 14, 2009.</p>
<h2 id="shutterfly">Shutterfly</h2>
<p>As of 2014-08-22, Shutterfly still shows <a href="http://im1.shutterfly.com/media/47b9cf35b3127ccef8c9be9d18a800000040O00ActW7Ro4cuWQPbz4W/cC/f%3D0/ps%3D50/r%3D0/rx%3D720/ry%3D480/">the original image on their
server</a>.</p>
<h2 id="twitpic">Twitpic</h2>
<p>Twitpic properly deleted the photo from their server as of at least
November 14, 2009.</p>
<h2 id="walmart">Walmart</h2>
<p>As of 2014-08-22, Walmart still shows <a href="http://images.photos1.walmart.com/232323232%7Ffp432%3B4%3Enu%3D3%3A%3A2%3E%3A8%3A%3E238%3EWSNRCG%3D326634885%3B329nu0mrj">the original image on their
server</a>.</p>
<h2 id="google-orkut-added-2010-01-28">Google Orkut (added 2010-01-28)</h2>
<p>Despite being <a href="http://thenextweb.com/google/2014/06/30/google-shutting-orkut-social-network-september-30/">nearly shut down completely</a>, as of 2014-08-22,
Orkut still shows <a href="http://images.orkut.com/orkut/photos/NwAAAA40TqrVmtf2vIA1oouDdb9vUTcjWDAQqVo_mBa45mvjdqMPiHhSaHxekFNT596b5sVYh593XRK-5Nquk0_WOQMAm1T1UJmPN1ZDUab24PgUE8b4ZMm09Mjj.jpg">the original image on their server</a>.</p>
<h2 id="dropio-added-08-march-2010">Drop.io (added 08 March 2010)</h2>
<p>Drop.io properly deleted the photo from their server as of 8 March 2010,
the day it was added.</p>Rid Thyself of Autocomplete=Off in Firefox2009-10-28T09:39:19-07:00Mike Lissnertag:michaeljaylissner.com,2009-10-28:posts/2009/10/28/rid-thyself-of-autocomplete-in-firefox/<p><strong>Update, 12-15-09:</strong> See <a href="https://michaeljaylissner.com/posts/2009/12/15/script-to-rid-thyself-of-autocomplete-in-firefox/">this script</a> for an automated way to apply
this change.</p>
<p>If you’re at all like me, you use a password manager to keep track of all
your passwords, and it works great. Most of the time. Except sometimes,
it doesn’t work, and you’re confused why. Well, more often than not,
it’s because your password manager has been blocked by the web page you’re viewing.</p>
<p>If you look closely at the code of the page, somewhere in it,
you’ll probably find something that looks like this:</p>
<div class="highlight"><pre><span class="nt"><input</span> <span class="na">class=</span><span class="s">"button"</span> <span class="na">type=</span><span class="s">"submit"</span> <span class="na">name=</span><span class="s">"login"</span> <span class="na">value=</span><span class="s">"login"</span> <span class="na">autocomplete=</span><span class="s">"off"</span><span class="nt">></span>
</pre></div>
<p>That autocomplete parameter that you see at the end there? Yeah,
that’s the one that’s blocking your password manager. So we must block it,
so it doesn’t block us.</p>
<p>There’s a couple approaches to this, but probably the best is to disable
Firefox’s ability to interpret autocomplete. The way to do this on Linux is
to browse to:</p>
<div class="highlight"><pre><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">xulrunner</span><span class="o">-</span><span class="mf">1.9.1.5</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">nsLoginManager</span><span class="p">.</span><span class="n">js</span>
</pre></div>
<p>And in Windows, I believe it’s at:</p>
<div class="highlight"><pre><span class="nl">C:</span><span class="err">\</span><span class="n">Program</span> <span class="n">Files</span><span class="err">\</span><span class="n">Mozilla</span> <span class="n">Firefox</span><span class="err">\</span><span class="n">nsLoginManager</span><span class="p">.</span><span class="n">js</span>
</pre></div>
<p>Once you’ve found that file, open it in an editor, and find the section
that has <code>isAutoCompleteDisabled</code>, and make it look like this (so it will
always return <span class="caps">FALSE</span>):</p>
<div class="highlight"><pre><span class="cm">/*</span>
<span class="cm"> * _isAutoCompleteDisabled</span>
<span class="cm"> *</span>
<span class="cm"> * Returns true if the page requests autocomplete be disabled for the</span>
<span class="cm"> * specified form input.</span>
<span class="cm"> */</span>
<span class="nx">_isAutocompleteDisabled</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// if (element && element.hasAttribute("autocomplete") &&</span>
<span class="c1">// element.getAttribute("autocomplete").toLowerCase() == "off")</span>
<span class="c1">// return true;</span>
<span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
<span class="p">},</span>
</pre></div>
<p>Once that’s done, save the file, restart Firefox and you’re all set.</p>Script to Clean Up F-Spot Database2009-10-14T00:30:12-07:00Mike Lissnertag:michaeljaylissner.com,2009-10-14:posts/2009/10/14/script-to-cleanup-fspot-database/<p>One of the more popular photo management applications for Linux is f-spot,
but unfortunately it has a rather glaring bug. It uses a sqlite3 database
internally to track which pictures you’ve imported into it,
what tags they have, etc. However, if you delete, move or rename any of the
files that f-spot is tracking, the next time you browse to that photo within f-spot, it will crash the program. It’s annoying, and there’s no particularly easy way to deal with it…until now.</p>
<p>The script below simply iterates through all of the photos
that are in f-spot’s database, and checks to see if those photos exist on
your hard drive. If you run it in demo-mode, it will show you which files
look problematic, and if you run it in normal mode,
it will delete those database entries so that your database is cleaned up
(but not before backing up your database, just in case).</p>
<p>In my very limited testing, it works very well, any additional feedback or
bug reporting is more than welcome. </p>
<div class="highlight"><pre><span class="c">#!/bin/bash</span>
<span class="c"># A script to find missing files in the f-spot database, and then delete them.</span>
<span class="c"># At present these files crash f-spot. It's frustrating as all hell.</span>
<span class="nb">echo</span> <span class="s2">"Welcome to the f-spot database cleaner. All the usual disclaimers apply, as you might imagine."</span>
<span class="nb">echo</span> <span class="s2">"What would you like to do: "</span>
<span class="nb">echo</span> <span class="s2">" 1) Run in demo-mode "</span>
<span class="nb">echo</span> <span class="s2">" 2) Clean up your f-spot database"</span>
<span class="nb">echo</span> <span class="s2">" 3) Quit"</span>
<span class="nb">read</span> -p <span class="s2">"Your choice: "</span> choice
<span class="k">case</span> <span class="nv">$choice</span> in
1<span class="o">)</span> <span class="nv">demomode</span><span class="o">=</span><span class="s2">"true"</span>;;
2<span class="o">)</span> <span class="nv">demomode</span><span class="o">=</span><span class="s2">"false"</span>;;
3<span class="o">)</span> <span class="nb">exit </span>0;;
<span class="k">esac</span>
<span class="c"># With that beginning stuff out of the way, let us do some functions</span>
<span class="c"># First, a function to gather the database contents and to print out the ones that are orphans</span>
<span class="k">function </span>findAndFixOrphans <span class="o">{</span>
<span class="c"># find our db, and set a var. Checking for XDG path first, since it's the more recent location of the db</span>
<span class="k">if</span> <span class="o">[</span> -f <span class="nv">$XDG_CONFIG_DIR</span>/f-spot/photos.db <span class="o">]</span> <span class="c">#checks if the $XDG_CONFIG_DIR variable is in use</span>
<span class="k">then</span>
<span class="k"> </span><span class="nv">DBPATH</span><span class="o">=</span><span class="nv">$XDG_CONFIG_DIR</span>/f-spot/photos.db
<span class="k">elif</span> <span class="o">[</span> -f <span class="nv">$HOME</span>/.config/f-spot/photos.db <span class="o">]</span> <span class="c">#uses the default $XDG location, if that's being used.</span>
<span class="k">then</span>
<span class="k"> </span><span class="nv">DBPATH</span><span class="o">=</span><span class="nv">$HOME</span>/.config/f-spot/photos.db
<span class="k">elif</span> <span class="o">[</span> -f <span class="nv">$HOME</span>/.gnome2/f-spot/photos.db <span class="o">]</span> <span class="c">#uses the old location of the DB, if the former aren't in use.</span>
<span class="k">then</span>
<span class="k"> </span><span class="nv">DBPATH</span><span class="o">=</span><span class="nv">$HOME</span>/.gnome2/f-spot/photos.db
<span class="k">else</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"Error: Could not find database. Damn."</span>
<span class="nb">exit </span>1
<span class="k">fi</span>
<span class="c"># Select the filenames, and put them in a variable.</span>
<span class="nv">filenames</span><span class="o">=</span><span class="k">$(</span>sqlite3 <span class="nv">$DBPATH</span> <span class="s2">"SELECT URI FROM PHOTOS"</span><span class="k">)</span>
<span class="nv">filenames_versions</span><span class="o">=</span><span class="k">$(</span>sqlite3 <span class="nv">$DBPATH</span> <span class="s2">"SELECT URI FROM PHOTO_VERSIONS"</span><span class="k">)</span>
<span class="c"># Chomp off the first instance of file://, and replace the rest with newlines.</span>
<span class="nv">filenames</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="nv">$filenames</span> | sed <span class="s1">'s/file:\/\///'</span> | sed <span class="s1">'s/file:\/\//\n/g'</span> <span class="k">)</span>
<span class="nv">filenames_versions</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="nv">$filenames_versions</span> | sed <span class="s1">'s/file:\/\///'</span> | sed <span class="s1">'s/file:\/\//\n/g'</span> <span class="k">)</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$demomode</span> <span class="o">==</span> <span class="s2">"true"</span> <span class="o">]</span>
<span class="k">then </span>
<span class="k"> while </span><span class="nb">read</span> -r line
<span class="k">do</span>
<span class="c"># Decode the filename</span>
<span class="nv">decodedLine</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> -e <span class="s2">"${line//\%/\\x}"</span><span class="k">)</span>
<span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">"$decodedLine"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># If the file doesn't exist, we output the filename, if in demomode, or we fix it if we are not in demomode.</span>
<span class="nb">echo</span> <span class="s2">"Errant record found in the photos table: $decodedLine"</span>
<span class="k">fi</span>
<span class="k"> done</span> <span class="o"><<<</span> <span class="s2">"$filenames"</span>
<span class="c"># We do the same for the photo_versions table</span>
<span class="k">while </span><span class="nb">read</span> -r line
<span class="k">do</span>
<span class="c"># Decode filename</span>
<span class="nv">decodedLine</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> -e <span class="s2">"${line//\%/\\x}"</span><span class="k">)</span>
<span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">"$decodedLine"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># If the file doesn't exist, we output the filename</span>
<span class="nb">echo</span> <span class="s2">"Errant record found in the photo_versions table: $decodedLine"</span>
<span class="k">fi</span>
<span class="k"> done</span> <span class="o"><<<</span> <span class="s2">"$filenames_versions"</span>
<span class="k">else</span>
<span class="c"># We backup the database, and make the correction</span>
cp <span class="nv">$DBPATH</span> <span class="nv">$DBPATH</span>.<span class="sb">`</span>date -I<span class="sb">`</span>.bak
<span class="k">if</span> <span class="o">[</span> <span class="nv">$?</span> -eq 0 <span class="o">]</span>
<span class="k">then</span>
<span class="c">#The backup worked, tell the user.</span>
<span class="nb">echo</span> <span class="s2">"Your database has been backed up to $DBPATH.`date -I`.bak"</span>
<span class="k">else</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"Error backing up your database."</span>
<span class="nb">exit </span>3
<span class="k">fi</span>
<span class="c"># First we do the photos table</span>
<span class="k">while </span><span class="nb">read</span> -r line
<span class="k">do</span>
<span class="c"># Decode the filename</span>
<span class="nv">decodedLine</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> -e <span class="s2">"${line//\%/\\x}"</span><span class="k">)</span>
<span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">"$decodedLine"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c"># Do some sql here.</span>
<span class="nv">foo</span><span class="o">=</span><span class="s2">"file://${line}"</span>
<span class="nb">echo</span> -n <span class="s2">"Deleting URI $line from the database table photos..."</span>
sqlite3 <span class="nv">$DBPATH</span> <span class="s2">"DELETE FROM PHOTOS WHERE uri = '$foo'"</span>
<span class="nb">echo</span> <span class="s2">"done."</span>
<span class="k">fi</span>
<span class="k"> done</span> <span class="o"><<<</span> <span class="s2">"$filenames"</span>
<span class="c"># Then we do the photo_versions table</span>
<span class="k">while </span><span class="nb">read</span> -r line
<span class="k">do</span>
<span class="c"># Decode the filename</span>
<span class="nv">decodedLine</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> -e <span class="s2">"${line//\%/\\x}"</span><span class="k">)</span>
<span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">"$decodedLine"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="c">#Do some sql stuff</span>
<span class="nv">foo</span><span class="o">=</span><span class="s2">"file://${line}"</span>
<span class="nb">echo</span> -n <span class="s2">"Deleting URI $line from the database table photo_versions..."</span>
sqlite3 <span class="nv">$DBPATH</span> <span class="s2">"DELETE FROM PHOTO_VERSIONS WHERE uri = '$foo'"</span>
<span class="nb">echo</span> <span class="s2">"done."</span>
<span class="k">fi</span>
<span class="k"> done</span> <span class="o"><<<</span> <span class="s2">"$filenames_versions"</span>
<span class="k">fi</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">[</span> <span class="s2">"$demomode"</span> <span class="o">==</span> <span class="s2">"true"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"Great. Proceeding in demomode."</span>
findAndFixOrphans
<span class="nb">echo</span> <span class="s2">"Demomode successfully finished. Exiting."</span>
<span class="nb">exit </span>0;
<span class="k">elif</span> <span class="o">[</span> <span class="s2">"$demomode"</span> <span class="o">==</span> <span class="s2">"false"</span> <span class="o">]</span>
<span class="k">then</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"Great. Cleaning up your database."</span>
findAndFixOrphans
<span class="nb">echo</span> <span class="s2">"Database cleaned successfully."</span>
<span class="nb">exit </span>0;
<span class="k">else</span>
<span class="k"> </span><span class="nb">echo</span> <span class="s2">"Something strange happened. See the script for details. Exiting."</span>
<span class="nb">exit </span>2;
<span class="k">fi</span>
</pre></div>Fix Duplicate Thunderbird Address Book Contacts2009-10-09T17:14:40-07:00Mike Lissnertag:michaeljaylissner.com,2009-10-09:posts/2009/10/09/de-dup-thunderbird-address-book-contacts/<p>For the longest time, I’ve been annoyed with Thunderbird because it doesn’t catch duplicate contacts as you enter them into your address book. This seems like a standard thing to check for, but even in the <a href="http://www.mozillamessaging.com/en-US/thunderbird/3.0b4/">latest release</a>, this still hasn’t <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=129393">been</a> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=45946">fixed</a>.</p>
<p>This was really starting to get out of control for me, so I did some thinking today about how to fix it, and finally came up with an answer. There is <a href="https://addons.mozilla.org/en-US/thunderbird/addon/2505">an add-on</a> that’s supposed to do this, but it hasn’t been updated in years, and doesn’t work on the latest version. </p>
<p>So here’s the process that worked for me:</p>
<ul>
<li>Open your address book, and select the address book that you wish to de-duplicate</li>
<li>Go to Tools > Export, and export the address book as a <span class="caps">CSV</span> file.</li>
<li>Open that file in OpenOffice Spreadsheet, and sort it by the column called “Display Name”</li>
<li>Insert a column to the left (or right, whatever) of the “Display Name”
column, and fill it with entries such as <code>=if(C2=C3, "Duplicate",
"OK")</code> Where C corresponds with the column in which you’re looking for
duplicates. Fill the entire column with such entries all the way to the bottom.</li>
<li>Next, visually look for duplicates and delete them. Once that’s done, do the same thing for the email address column, and you should be able to eliminate all the duplicates.</li>
<li>To get them back into Thunderbird, go to Tools > Import, and import the file. This will create a new address book by the name of the file.</li>
<li>From there, simply delete your old address book, and rename the new one to something useful.</li>
</ul>
<p>All done!</p>Jacobsen v. Katzer Article Posted2009-10-03T21:52:21-07:00Mike Lissnertag:michaeljaylissner.com,2009-10-03:posts/2009/10/03/jacobsen-v-katzer-article-posted/<p>Today I finally finished an article I have been writing for Wikipedia, as part of my <a href="http://people.ischool.berkeley.edu/~bcarver/mediawiki/index.php/INFO_237_Fall_2009_Syllabus"><span class="caps">IP</span> Law class</a>. The professor for this class is the same as the one that taught the Cyberlaw class I took in the Spring, and once again, he has asked us to work on Wikipedia as part of our classwork.</p>
<p>We were able to choose an article on Wikipedia that was related to the class, and I chose to work on the article on <a href="http://en.wikipedia.org/wiki/Jacobsen_v._Katzer">Jacobsen v. Katzer</a>, which is a very important case as it relates to open source licensing, patent law, copyright, <span class="caps">DMCA</span>, and just about every other possible <span class="caps">IP</span> law issue.</p>
<p>Ultimately, it was a very complicated case because Katzer has attempted to throw the book at Jacobsen (and vice versa). The court has not yet resolved all the issues, but from reading through about half of the court documents that <a href="http://jmri.sourceforge.net/k/docket/index.shtml">Jacobsen has posted</a>, it appears that Katzer has:</p>
<ul>
<li>Patented technology that was not his to patent</li>
<li>Attempted to get licensing fees from Jacobsen for those patents</li>
<li>Stolen the intellectual property of an open source project, stripped it of its license and then incorporated it into his own commercial project</li>
<li>Attempted to sue Jacobsen for copyright violation for something - I’m not even sure what</li>
<li>And more - see the article for details</li>
</ul>
<p>In short, it’s a nasty, nasty case, but ultimately it should work out for Jacobsen, and he should come out the better (or at least none the worse). At a minimum, he has to prove that the patents are invalid, Katzer stole his <span class="caps">IP</span>, and that he didn’t steal Katzer’s <span class="caps">IP</span> - a walk in the park.</p>
<p>Clearly, that’s easier said than done, but he’s fighting what appears to be the good fight, and it looks like if he keeps at it, he will win in the end.</p>Google Resonds to the Twitter Attack2009-10-02T20:37:12-07:00Mike Lissnertag:michaeljaylissner.com,2009-10-02:posts/2009/10/02/google-responds-to-the-twitter-attack/<p>A few months ago, Twitter was hacked by means of a <a href="http://www.techcrunch.com/2009/07/19/the-anatomy-of-the-twitter-attack/">clever,
yet somewhat obvious approach</a>. Today, I saw the following alert on my Gmail
account, ensuring that this security vulnerability is fixed. I’m often
impressed by Gmail, but this is great to see:</p>
<blockquote>
<p>Hey, this is important: If you ever lose access to your account,
you can send password reset info to [myemailaddress@michaeljaylissner.com].
This address is correct | Update this address</p>
</blockquote>
<p>What happened in the case of Twitter was that a hacker did the following:</p>
<ul>
<li>Figured out the Gmail address of a Twitter employee</li>
<li>Went to <a href="https://www.google.com/accounts/ForgotPasswd?service=mail&fpOnly=1">Gmail’s password reminder</a>, and requested a reminder</li>
<li>This informed the hacker that an email reminder was sent to a specific
Hotmail address</li>
<li><strong>That Hotmail address had been automatically closed due to disuse</strong></li>
<li>The hacker set up that email account, since it was now available</li>
<li>The hacker then requested another password reminder, which summarily sent an
email to his new Hotmail account</li>
<li>This gave the hacker complete access to the Twitter employee’s gmail
account (and thus a lot of other stuff)</li>
</ul>
<p>The new alert that Gmail is now popping up should serve the function of
updating this, and, if done correctly, should fix this problem permanently.
Well done Gmail.</p>Economics of Securing Government Information Systems: A Case Study2009-09-12T13:48:45-07:00Mike Lissnertag:michaeljaylissner.com,2009-09-12:posts/2009/09/12/economics-of-securing-government-information-systems/<p>Prior to becoming a student at the <a href="http://ischool.berkeley.edu">School of Information</a>, I worked doing systems support for a government database that held hundreds of thousands of records, consisting of social security numbers, addresses, names, DOBs, etc. My job was to help users with any kinds of bugs they found in the system, and to work with the vendor to report and resolve those bugs. Over the years at this job, I spent a good amount of time doing security testing of the system. I found a number of vulnerabilities which I reported to the vendor, and which were quickly fixed. One of them however had been plaguing me from the time I found it, around 2007, until now. This post is the tale of that vulnerability, which I’m proud to say was fixed earlier this week.</p>
<p>The problem that I discovered is a simple one, and is one that is <a href="http://www.hotmail.com" rel="nofollow">widespread</a> <a href="http://www.gmx.com/" rel="nofollow">on</a> <a href="http://webmail.juno.com" rel="nofollow">the</a> <a href="http://registration.excite.com" rel="nofollow">web</a>. Simply put, the web-based system did not use encryption on the log on page, resulting in user names and passwords being sent over the Internet in plain text rather than ciphertext. </p>
<p>Now, without going into too much detail, this is not necessarily the end of the world. When you use the Internet, the information that transfers between you and websites is split up into packets, and these packets are sent down whatever wire appears to have the least load and the greatest speed. As a result, there is no guarantee all of your information will ever be sent through the same computer, and it’s challenging for a hacker to place a computer between you and the website you’re using.</p>
<p>Unfortunately though, there are some bottlenecks, and sometimes — not always — all of your information <em>will</em> pass through the same point between you and the server. Bottlenecks can occur in a number of places, such as:</p>
<ul>
<li><strong>The web host’s computers and wires</strong> — Unless a custom <a href="http://en.wikipedia.org/wiki/Name_server"><span class="caps">DNS</span> server</a> is being used, all the information going to or from the server has to go through some host’s computer system. If they are logging the information, and if the login information is sent in plaintext, they will immediately have it.</li>
<li><strong>The fastest route</strong> — Somewhere between you and the server, there may be one route that is fastest. It’s possible that some computer in the middle will in fact be relaying all of the information to and from you and the server. They will, in effect, have all of the needed information to steal your login credentials.</li>
<li><strong>Your network</strong> — If you’re on a home or corporate network, more than likely, there is one or more bottlenecks between you and the Internet. This is a point where your information could be gathered.</li>
<li><strong>The network provider’s computers</strong> — Finally, your information will be passing through the hands of the network providers, so they have a wide scope of opportunities to inspect and analyze your information.</li>
</ul>
<p>Thus, you might say that it’s <span class="caps">OK</span> to have an unencrypted login page, if you don’t mind having vulnerabilities at both endpoints and all along the middle of the connection.</p>
<p>But I digress and should proceed with the tale. Around 2007, I found this vulnerability and used <a href="http://www.wireshark.org/">Wireshark</a> to demonstrate it to my managers and to the vendor. At that time, it seemed like it would be quickly fixed, and that we could go on with our lives.</p>
<p>Then some time passed, and nothing happened. I reminded a few people, but still nothing. The problem persisted, and I handed off my job to somebody else so that I could go back to school. But even once I was back in school, occasionally something would remind me of the problem, and I’d check to see if it was fixed. But it wasn’t. So I reminded my old co-workers that they had a problem (which wasn’t my favorite thing to do), and I assumed it would be taken care of. Except it <em>still</em> wasn’t.</p>
<p>At this point, I had to decide how much of a moral duty I had to get this fixed, since I was unaffiliated with the organization for about a year by that time. Proceeding to bring up this issue meant that I would probably annoy a number of people, and that I would likely damage relationships I had spent years building, but to not bring it up meant that thousands of people’s records would continue to be insecure.</p>
<p>With this balance in mind, I decided to contact the vendor about it some more, and to continue contacting him every so often until it was fixed. Ultimately, after an additional three or four months and about five long phone calls it’s finally fixed. </p>
<p>The questions now are, what took so damned long, and what can be done to avoid this in the future? Well, a number of things factored in:</p>
<ol>
<li><strong>Staff transitions</strong> — Part-way through this time, I left my job and transitioned to school. While I did mention this problem to my replacement, I also mentioned about 500 other things. Sadly, this one may not have caught his attention, or I did not emphasize it enough.</li>
<li><strong>Lack of security personnel</strong> — Nowhere in either organizations was there a person that was designated to discover and push security problems.</li>
<li><strong>Vagueness of the problem</strong> — I was able to demonstrate the problem to my superiors and to the vendor, and to explain how it could be a problem, but it wasn’t a smoking gun. There had been no security failure, nor was there any obvious thing that an average user could exploit.</li>
<li><strong>Competing projects</strong> — At the time I discovered the problem, there were many other competing projects that were on the table. To push them aside to fix a vague and unexploited problem did not seem like a good use of resources.</li>
<li><strong>Relationship maintenance and imbalances</strong> — In 2007, when I reported this, I was not a part of the senior management, and did not have a strong relationship with the vendor. Conversely, my bosses <em>did</em> have a relationship with the vendor, but they might not have wanted to jeopardize it by pressuring the vendor to fix a security problem.</li>
<li><strong>Vague economic incentives</strong> — With this
vulnerability, it was unclear if anybody would ever know if a hacker had
been logging into the system and collecting information. If one had,
it’s vague where the burden of the problem would fall. It’s not certain
whether it would fall on my organization or the vendor. And anyway,
because <a href="http://www.hhs.gov/ocr/privacy/"><span class="caps">HIPAA</span></a>
is so massive, and because there are many other laws that come into play
(such as the <a href="http://www.dmv.ca.gov/pubs/vctop/appndxa/civil/civ1798_82.htm"
target="_blank">data breach laws of <span class="caps">CA</span></a>), it’s unclear what exactly they
would have to to as a result.</li>
</ol>
<p>Some things did not factor in that one might expect to be relevant:</p>
<ul>
<li>Everybody wanted to fix it. Nobody thought it shouldn’t be fixed or that it shouldn’t be prioritized.</li>
<li>Nobody dropped the ball and didn’t get it done.</li>
<li>There were no structural impediments to getting it reported to the proper people.</li>
<li>It wasn’t a complicated or difficult thing to fix.</li>
<li>It wasn’t a trivial problem, nor one that was difficult to exploit.</li>
</ul>
<p>In sum therefore, it appears that it was economic, social and personnel challenges that caused this to take so long to be fixed. So what can we do to fix these types of problems? A number of things come to mind:</p>
<ol>
<li><strong>Full-time security personnel</strong> — The most important thing for one of the organizations to do is to hire somebody to complete regular security audits. This person needs to be hired full time so that they understand the complexity of the problems, and so they can be there to push the solutions forward until things are fixed.</li>
<li><strong>Clarity of economic burden</strong> — With so much information being stored in the system, it should be made explicit to both parties what the plan is in case of a data loss, and where the burden lies in that event.</li>
<li><strong>Shared bug reporting</strong> — Currently, there are about fifteen organizations that use this vendor for their information management, however there is no shared system of bug tracking or reporting. As a result, when security problems are found, organizations have no organized way to share information with each other. Because each organization has a relationship to maintain with the vendor, none of them want to make the product look bad or vulnerable. This isolates the information, reducing the pressure on the vendor to fix such problems.</li>
<li><strong>Prioritization of security fixes</strong> — Finally, it’s vital that such problems be prioritized so that they do not fall by the wayside, and so that they can all be fixed before they are exploited.</li>
</ol>Firefox Extension Fixes2009-09-09T13:15:46-07:00Mike Lissnertag:michaeljaylissner.com,2009-09-09:posts/2009/09/09/firefox-extension-fixes/<p>Just a quick post today. For some time I’ve been using the Firefox <a
href="https://addons.mozilla.org/en-US/firefox/addon/8636">Long <span class="caps">URL</span> Mobile
Expander</a>. It’s a great add-on that expands the URLs from about <a
href="http://longurl.org/services">two hundred <span class="caps">URL</span> shortening services</a>
such as tinyurl.com and bit.ly. One problem it has though is that when you
open certain files locally on your computer, it throws an error:</p>
<div class="highlight"><pre><span class="n">error</span><span class="o">:</span> <span class="n">current_domain</span> <span class="k">is</span> <span class="kc">null</span>
</pre></div>
<p>This is a pretty annoying error, and some kind person tracked it down and
posted the fix in the comments. They did not, however,
post an updated version of the add-on. So, attached to this message is the fixed version.</p>
<p>A second extension that I’ve been using for a long time is the <a
href="https://addons.mozilla.org/en-US/firefox/addon/3818"
target="_blank">Resizeable Textarea</a> add-on. It allows you to drag the edge of text areas and form fields so that you can make them as big (or small) as you like. Unfortunately, the author hasn’t updated the add-on since 2006, so it doesn’t work on recent versions of Firefox. This is easy to fix, so I updated this one as well, and attached it to this post. </p>
<p>Enjoy.</p>
<p><strong><span class="caps">EDIT</span>:</strong> Per the creator’s comments below, you can find an updated and
fixed version of the Long <span class="caps">URL</span> Expander in experimental status here: <a
href="https://addons.mozilla.org/en-US/firefox/addons/versions/8636#version-2">https://addons.mozilla.org/en-<span class="caps">US</span>/firefox/addons/versions/8636#version-2</a>.
<strong><span class="caps">EDIT</span> 2:</strong> Turns out that the fixed version of Resizeable Textarea on the
mozilla site doesn’t actually work. Here’s <a href="https://michaeljaylissner.com/archive/resizeable_textarea-0.1d-fx.xpi">a fixed version</a>.</p>Rethinking Facebook Privacy Settings2009-08-17T12:09:06-07:00Mike Lissnertag:michaeljaylissner.com,2009-08-17:posts/2009/08/17/rethinking-facebook-privacy-settings/<p>Ars Technica has <a href="http://arstechnica.com/web/news/2009/08/meshing-social-networking-and-privacy-on-facebook.ars">an article</a> today outlining some excellent techniques for safeguarding your privacy while using Facebook. One of the best methods explained in the article is to cordon off your friends into different groups of people, and to then set different permissions for those groups. Thus, the common technique is to put your ex-partners into one group, your friends into another, family into another, and thus down the line.</p>
<p>But in practice this technique is nigh on impossible. I have family members (such as cousins) that are close friends, and so-called friends that, really, I haven’t talked to since high school. Beyond this, managing the groups is a problem too since over time, some of your friends become closer and others more distant. </p>
<p>Thinking through this problem, I have come up with a better, and perhaps more obvious solution: Simply organize your Facebook friends into groups based on how much you want those people to know about you. In practice I found this to be fairly simple with only three groups: Loose Privacy, Standard Privacy, and Strict Privacy. Bosses, ex-partners and distant friends go into the Strict category, close friends and current partners go into the Loose category, and everybody else goes into the Medium category. </p>
<p>Admittedly, this dumbs down the power that Facebook gives you to categorize your friends into groups, but in practice, it’s much easier to maintain, since there are only three lists, and it’s clear who belongs in which.</p>
<p>A second group of settings that people are likely unaware of are those that “limit what types of information your friends can see about you through applications.” These are important and creepy because by default, when your friends install an application, that application can see and aggregate an incredible quantity of information about you, even without your or your friend’s permission or knowledge. As part of its <a href="http://dotrights.org">dotrights campaign</a>, the <span class="caps">ACLU</span> is currently working on an application that demonstrates this loophole, but for the moment, it’s probably wise to adjust these settings. </p>
<p>To adjust these settings so third-party applications can see as little information as possible (without your friends simply not using them), go to Settings > Privacy > Applications, and then click on the “Other” tab (<a href="http://www.facebook.com/privacy/?view=platform&tab=other">this link</a> should also work, if you’re logged in). Once on that page, uncheck all of the boxes in the first section, and save your settings.</p>Firefox Modifications for Maximal Screen Real Estate and Usability2009-08-12T11:34:22-07:00Mike Lissnertag:michaeljaylissner.com,2009-08-12:posts/2009/08/12/firefox-modifications-for-real-estate-and-usability/<p>I’ve been playing around lately with concepts to make Firefox more useful on
my laptop, and I’ve come up with a few solutions I thought I would share.
The idea here is to take the best concepts from Chrome and Safari,
and apply them to Firefox. These changes will maximize your use of screen
real estate, and will make Firefox a little easier to use at the same time.</p>
<p>Once these are set up, Firefox will look like this:</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/Firefox Screenshot.png" /></p>
<p>These changes do the following:</p>
<ul>
<li>Reduce the status bar to 1px at the bottom of the screen</li>
<li>Reduce the menu bar to a small icon to the right of the <span class="caps">URL</span> bar (like Chrome)</li>
<li>Move the tabs to the top of the browser (like Chrome)</li>
<li>Highlights the domain part of each <span class="caps">URL</span> (like Chrome)</li>
<li>Make links appear in the <span class="caps">URL</span> bar when you hover over them (since the
status bar is eliminated)</li>
<li>Show a progress bar in the <span class="caps">URL</span> bar rather than in the status bar (like Safari)</li>
</ul>
<p>The changes that are needed to enable all this are a bit complicated,
but not too bad:</p>
<ul>
<li>Eliminating the status bar at the bottom of the screen creates about 35
pixels of vertical space that is otherwise not used for very much. By
making it only one pixel, hovering over the bottom of your browser window
will pop it up, in case you need it. To do this,
you need the <a href="https://addons.mozilla.org/firefox/addon/2108">Stylish extension</a>, and <a href="http://userstyles.org/styles/3600">this Stylish script</a>.</li>
<li>Reducing the menu bar to only a small icon achieves the same goal of
creating screen space. To do so, I recommend the <a href="https://addons.mozilla.org/en-US/firefox/addon/4550">Compact Menu</a>
extension. A word of warning though: this one takes some configuration
after installation. (The Tiny Menu extension will also work,
but you can’t move the icon to the right-hand side,
which makes the back button much more difficult to use.)</li>
<li>After some consideration, I decided to move my tabs above the <span class="caps">URL</span> bar
because the <span class="caps">URL</span> bar and the associated buttons really do apply to whatever
page is being displayed. Which is to say that the <span class="caps">URL</span> is part of the tab,
and should be displayed under it - not vice versa. To make this change
is pretty easy - simply install the Stylish script <a href="http://userstyles.org/styles/10986">found here</a>.</li>
<li>Highlighting the domain in the <span class="caps">URL</span> bar, and graying out the rest is a
simple and useful trick that helps to avoid scam sites that might be
trying to impersonate a valid web site. To make this change,
simply install the <a href="https://addons.mozilla.org/en-US/firefox/addon/4014">Locationbar<sup>2</sup> extension</a>.</li>
<li>Since we eliminated the status bar, one thing we’ll need back is the
ability to see where a link takes us before we click on it. By making it
appear in the <span class="caps">URL</span> bar rather than the status bar, our eyes only need to
look in one place, and the result of clicking on a link is shown to us
before we click on it. To make this change, there is a setting in the
<a href="http://mozilla.zeniko.ch/fission.html">Fission extension</a>, which is also used to display progress in the <span class="caps">URL</span> bar.</li>
</ul>
<p>You might note at this point that in the screenshot above that I’ve also
eliminated the search box from the navigation toolbar,
thus allowing more space for the <span class="caps">URL</span> bar. To replace the search box’s
functionality, I recommend the <a href="http://cybernetnews.com/cybersearch/">Cybersearch extension</a>, which uses keywords
in the <span class="caps">URL</span> bar to complete searches. For example, if I type “wiki windows,”
it gives me the top ten wikipedia pages for the term windows:</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/Firefox Cybersearch Example.png" /></p>
<p>This also works for Google and Amazon, and just about any other site you
can think of.</p>
<p>Once all of this is completed, you should have created about 70 vertical
pixels of new space in your browser, maintained all the previous
functionality, and improved the usability of a couple of tasks.</p>Making Prey of Computer Thieves2009-07-25T22:39:35-07:00Mike Lissnertag:michaeljaylissner.com,2009-07-25:posts/2009/07/25/making-prey-of-computer-thieves/<p>Laptops get stolen. It sucks, but we know it happens from time to time.
Recently, I’ve been checking out programs that can help to catch the
thieves (and dabbling in writing my own).</p>
<p>One program that I found, called <a href="http://preyproject.com">Prey</a>, helps to do just this. Once
installed, every few minutes it will check a website to see if a page
exists. If that page exists, it will collect a bunch of information about
the computer, and send that (using <span class="caps">SMTP</span> of your choice) to an email address
of your choice.</p>
<p>So, for example, if I set up a web page at http://michaeljaylissner
.com/laptop-stolen, in a few minutes, Prey will see that page,
and will collect the following information:</p>
<ul>
<li>The <span class="caps">IP</span> address where my computer is connected (this is almost as good as
the thief’s physical address)</li>
<li>The name of the wireless network my computer is connected to, and a list of
the others in the area</li>
<li>The <span class="caps">MAC</span> address of the wireless router my computer is connected to</li>
<li>How long my computer has been on (uptime)</li>
<li>Any files that have been modified in the last X minutes</li>
<li>Any programs that are currently running</li>
<li>Any open connections to websites or online services</li>
<li>A picture of the thief, if you have a webcam enabled</li>
<li>And best of all, a screenshot at the time of the report</li>
</ul>
<p>Once I get the email with all this information, it’s just a matter of taking
it to the police, and convincing them to take action on it. </p>
<p>Of course, all of this could be useless if the thief decides to immediately
wipe the data on the computer, but it’s a good safeguard that can weed out
the dumb thieves at least.</p>A Fresh Install of Vista on an HP Laptop2009-07-23T21:59:02-07:00Mike Lissnertag:michaeljaylissner.com,2009-07-23:posts/2009/07/23/a-fresh-install-of-vista-on-an-hp-laptop/<p>I just used a recovery disk to install Vista on an <span class="caps">HP</span> laptop. I’m shocked by what it came with. Just looking at the desktop shows the following software that was installed without me even being able to stop it:</p>
<ul>
<li>A shortcut to <span class="caps">AOL</span> Sign Up</li>
<li>Easy Internet Services</li>
<li>A shortcut to eBay</li>
<li>A “Get Vontage” shortcut</li>
<li>A High-Speed Services shortcut</li>
<li><span class="caps">HP</span> Help and Support</li>
<li><span class="caps">HP</span> Total Care Advisor</li>
<li><span class="caps">MS</span> Office 60 Day Trial</li>
<li>A shortcut to <span class="caps">MSN</span></li>
<li>My <span class="caps">HP</span> Games</li>
<li>Norton Antivirus</li>
<li>Photosmart Essential 2.0</li>
<li>Quickplay</li>
<li>Rhapsody</li>
<li>Vongo Free Trial</li>
<li>A giant Easy Sign-up dialog box</li>
<li>A Yahoo! search bar</li>
</ul>
<p>Good god. And I paid for this? Unbelievable.</p>Gnome-Do is Pretty Damned Impressive2009-07-22T14:42:37-07:00Mike Lissnertag:michaeljaylissner.com,2009-07-22:posts/2009/07/22/gnome-do-is-pretty-damned-impressive/<p>If you’ve talked to me about Ubuntu in the past year or so, I probably mentioned to you that one of my favorite things about using it is a program called <a href="http://do.davebsd.com/">gnome-do</a>. It’s a little hard to explain gnome-do without an example, so I’ll explain how I just made the following tweet, sharing a picture from my garden: <blockquote>Artichoke has finally flowered. It’s quite something: <a href="http://tinyurl.com/mn7pjp">http://tinyurl.com/mn7pjp</a></blockquote>To make this tweet, I needed to find the picture on my computer, upload it to the web, create a tinyurl of the picture’s location, and then tweet the <span class="caps">URL</span>.</p>
<p>Traditionally, the process would be the following:</p>
<ul>
<li>Open a web browser</li>
<li>Go to a photo sharing site</li>
<li>Find the upload button, and press it</li>
<li>Browse to the photo on your computer</li>
<li>Upload the photo</li>
<li>Right click the uploaded photo, and select “Copy Link Location”</li>
<li>Go to TinyURL.com, and shorten the <span class="caps">URL</span></li>
<li>Copy the new <span class="caps">URL</span></li>
<li>Go to twitter</li>
<li>Log in if necessary, and write your tweet
All in all a rather arduous process. Using gnome-do, the process is rather simpler. Gnome-do operates by allowing you to choose an object (such as a picture, a contact in your address book, an album, etc.), and then perform an action on it (such as upload the picture, write the contact an email, play the selected album, etc.) </li>
</ul>
<p>In this case, what I had to do was:</p>
<ul>
<li>Summon gnome-do by pressing Super + Space</li>
<li>Type the first few letters in the name of the picture</li>
<li>Press tab. Type “u” for “upload,” and press enter. This uploads the picture, and tells me its <span class="caps">URL</span> at imageshack.com.</li>
<li>Press tab, type “t” to “make a tinyurl” of the picture’s location at imageshack.</li>
<li>Type tab, then “copy” to copy the tinyurl to the clipboard.</li>
<li>Summon gnome-do a second time, and type out my twitter message, paste in the tinyurl, and press tab, then “post to twitter”.</li>
</ul>
<p>And that’s it. It sounds more complicated than it is. In reality, to make the above tweet, I pressed the following:<blockquote>Super + Space, Arti, u, enter. This uploaded the photo to imageshack.com, and returned it’s location.
Tab, t, enter. This created a tinyurl of the location.
Tab, c, enter. This copied the tinyurl to the clipboard.
Twitter message, <span class="caps">CTRL</span> + V, tab, t. This posted my twitter message.</blockquote></p>
<p>Clearly, there is a bit of a learning curve, and some configuration that you have to set up so it knows your usernames, but once it is set, it makes such complicated posts much easier to complete. And I should mention, this is only the beginning of what it can do.</p>The Contents of My First Aid Kit2009-07-17T21:15:02-07:00Mike Lissnertag:michaeljaylissner.com,2009-07-17:posts/2009/07/17/the-contents-of-my-first-aid-kit/<p>I present to you approximately a decade’s worth of first aid kit refinement.
Emphasis is on completeness and lightness. Inside a custom silnylon
envelope (with no zippers or fasteners that might slow down frostbitten,
missing or otherwise failing hands), I have the following:</p>
<ul>
<li>An ultra-fine tipped 0.5ml syringe</li>
<li>A 1ml glass vial of epinephren</li>
<li>One half sheet moleskin and a small quantity of mole foam</li>
<li>Ten butterfly adhesive bandages</li>
<li>One package steri-strips</li>
<li>Two 2” x 3” non-adhesive pads</li>
<li>Some gauze, but not much</li>
<li>A package of second skin</li>
<li>Two single-use eye droppers</li>
<li>Two stainless steel safety pins (one big, one small)</li>
<li>A small quantity of triple antibiotic ointment</li>
<li>One nitrile glove</li>
<li>A miniature backup chapstick with sunscreen</li>
<li>A single course of ciproplaxen</li>
<li>Thirteen 500mg Vicodin pills</li>
<li>Eleven 600mg ibuprofen pills</li>
<li>Seven 120mg pseudoephedrine hydrocloride (Sudafed) pills</li>
<li>Six diphenhydramine hydrochloride (Benadryl) pills</li>
<li>Dosage and indication instructions for all of the above pills</li>
<li>A <a href="https://michaeljaylissner.com/archive/SOAPA_Note.xls"><span class="caps">SOAP</span> note</a></li>
</ul>
<p>Total weight is 124.7 grams (4.4 oz.). Don’t take this as medical advice. </p>Impossibility of Complete Privacy2009-07-14T10:56:35-07:00Mike Lissnertag:michaeljaylissner.com,2009-07-14:posts/2009/07/14/impossibility-of-complete-privacy/<p>A short quote for you today from <em><a href="http://ssrn.com/abstract=721642">Property, Privacy and Personal Data</a></em> by Paul M. Schwartz:<blockquote>Already in the offline world, and in no small irony, direct marketers generate and sell lists of people who have expressed an interest in protecting their privacy.</blockquote>In other words, even if you don’t participate, you’ve participated. Gotcha.</p>Japan Pictures Posted, and a Sampling2009-06-28T13:14:27-07:00Mike Lissnertag:michaeljaylissner.com,2009-06-28:posts/2009/06/28/japan-pictures-posted-and-a-sampling/<p>N and I got back from Japan a few weeks ago, and we’ve finally gotten the
pictures posted. If you’re interested, let me know and I’ll send you a link
to the whole collection.</p>
<p>For now though, here are some samples of some of the good ideas, bad ideas,
and funny signs we saw.</p>
<p>Starting with the funny signs…</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Actually, keep out.jpg" /></p>
<blockquote>
<p>No camping, lighting fires, or…actually, while we’re at it, just stay out altogether.</p>
</blockquote>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Do it at the office.jpg" /></p>
<p>If we just had more signs like this one, the world would be a better place.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Foods mall.jpg" /></p>
<blockquote>
<p>No! It’s fine, our food won’t hurt you. Really!</p>
</blockquote>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Gentle Man.jpg" /></p>
<blockquote>
<p>I won’t hurt you either, I’m a gentle fellow. Look, I have a sign.</p>
</blockquote>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/My Head.jpg" /></p>
<p>Being 6‘6” tall, this one hit close to home.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/No danger.jpg" /></p>
<p>No danger allowed here folks. No danger allowed.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/No Smoking.jpg" /></p>
<p>For that matter, no pipe smoking is allowed either. Because lots of
Japanese smoke pipes.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/The Japan Times.jpg" /></p>
<p>In Japan newspapers will not have <span class="caps">FEAR</span>!</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Please use it willingly.jpg" /></p>
<p>It’s important to use doors willingly.</p>
<p>Moving onto the good and bad Japanese ideas….</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Airplane camera.jpg" /></p>
<p>Check out the screen, that’s a camera mounted on the bottom of the plane.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Bag lady.jpg" /></p>
<p>This woman sits and polishes and cleans empty plastic bags. All. Day. Long.
Recycling at its best/worst.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Bikes as stroller.jpg" /></p>
<p>Look closely at these bikes. They can fit two kids on the bike itself. No
trailers, not frills. Just useful, functional bikes.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Cross scissors.jpg" /></p>
<p><span class="caps">OK</span>, these are the worst idea ever. The Christians put a cross into the blade
of the scissor. So much for having scissors that actually work.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Nightlite.jpg" /></p>
<p>Check this out: Not only do florescent bulbs glow in the dark,
but night lights are built into most overhead lights. </p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Packaged apples.jpg" /></p>
<p>Japan takes apples seriously. Judge the wisdom yourself, I suppose.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Soundless Refrigerator.jpg" /></p>
<p>They’ve done it. They’ve made a silent fridge for hotel rooms.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Tame deer.jpg" /></p>
<p>On the other hand, they’ve tamed deer. This is a terrible idea. Deer are
annoying. See <a href="https://michaeljaylissner.com/crazed-deer">here</a> for details.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/japan/Umbrella racks.jpg" /></p>
<p>And finally, an umbrella rack with locks and keys, so everybody gets their umbrella back. What a crazy concept.</p>Every Now and Again, I Rant About iPods2009-05-24T23:34:44-07:00Mike Lissnertag:michaeljaylissner.com,2009-05-24:posts/2009/05/24/sometimes-i-rant-about-ipods/<p>Like the title says, every now and again, I have to rant about how annoying
iPods (and by extension, Apple) are. This is one of those times.</p>
<p>The picture below represents the folder hierarchy of my <span class="caps">20GB</span> iPod,
as displayed in the Ubuntu Disk Analyzer:</p>
<p><img alt="iPods Annoy Me" src="https://michaeljaylissner.com/images/ipods annoy me.png" /></p>
<p>Right now, this iPod is nearly full. I filled it with a very normal
hodge-podge of songs. Naturally, I like some artists better than others,
and so, I have more of their songs. <em>The Beatles</em> and <em>Zeppelin</em>, for example,
I have a lot of. <em>A-Ha</em>, and <em>Four Non Blonds</em>, not so much. When this is the
case, I’ll have a folder filled with lots of songs - a big folder. If you
look at the image above though, you’ll see that my iPod is organized into
50 equal directories, named r1 to r50.</p>
<p>Now, why would Apple do this? Why would they take perfectly organized songs
in neat and tidy folders and then split them into 50 folders with
meaningless names? Because that makes it more of a pain in the butt to
figure out what music is on the iPod, and in theory makes it harder to
share the songs. For the copyright violators, this should slow them down. </p>
<p>For the rest of the world, it’s a pain, because rather than browsing our
iPod like we would a normal music player, instead we must use iTunes, or,
if we use Linux, reverse engineer the thing, which invariably doesn’t work
that well. </p>
<p>Apple could have made a device that worked normally on all computers,
like everybody else did, but instead they have locked us into iTunes,
a weird directory structure, and a system designed to be as obscure as
possible. Not cool.</p>The Difficulties of Managing Online Estates2009-05-15T12:22:02-07:00Mike Lissnertag:michaeljaylissner.com,2009-05-15:posts/2009/05/15/one-more-project-posted-the-difficulties-of-managing-online-estates/<p>Well, one more paper down, one more to go! Today I completed the final paper
for <a href="http://courses.ischool.berkeley.edu/i205/s09/index.html">my class on information law and policy</a>, which was one of my best
classes this semester. It was a pretty tough one that required a <em>lot</em> of
reading and a lot of extra work for the assignments, but I found it quite
rewarding in the end. </p>
<p>The <a href="{filenames}/pdfs/online-estates.pdf">attached assignment</a> is in a similar vein to the one I posted on
Tuesday, but approaches the topic from a slightly different angle. The assignment in
this case was to present an analysis of some of the policy problems that are
raised by a project of our choice. Since I had already done a lot of thinking
about the policy implications of how we handle online assets after a death, I
decided to analyze some of the problems that are raised, and to postulate some
solutions of my own.</p>Final Paper on Online Memorialization by Default2009-05-13T11:25:10-07:00Mike Lissnertag:michaeljaylissner.com,2009-05-13:posts/2009/05/13/final-paper-on-online-memorialization-by-default/<p>Yesterday I had an epic writing session, and finished <a href="https://michaeljaylissner.com/pdfs/online-grieving.pdf">my final paper</a> for
my class on the social and organizational issues of information.</p>
<p>The topic of my paper was a bit on the morbid side, but somehow that’s what
I’m doing a lot of work on this semester. The concept for the paper is
that as more and more people create and have online profiles on social
networking sites, a system is created where more and more people have an
online memorial when they die, whether they intend to or not.</p>
<p>This topic became interesting to me about a year ago when my friend Blake
Bigler died of a sudden heart attack (at the age of 25). Immediately
afterwards, his Facebook page became a memorial to him where friends posted
messages, pictures and the like. To this day, friends still wish him a
happy birthday, and post notes on his page.</p>
<p>I thought that this was a dramatic change to the way that deaths occur and
are memorialized, and that it needed to be analyzed more carefully,
and so my paper was born. If you’re interested, please feel free to read.</p>This was Supposed to be My Patent Or, LG, Please Build This Already2009-05-13T11:12:12-07:00Mike Lissnertag:michaeljaylissner.com,2009-05-13:posts/2009/05/13/this-was-supposed-to-be-my-patent/<p>The other day, I was cooking some food in my microwave, and I thought to myself, can’t my microwave figure out when my food is hot itself? I mean really. We can see how hot things are using infrared cameras. We can put infrared cameras in microwaves. Why must we always type in a length of time that we want things to cook for, when really, all we want is to press a button labeled “Make my food hot.”</p>
<p>Well, I finally looked into this idea today. It’s been <a href="http://www.google.com/patents?id=MLYlAAAAEBAJ&dq=5693247">patented by <span class="caps">LG</span> since 1997</a>. So, there goes that idea. </p>
<p>I wish they would make one. Imagine a microwave where you dial the power level, then press go. When the food is hot, it stops. Ah, the future…err…the 1997 patent that never went anywhere. Maybe we can free this patent because it’s not <a href="http://en.wikipedia.org/wiki/Inventive_step_and_non-obviousness">non-obvious</a> anymore. Doubtful.</p>Final Project from Interface Aesthetics Class2009-05-07T20:42:13-07:00Mike Lissnertag:michaeljaylissner.com,2009-05-07:posts/2009/05/07/final-project-from-interface-aesthetics/<p>I had my last day of actual class today, and the semester is really
beginning to wind down. I still have at least 60 pages of writing to do in
the next two weeks, but somehow it will get done. One class that I
<em>have</em> finished my final project work for is <a href="http://courses.ischool.berkeley.edu/i290-20/s09/">Interface
Aesthetics</a>, which was a survey class covering typography, color,
layout, web design, and a handful of other topics. </p>
<p>For the final project, we each made <a href="https://michaeljaylissner.com/archive/interface-aesthetics.ppt">presentations of our work from the
semester</a>, and on Monday from 4:10 to 6pm we will be
holding an <a href="http://www.ischool.berkeley.edu/newsandevents/events/20090511exhibition">open house</a> to share our work at the iSchool. A lot of it
is really quite good, though this presentation is what I will be showing,
so this is one cat that’s out of the bag.</p>
<p>Some of the work in the attached could still use some refinement,
but I will point you towards the ones titled “Type I,” “Type <span class="caps">II</span>,”
and “Icons,” which I think came out pretty well.</p>Papa’s Got a Brand New Look2009-04-26T11:31:19-07:00Mike Lissnertag:michaeljaylissner.com,2009-04-26:posts/2009/04/26/papas-got-a-brand-new-look/<p><span class="caps">OK</span>, here’s the scoop. I’ve given the site a major revamp and a new look. </p>
<p>Here’s the old one:</p>
<p><img alt="Old site" src="https://michaeljaylissner.com/images/oldsite/v3.png" /></p>
<p>And the new:</p>
<p><img alt="Old site" src="https://michaeljaylissner.com/images/oldsite/v4.png" /></p>
<p>There were a number of reasons I wanted to make a change,
and I think the new design accomplishes most of them. First,
I wanted to change to a static width layout. It was a long time coming,
and now people with big screens and/or high resolution won’t have to deal
with ridiculous line lengths. Second, the new design should do wonders for
links, which didn’t really stand out before. Third, I’ve dropped the login
box at the right, since I was the only one that ever logged in. Actually,
I’ve dropped the whole column, so we’re down to two columns now, not three. </p>
<p>Something I wasn’t really planning on doing was the color change. I liked
the muted greens, but I think the topics I discuss have largely moved away
from environmental ones, so perhaps the blue makes more sense and will
better evoke what I’m going for. </p>
<p>Thoughts? Bugs? Comments?</p>Quiet Friday News About CIA Interrogation Techniques2009-04-17T18:36:34-07:00Mike Lissnertag:michaeljaylissner.com,2009-04-17:posts/2009/04/17/quiet-friday-afternoon-news-about-cia-interrogation-techniques/<p>Well, it’s a quiet Friday afternoon here in America, so that can mean only one thing: it’s time for organizations to release whatever news they’ve been trying to keep quiet for the week. This weeks’ big news is that a number of memos authorizing, rationalizing and generally condoning torture and interrogation <a href="http://news.google.com/news?pz=1&ncl=1334762857&topic=h">have been released to the <span class="caps">ACLU</span></a>. </p>
<p>There’s a couple of interesting facts here. The first is that <em>very</em> few of the 3,000 or so news articles about this topic seem to link to the <a href="http://www.aclu.org/safefree/general/olc_memos.html"><span class="caps">ACLU</span> site where the memos are prominently featured</a>.<sup>1</sup> I find this odd, and it gives me plenty of room for speculation. (Bad reporting? Laziness? Suppression? Something else?)</p>
<p>The second interesting thing is the quotes in the memos themselves. I haven’t had a chance to read all the memos yet, but I didn’t have any difficulty finding some good stuff. The memos begin with a classic “Top Secret” stamp, and go on to say things such as:<blockquote>…You would like to employ ten techniques…These ten techniques are: (1) attention grasp, (2) Walling, (3) facial hold, (4) facial slap (insult slap), (5) cramped confinement, (6) wall standing, (7) stress positions, (8) sleep deprivation, (9) insects placed in a confinement box, and (10) the waterboard</blockquote>
From a different memo:<blockquote>Detainees subject to sleep deprivation who are also subject to nudity as a separate interrogation technique will at times be nude and wearing a diaper. If the detainee is wearing a diaper, it is checked regularly and changed as necessary…</blockquote></p>
<p>They go on from there with great detail about how the interrogations go down, with the conclusion of course being that these things don’t constitute torture.</p>
<p><sup>1</sup> The math was done crudely. <a href="http://news.google.com/news?pz=1&ncl=1334762857&topic=h">Here’s</a> a google search that turns up 2,890 hits on the topic, and <a href="http://www.google.com/search?hl=en&num=20&q=link%3Ahttp%3A%2F%2Fwww.aclu.org%2Fsafefree%2Fgeneral%2Folc_memos.html+interrogation+memo&btnG=Search">here’s</a> one that searches for sites that link to aclu.org, and that have the words “interrogation memo”. The method is crude, but the overlap is sparse.</p>Who Is Entitled to Grieve and Why2009-04-13T19:39:27-07:00Mike Lissnertag:michaeljaylissner.com,2009-04-13:posts/2009/04/13/who-is-entitled-to-grieve-and-why/<p>I’ve been doing some research about how the Internet changes the way we
handle and cope with real life death, and I found a good quote today. It’s
not exactly about the Internet and death, but it’s interesting to think
about ways the Interne may have made relationships more complex and how
that has affected who is socially allowed to grieve.</p>
<p>From <em><a href="http://scholar.google.com/scholar?q=memorializing%20loved%20ones%20on%20the%20world%20wide%20web">Memorializing Loved Ones on the World Wide
Web</a></em>:</p>
<blockquote>
<p>There are unwritten but familiar rules, however, about who is entitled to
grieve. Pine, for example, claimed that in “compartmentalized society,
funerals tend to be limited primarily to the ‘proper’ bereaved people. This
has helped to create an underclass of grievers whose legitimacy may not
even be recognized and whose needs are not addressed.” Doka (1989)
identified these individuals as disenfranchised grievers: those whose grief
occurs in relationships with no recognizable kin ties; those whose loss is
not socially defined as significant; and those who are perceived to be
incapable of grief (e.g., young children, very old adults,
mentally-disabled persons)…As relationships become more complex,
the likelihood of disenfranchised grief and disenfranchised death increases.</p>
</blockquote>
<p>As somebody who has lost a couple of friends over the years that I was
fairly close to (but not best friends with), this definitely hits home.</p>A Real Problem You Should Fix. Now.2009-04-12T14:36:49-07:00Mike Lissnertag:michaeljaylissner.com,2009-04-12:posts/2009/04/12/a-real-problem-you-should-fix-now/<p>I’ve mentioned secret questions on my site before, but I never quite realized how much of a problem they are until today, when I discovered [uspublicrecords.com][1].</p>
<p>It’s a simple site. You put in a name, and if it has that person in its database, it gives you their age, middle name, and family members. So far, I haven’t found any names it <em>doesn’t</em> have.</p>
<p>Using this information, I went and checked a friend’s Gmail secret question, which was, “What is your father’s middle name?” I just happened to have that information from uspublicrecords.com, so I put it in, and changed their email password.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup></p>
<p>It’s pretty creepy how easy this is, and fixing this problem could take days as you check all your secret questions one by one. This might make a good mashup: a system for checking all your secret questions.</p>
<p>Anyway, now might be a good time to go change your secret questions, cause if it has anything to do with middle names, that site will hand them right out.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>With their <span class="caps">OK</span>, of course.
[1]: http://uspublicrecords.com <a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>A Python Function to Verify Twitter Credentials2009-04-03T19:09:25-07:00Mike Lissnertag:michaeljaylissner.com,2009-04-03:posts/2009/04/03/a-python-function-to-verify-twitter-credentials/<p>Thought I’d post this for the future generations, since I had a hard time
finding a template anywhere on the web when I needed one. It’s nothing
revolutionary, but a useful snippet nonetheless. This is for one of my
projects this semester.</p>
<div class="highlight"><pre><span class="kn">import</span> <span class="nn">pycurl</span>
<span class="k">def</span> <span class="nf">verifyTwitterCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">pycurl</span><span class="o">.</span><span class="n">Curl</span><span class="p">()</span>
<span class="n">c</span><span class="o">.</span><span class="n">setopt</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">URL</span><span class="p">,</span> <span class="s">'http://twitter.com/account/verify_credentials.xml'</span><span class="p">)</span>
<span class="n">c</span><span class="o">.</span><span class="n">setopt</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">USERPWD</span><span class="p">,</span> <span class="n">username</span> <span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">password</span><span class="p">)</span>
<span class="n">twitterfeed</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">perform</span><span class="p">()</span>
<span class="n">status</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">getinfo</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">HTTP_CODE</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">status</span><span class="p">)</span> <span class="o">==</span> <span class="s">'200'</span><span class="p">:</span>
<span class="n">verified</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">verified</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">c</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="n">verified</span>
</pre></div>An Analysis of FTC Behavioral Advertising and an End of Semester Countdown2009-04-02T14:44:40-07:00Mike Lissnertag:michaeljaylissner.com,2009-04-02:posts/2009/04/02/analysis-of-ftc-behavioral-advertising/<p>It’s coming down to the end of the semester, and after I finished <a href="https://michaeljaylissner.com/pdfs/ftc.pdf">the
attached paper</a> on <span class="caps">FTC</span> laws as the apply to online advertising,
I did some calculations to figure out what I have to do still. </p>
<p>Turns out I have 68-95 pages to write (give or take),
and two projects to complete between today and early May. Things are going
to get interesting. </p>
<p>The lay of the land looks like this:</p>
<ul>
<li>Two law/policy papers - total of 35-50 pages</li>
<li>One sociology paper - 25-35 pages</li>
<li>A final project combining some aesthetics work I have been doing</li>
<li>Two technology strategy assessments - total of eight pages</li>
<li>And an online project - watch for this soon</li>
</ul>
<p>For now, I’ll reserve my thoughts on the attached analysis, but I tried to analyze the ways that the <span class="caps">FTC</span> regulates online advertising…within an eight page limit. </p>Privatizing the Twitter API Feed2009-03-20T12:34:31-07:00Mike Lissnertag:michaeljaylissner.com,2009-03-20:posts/2009/03/20/privitizing-twitter-api-feed/<p><span class="caps">UPDATE</span>: Check the comments for a version with caching.</p>
<p>A friend of mine recently had a rather unfortunate event involving her twitter
public timeline, so I thought the time had come to make mine private, more or less.</p>
<p>As a result, I needed to update the code that pulls my most recent Twitter
posts into the left hand column so that it would authenticate using the
Twitter <span class="caps">API</span>. Here’s the new code - it ain’t pretty, but it works:</p>
<div class="highlight"><pre><span class="cp"><?php</span>
<span class="c1">// Your twitter username & password.</span>
<span class="nv">$username</span> <span class="o">=</span> <span class="s2">"YOUR_USERNAME"</span><span class="p">;</span>
<span class="nv">$password</span> <span class="o">=</span> <span class="s2">"YOUR_TWITTER_PASSWORD"</span><span class="p">;</span>
<span class="c1">//Concatenate the username and password</span>
<span class="nv">$userpass</span> <span class="o">=</span> <span class="nv">$username</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="nv">$password</span><span class="p">;</span>
<span class="c1">//Make up the feed URL</span>
<span class="nv">$feed</span> <span class="o">=</span> <span class="s2">"http://twitter.com/statuses/user_timeline.atom?count=1"</span><span class="p">;</span>
<span class="c1">//A function to parse the atom feed and pull out the useful info.</span>
<span class="k">function</span> <span class="nf">parse_feed</span><span class="p">(</span><span class="nv">$feed</span><span class="p">,</span> <span class="nv">$username</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$stepOne</span> <span class="o">=</span> <span class="nb">explode</span><span class="p">(</span><span class="s2">"<content type=</span><span class="se">\"</span><span class="s2">html</span><span class="se">\"</span><span class="s2">>"</span><span class="p">,</span> <span class="nv">$feed</span><span class="p">);</span>
<span class="nv">$stepTwo</span> <span class="o">=</span> <span class="nb">explode</span><span class="p">(</span><span class="s2">"</content>"</span><span class="p">,</span> <span class="nv">$stepOne</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span>
<span class="nv">$tweet</span> <span class="o">=</span> <span class="nv">$stepTwo</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="nv">$tweet</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span><span class="s2">"&lt;"</span><span class="p">,</span> <span class="s2">"<"</span><span class="p">,</span> <span class="nv">$tweet</span><span class="p">);</span>
<span class="nv">$tweet</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span><span class="s2">"&gt;"</span><span class="p">,</span> <span class="s2">">"</span><span class="p">,</span> <span class="nv">$tweet</span><span class="p">);</span>
<span class="nv">$tweet</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span><span class="nv">$username</span> <span class="o">.</span> <span class="s2">":"</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="nv">$tweet</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$tweet</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">//Create a curl object, give it the feed and authentication</span>
<span class="nv">$curl_handle</span><span class="o">=</span><span class="nb">curl_init</span><span class="p">();</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$curl_handle</span><span class="p">,</span><span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="nv">$feed</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$curl_handle</span><span class="p">,</span><span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="nv">$userpass</span><span class="p">);</span>
<span class="c1">//Return the result, don't print it.</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$curl_handle</span><span class="p">,</span><span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="c1">//Make the connection, set the variable, close the connection.</span>
<span class="nv">$twitterFeed</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$curl_handle</span><span class="p">);</span>
<span class="nb">curl_close</span><span class="p">(</span><span class="nv">$curl_handle</span><span class="p">);</span>
<span class="c1">//Echo the parsed feed. Done.</span>
<span class="k">echo</span> <span class="nx">parse_feed</span><span class="p">(</span><span class="nv">$twitterFeed</span><span class="p">,</span> <span class="nv">$username</span><span class="p">);</span>
<span class="cp">?></span><span class="x"></span>
</pre></div>
<p>One dependency is the php-curl library, and after you install that, apache2
will want a restart. </p>Zeran v. AOL Paper Posted2009-03-18T12:47:06-07:00Mike Lissnertag:michaeljaylissner.com,2009-03-18:posts/2009/03/18/zeran-v-aol-paper-posted/<p>I normally would post my work here for posterity when I finished it, but my latest assignment was actually due online as a Wikipedia article. </p>
<p>I chose to flesh out the <a href="http://en.wikipedia.org/wiki/Zeran_v._America_Online,_Inc.">Zeran v. <span class="caps">AOL</span></a> article, and man was it a lot of work. You take for granted the amount of labor that goes into a Wikipedia article until you write one yourself. </p>
<p>The case itself is pretty interesting, if I do say so myself. It’s one of the main cases that granted immunity to websites from the postings of third parties. What happened was that somebody posted some inflammatory T-shirts on an <span class="caps">AOL</span> bulletin board in 1995, and put down Kenneth Zeran’s name and phone number. He got hundreds of phone calls threatening and berating him, and decided to sue <span class="caps">AOL</span> as a result for distributing defamatory materials. </p>
<p>Unfortunately for Zeran though, between the time that the materials were posted, and the time that he sued, Congress passed the <a href="http://en.wikipedia.org/wiki/Communications_Decency_Act">Communications Decency Act</a>, which pretty much covers <span class="caps">AOL</span>’s back (and google’s, and yahoo’s, and youtube’s, and pretty much everybody else’s).</p>
<p>Sucks to be Zeran, but in the words of <a href="http://partners.nytimes.com/library/tech/00/02/cyber/cyberlaw/04law.html">one article on the subject</a>, “It…illustrates a hard fact of life: Sometimes there is no legal remedy for those who suffer wrongs.”</p>
<p>Interestingly, after all this, Zeran’s phone number is still on whitepages.com. I wonder if he knows…</p>Installing Tracker from Source2009-02-23T00:13:40-08:00Mike Lissnertag:michaeljaylissner.com,2009-02-23:posts/2009/02/23/installing-tracker-from-source/<p>I’ve been working over the past several weeks on getting Tracker to work better on my system. There are a couple reasons that I’m doing this. The first is that by default on Ubuntu, Tracker doesn’t support a number of meta formats (such as the tags in JPEGs, <span class="caps">ID3</span> info in MP3s, and the like). The second was that the <span class="caps">RDF</span> parsing code in the default Ubuntu version is a bit buggy, and the new version is better. It’s been a bit of a pain figuring out the install process, so I figured I’d post here so others might have an easier time.</p>
<p>The <a href="http://projects.gnome.org/tracker/start.html">online instructions</a> say to simply download the code, and to install it. No big deal, right? Well…in reality, it’s a bit harder than that. The process I went through was to download the source from <a href="http://projects.gnome.org/tracker/download.html">here</a> per the instructions, unpack the source files, and to run the configure command. </p>
<p>After the configure command is run each time, it will give you a summary of which components will be installed, and which will not. If you have all the dependencies necessary, and include a couple of arguments to the configure command, everything will get installed. If not, certain pieces will be missing. </p>
<p>The list of dependencies is a bit long, so before you run ./configure, you might as well install them. To do so, run:</p>
<div class="highlight"><pre>sudo aptitude install libgmime-2.0-2a libgmime-2.0-2-dev dbus-glib-1-dev libdbus-glib-1-dev libhal-dev libhal-storage-dev sqlite3-dev libsqlite3-dev libexif-dev libdeskbar-tracker libgsf-1-dev libjpeg62-dev libtiff4-dev libxine-dev libpoppler-dev libgstreamer0.10-dev libpoppler-glib-dev libtotem-plparser-dev libunac1-dev libexempi-dev libraptor1-dev libtracker-gtk-dev libgnome-desktop-dev libgnome-desktop-dev libnotify-dev
</pre></div>
<p>Once those are installed, run:</p>
<div class="highlight"><pre>./configure --enable-deskbar-applet --enable-tracker-applet --prefix<span class="o">=</span>/usr --sysconfdir<span class="o">=</span>/etc
</pre></div>
<p>After this, it should say that pretty much everything will be installed. If so, you can proceed to the commands below, and once those are complete, the latest version should be installed with full functionality.</p>
<div class="highlight"><pre>make
sudo make install
</pre></div>
<p>If after running your configure script (<code>./configure</code>) it doesn’t
indicate that everything will be installed, put in a comment below, and we’ll
see what we can do.</p>Snow Camping in Sequoia2009-02-20T19:25:01-08:00Mike Lissnertag:michaeljaylissner.com,2009-02-20:posts/2009/02/20/snow-camping-in-sequoia/<p>I went snow camping with some friends in Sequoia National Park last weekend,
and had a blast as always. We built a quinzhee and went snow shoeing and cross
country skiing. The pictures are online if you are interested in seeing them,
and per my custom, I brought along a couple of iButtons so that we could
record our temperature the entire time. </p>
<p>I set them up to record the temperature every five minutes to an accuracy of
0.1 degree Celsius. I just got a chance to work with <a href="https://michaeljaylissner.com/archive/sequoia-temps.xls">the data</a> a bit and I
threw together a quick chart. The data are attached, if anybody is interested,
but the chart really tells the story better than the 2,400 data points do.</p>
<p><a href="https://michaeljaylissner.com/images/Labeled Temperatures2.png"><img alt="iButton Temperatures" src="https://michaeljaylissner.com/images/Labeled Temperatures2.png" /></a></p>
<p><a href="https://michaeljaylissner.com/images/Labeled Temperatures2.png"><em>Click for full-size view</em></a></p>Location Based DNS Switching For Internet vs. Intranet2009-02-19T20:45:10-08:00Mike Lissnertag:michaeljaylissner.com,2009-02-19:posts/2009/02/19/location-based-dns-switching-for-intranet-vs-internet/<p>I realized over the weekend that since I run my own mail server out of my
home, I can configure my computer to download my mail over the intranet
whenever I am on my home network. By doing this, I can drastically reduce my
mail download times because it cuts the Internet out of the equation. Rather
than using <span class="caps">DNS</span> + the Internet to get my mail, I can download it directly
from internal <span class="caps">IP</span> address of the server. </p>
<p>To understand how to set this up, you have to understand that whenever you
use a domain name (like michaeljaylissner.com), your computer does an <span class="caps">IP</span>
lookup. First, it looks in /etc/hosts to see if it knows the <span class="caps">IP</span> of the
domain locally. If it does, it will use the <span class="caps">IP</span> listed there. If it does
not, it will ask your Internet provider what <span class="caps">IP</span> to use,
and will use that. Thus, what we want to do is set up the computer so that
when we are at home, /etc/hosts provides the internal <span class="caps">IP</span> of our server,
and so when we are not at home, it does not.</p>
<p>When I am at home, I am always on a wireless network called,
<code>pizzapuppysantaclaus</code>. Thus, by checking what wireless network I am
connected to, I can check if I am at home, and make whatever changes are
necessary. Conveniently, whenever you change network connections,
you run all of the scripts located in <code>/etc/network/if-up.d/</code>. Thus,
we will put a small script in there that checks what wireless network we are
on, and then changes our /etc/hosts file if necessary.</p>
<p>To set up this configuration, I made three files. The first is the script
mentioned above, which needs to be owned by root,
and placed in <code>/etc/network/if-up.d</code>. You can name it whatever you want,
and by changing <code>pizzapuppysantaclaus</code> to the name of your network,
you can fit it to your needs. Here’s the contents of the script:</p>
<div class="highlight"><pre><span class="c">#First, we check if we are connected to pizzapuppysantaclaus</span>
<span class="c">#If grep has a hit, we're connected, and $? will equal 0, if not, $? will equal 1</span>
iwconfig 2> /dev/null | grep pizzapuppysantaclaus > /dev/null
<span class="k">if</span> <span class="o">[</span> <span class="nv">$?</span> <span class="o">=</span> 0 <span class="o">]</span>
<span class="k">then</span>
<span class="c">#Switch the /etc/hosts file with the other one</span>
cp -f /etc/hostsIntranet /etc/hosts
<span class="k">else</span>
<span class="c">#Switch the /etc/hosts file with the other one</span>
cp -f /etc/hostsInternet /etc/hosts
<span class="k">fi</span>
<span class="nb">exit </span>0
</pre></div>
<p>This script simply performs a check of our wireless <span class="caps">ID</span>. If it’s
<code>pizzapuppysantaclaus</code>, it switches <code>/etc/hostsIntranet</code> for <code>/etc/hosts</code>. If
not, it switches <code>/etc/hostsInternet</code> for <code>/etc/hosts</code>.</p>
<p>The contents of <code>/etc/hostsIntranet</code> are:</p>
<div class="highlight"><pre>192.168.1.132 michaeljaylissner.com
192.168.1.132 charityhikers.org
127.0.0.1 localhost
127.0.1.1 opal
<span class="c"># The following lines are desirable for IPv6 capable hosts</span>
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
</pre></div>
<p>And <code>/etc/hostsInternet</code> is just a copy of <code>/etc/hosts</code>. </p>
<p>So, to make this whole thing run, put the script in <code>/etc/network/if-up.d</code>,
and set its owner to root with execute permission. Create a file called
<code>/etc/hostsIntranet</code>, that contains your intranet configuration,
as shown above. Make a copy of your normal <code>/etc/hosts</code> file called
<code>/etc/hostsInternet</code>. </p>
<p>Once all that’s done, you should be all set. Any questions,
please feel free to comment!</p>Thoreau Would Have Found This Amusing…or not2009-02-13T17:06:29-08:00Mike Lissnertag:michaeljaylissner.com,2009-02-13:posts/2009/02/13/thoreau-would-have-found-this-amusing-or-not/<p>I played around with a new site today called <a href="http://wattzon.com">WattzOn.com</a> that helps
you to figure out how much energy your existence consumes on a daily basis.
It’s a pretty useful site because it asks pretty thorough questions,
and then reports on you vs. historical American, you vs. the world,
you vs. lightbulbs, etc. Here’s my consumption of energy:</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/wattzon.png" /></p>
<p>Pretty cool right? Who knew that my biggest environmental damage is coming
from government? Here’s me vs. historical Americans:</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/wattzon2.png" /></p>
<p>So I’m doing pretty well relative to the average American,
and I need to follow Thoreau’s advice about not paying my taxes. Got it.</p>The Latest Books and Classes2009-02-01T14:45:21-08:00Mike Lissnertag:michaeljaylissner.com,2009-02-01:posts/2009/02/01/the-latest-books-and-classes/<p>Well, another semester has begun at the School of Information, and so I figured I’d share my latest classes and books.</p>
<p>As of now, I’ve boiled my classes down to the following:</p>
<ul>
<li>Mixing and Remixing Information</li>
<li>Interface Aesthetics</li>
<li>Social and Organizational Issues of Information</li>
<li>Strategic Computing and Communications Technology</li>
<li>Information Law and Policy</li>
<li>Cyberlaw</li>
</ul>
<p>And somehow, I only had to buy three books and four readers this semester, for a total of $315. Somehow, this is more than last semester when I had five books and four readers. Oh well. The books from this semester are:</p>
<ul>
<li>Information Rules: A Strategic Guide to the Network Economy</li>
<li>Software and Internet Law</li>
<li>Pro Web 2.0 Mashups</li>
</ul>
<p>So far, classes are going well, but at least one of them will need to get cut. It’s going to be hard to decide, but luckily I don’t have to for another few months.</p>Twitter (and Facebook) Integrated2009-01-25T13:03:03-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-25:posts/2009/01/25/twitter-and-facebook-integrated/<p>I upgraded the site a bit today by adding my Twitter/Facebook feed to left-hand sidebar. To a <a href="http://spookyismy.name/resources/latest-twitter-update-with-phprss-_-part-one">teenager in Colorado</a> I am indebted for this script. Jeez, they just get younger and younger. </p>
<p>Let me know if you catch any bugginess. </p>Confused About Obama2009-01-23T13:35:55-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-23:posts/2009/01/23/confused-about-obama/<p>You know, I was 18 when Bush came into power. I had embarrassingly weak knowledge of politics, and didn’t vote in the election despite some people getting rather annoyed with me about it. I argued at the time (and I stand by this), that people should only vote if they know enough to vote the right way. At the time, I felt like I didn’t know enough.</p>
<p>It’s hard to remember how things were back then. Bush was obviously an idiot, but at the same time, it wasn’t obvious how much damage he would do (or that somehow he’d last eight years). My first hint that he was terrible was his thinking on stem cells, which pretty indisputably slowed medicine research for about a decade. Once I heard about this issue, I knew I should have voted, and became fairly active reading the news and learning the issues.</p>
<p>In a way, I can thank the Bush administration for being one of the most corrupt, damaging, and all-around God-awful regimes in American history. If it hadn’t been so terrible, I might not have gotten so interested. I think this is true for many of my friends as well.</p>
<p>I just spent some time looking at a few of <a href="http://www.whitehouse.gov/briefing_room/executive_orders/">Obama’s executive orders and memos</a>, and of the few I read, it’s pretty impressive. It’s been less than a week, and suddenly I’m having a lot more trouble being critical of the administration. If I’m not supposed to rag on Bush anymore, in a way, what do I do? Do I praise Obama? That’s not really my style. Maybe I should be critical of the Obama administration? But there’s not a lot to be too critical of just yet. </p>
<p>I’m a bit confused, in a good way. Here’s to hoping that Obama can keep it up, and to a new regime.</p>The Interactions of Law and Code2009-01-22T10:35:59-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-22:posts/2009/01/22/the-interactions-of-law-and-code/<p>For my new Cyberlaw course, we were assigned a reading by Lawrence Lessig
called <a href="www.lessig.org/content/articles/works/finalhls.pdf"><em>The
Law of the Horse</em></a>. In it, he writes about how code can control law, and
vise versa. He makes some good points that are intuitive yet bear saying
nonetheless. Cyberspace as it currently exists is a largely unregulated domain.
People can use it pretty much anonymously, so accountability is pretty limited.
Lessig argues that this is because of the architecture of the Internet as it
has been created by programmers.</p>
<blockquote>
<p>As the Net grows, as its
regulatory power increases, as its power as a source of values becomes
established, the values of real-space sovereigns will at first lose out. In
many cases, no doubt, that is a very good thing. But there is no reason to
believe that it will be a good thing generally or indefinitely. There is
nothing to guarantee that the regime of values constituted by code will be a
liberal regime; and little reason to expect that an invisible hand of code
writers will push it in that direction. Indeed, to the extent that code
writers respond to the wishes of commerce, a power to control may well be the
tilt that this code begins to take. Understanding this tilt will be a<br />
continuing project of the law of cyberspace.</p>
</blockquote>
<p>So in other words, cyberspace is a good place these days, ruled by fairly
liberal ideals, but there is no guarantee that it will stay that way, and we
may eventually need more regulation.</p>Working with matplotlib and pycairo2009-01-19T16:25:32-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-19:posts/2009/01/19/working-with-matplotlib-and-pycairo/<p>I spent a good part of my winter break working on learning <a href="http://python.org">Python</a> and
using it for projects. One project was the <a href="https://michaeljaylissner.com/posts/2008/12/21/yelp-scraper/">Yelp scraper</a> that I posted
about previously, and another was a report for my old work. </p>
<p>The report is a statistical analysis of the development of about 2,000 children
aged three and four. For those interested, I’ll try to post it here once
the final version is ready to go. In the past when making the report,
I had been frustrated because there was no easy way to script the creation
of the 30 or so charts that need to be made. Excel had been our data
analysis tool, and as such, we were stuck with either using <span class="caps">VBA</span> to create
charts, or to do it by hand. Since nobody knew <span class="caps">VBA</span>, we always just buckled
down and did the work by hand.</p>
<p>This time around, I discovered the <a href="http://matplotlib.sourceforge.net/"><code>matplotlib</code> Python library</a>,
and used that to create the charts. It was an pretty rough experience all
in all. While simple graphs can be created in about five lines of code,
creating complicated ones took a good amount of work. For example,
to change the tick markers on a graph requires that you create tick
objects, and then manipulate them each individually in a for loop. Granted,
I couldn’t customize them at all in Excel, but figuring out that kind of
change was a pain indeed. </p>
<p>The report itself required about 1,000 lines of code,
and each chart required about 100-200 lines. For custom charts,
I didn’t find the library that useful, however towards the end of the
report there are 30 charts, all of which are identical,
except for the data. For these charts, I was able to make a for loop that
created them all in about 20 minutes, whereas previously these took me a
few hours to make by hand. </p>
<p>Another library I spent some time learning was <a href="http://www.cairographics.org/pycairo/"><code>pycairo</code></a>,
which allows pixel by pixel editing of pictures. I had planned to use it to
do any editing to the charts that I was unable to accomplish with the
<code>matplotlib</code> library, but in the end, it was unnecessary. I have another
project coming up though that will use the <code>pycairo</code> library,
so look for that soon.</p>Final Papers on Metrics of Sustainability Class2009-01-13T11:35:43-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-13:posts/2009/01/13/final-paper-on-metrics-of-sustainability-class/<p>Last semester I took a class at the <span class="caps">UC</span> Berkeley School of Business (Haas)
entitled <em>Metrics of Sustainability</em>. It was an interesting class all
in all, though frustrating at times because of the emphasis on making
sustainability something that businesses will <strong><em>want</em></strong> to do. Our
professor was a jocular fellow, though his history at large companies
became evident in his notes on our final paper.</p>
<p><a href="https://michaeljaylissner.com/pdfs/energy-metrics.pdf">The paper itself</a> is designed to set up metrics for analyzing the social,
financial, and environmental sustainability of a company in the energy
sector. The project was at once overly simple and overly complicated. On
the one hand, it was really quite tempting to just write metrics like,
“Did you damage the environment during the last year?” “Did you lose
money?” On the other hand, writing complicated, and specific metrics was
really the name of the game, and the hard part was finding the balance
between the two. I was quite happy with the balance that we found,
but our feedback was that our metrics were too complicated,
and that there were too many of them. So it goes I suppose.</p>
<p>In any case, for those interested, <a href="https://michaeljaylissner.com/pdfs/energy-metrics.pdf">I have attached our metrics</a> for the
energy sector to this post.</p>Guantanamo to Close, But They’re Just Moving the Prisoners2009-01-12T23:17:53-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-12:posts/2009/01/12/guantanamo-to-close-but-they-are-just-moving-the-prisoners/<p>I was happy to read the news today that <a href="http://www.iht
.com/articles/2009/01/13/america/13gitmo.php?page=1">Obama
plans to close Guantanamo Bay prison camp</a>. This is good news for
America, and should be good news for the prisoners there. </p>
<p>As I read up on it though, I was saddened to hear that the prisoners are
just being moved to other countries. This is rather frustrating because as Noam Chomsky puts it — and I’m paraphrasing — there’s only one reason to have off-site <del>torture</del> prison camps: to go around American law.</p>
<p>I’m really not sure what the point is in closing Guantanamo if it just means
moving the prisoners elsewhere. Pretty stupid use of resources.</p>
<p>Here’s a juicy quote from the article:</p>
<blockquote>
<p>People who have conferred with transition officials said the incoming
administration appeared to have rejected a proposal to seek a new law
authorizing indefinite detention inside the United States. The Bush
administration has insisted that such a measure is necessary to close the
Guantanamo camp and bring some detainees to the United States.</p>
</blockquote>
<p>In other words, we could bring the prisoners to a camp in the U.S.,
but that would mean we couldn’t hold them in tiny cells indefinitely,
and that American law would be necessary. Wow. Can’t have that, can we?</p>Final Papers on Music Jukebox2009-01-07T00:00:00-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-07:posts/2009/01/07/jukebox-papers/<p>This semester for my <a href="http://courses.ischool.berkeley.edu/i216/f08/">Computer-Mediated Communication</a> class I had
the opportunity to work with a couple of guys on a project aimed at solving
a problem that we have in our society. While perhaps not the greatest
problem, the one we identified was how to choose music in a public location
that maximally pleases the maximum number of people, and further,
how to encourage real-world interaction among and between those people. In
other words, how to choose good music, and how to get people to talk to
each other rather than bury their nose in their computer.</p>
<p>To long-term readers of this blog, this may sound familiar,
as <a href="https://michaeljaylissner.com/posts/2008/01/02/public-jukebox-for-internet-cafes/">I proposed the idea of a democratic music jukebox a while ago</a>.</p>
<p>All in all, the project went quite well. It was a great team,
and we were able to write several papers explaining how such a system would
work, and what kinds of problems it would solve. We weren’t able to really
make the system, however we were able to create a <a href="http://people.ischool.berkeley.edu/~ryan/i216/jukebox-prototype/jukebox2.php">wireframe mockup</a>
which should give you some idea of what we had in mind.</p>
<p>For those interested in the idea, I’ve attached our <a href="https://michaeljaylissner.com/pdfs/cmc-final.pdf">final paper</a> and
<a href="https://michaeljaylissner.com/pdfs/cmc-poster.pdf">poster presentation</a> to this blog entry. The poster itself is a bit cut up
so it could be pasted together on poster board. Apologies for that.</p>Research Idea – The Age of the Internet2009-01-05T15:41:47-08:00Mike Lissnertag:michaeljaylissner.com,2009-01-05:posts/2009/01/05/research-idea-age-of-the-internet/<p>I blogged <a href="https://michaeljaylissner.com/posts/2007/12/28/firefox-last-modified-tip/">a while back</a> about a Firefox command that would tell you
the last modified date of the page you were looking at,
and it got me thinking….what is the age of the Internet on the whole?</p>
<p>I’ve been thinking about it a bit, and it seems like knowing this kind of
information could prove pretty useful for certain circles. If there was a
way to summarize the last modified date of every page on the Internet,
we could pretty easily figure out how useful the information is. </p>
<p>Firefox add-on? </p>Meyer Lissner Was Famous2008-12-31T13:50:36-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-31:posts/2008/12/31/meyer-lissner-was-famous-go-figure/<p>There has been some talk in my family over the years about my great
grandfather, Meyer Lissner. Over the holidays, I scanned some old photos,
and discovered that he was quite the famous fellow. Below is a <a href="http://en.wikipedia.org/wiki/Liberty_ships">liberty
ship</a> that was named after him in 1943.</p>
<p><img alt="Liberty ship named Meyer Lissner" src="https://michaeljaylissner.com/images/liberty-ship.jpg" /> </p>
<p>I also learned that my grandfather donated a <strong><span class="caps">LOT</span></strong> of his
papers to the Stanford Library as the <a href="http://content.cdlib.org/view?docId=tf858006bb&chunk.id=did-1.8.1&brand=oac">Meyer Lissner Papers</a>. I haven’t
read up much on him yet, but he seems pretty influential to California
history as part of a reform movement. </p>
<p>Interesting stuff. I’m going to have to do some researching on this fellow
one of these days.</p>Dear Mr. Gore2008-12-29T22:55:21-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-29:posts/2008/12/29/dear-mr-gore/<p>Honorable Al Gore
2100 West End Avenue, Suite 260
Nashville, <span class="caps">TN</span> 37203</p>
<p>29 December 2008</p>
<p>Mr. Gore:</p>
<p>I applaud your efforts towards educating the world on the subject of
anthropogenic climate change, and I congratulate you on your Nobel Prize. </p>
<p>I write today to urge you to adopt a more open copyright on your materials.
From what I can deduce, you are relying on the standard American copyright
for your movie, presentations and books. As a lawyer,
I am sure you are aware that this copyright system gives you incredible
strength to protect the fruit of your efforts, however for many people,
this system hampers their access to reading your books,
watching your movie, or enjoying your presentation.</p>
<p>You and the <span class="caps">IPCC</span> have been recognized as the greatest laborers towards
educating the world on this subject, and I understand if you have taken the
traditional route with your work. Recently however, as I began purchasing
the third copy of your movie to give away to a friend,
I couldn’t help but think about how great it would be if it were simply
streamed from your site.</p>
<p>There are many options for creating a more open copyright system,
and I hope you will take the time to consider the implications of your
current method.</p>
<p>Sincerely,</p>
<p>Michael Lissner</p>Food Choices2008-12-29T00:00:00-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-29:posts/2008/12/29/food/
<p>After having visited with so many people over the last couple weeks, I have been thinking that writing down some of my food restrictions would be useful. A lot of people ask me about these, and when they do, they really want to get it right. Hopefully this will help. </p>
<p>I’ve listed the generalities first, followed by exceptions to the rules, and then some explanations.</p>
<h2 id="foods-i-dont-eat">Foods I Don’t Eat</h2>
<ul>
<li>Meat - This includes cow, pig, chicken, fish - essentially anything with an eye except for potatoes. You can also find meat in broth, lard, beans, soup….</li>
<li>Gelatin - This is in a lot of things, mostly as a thickener, though it’s used for some other things too. Look for it in marshmallows, jelly beans, Jell-O, any rubbery “candy” (like Starbursts), See’s dark chocolate, and other stuff.</li>
<li>Hydrogenated oil <span class="amp">&</span> partially hydrogenated oil - This one is in a lot of food in the <span class="caps">U.S.</span> In many other countries, it has been banned. Look for it in margarine, peanut butter, candy, bread, junk food, and pretty much everything else.</li>
<li>Almost all bottled drinks and sugar or corn syrup drinks - This includes Coke, Pepsi, Sprite, water, Energy drinks, etc.</li>
<li>Rennet - This is sheep gut that is used to make a lot of cheese. I try to avoid it, when I can, but it’s hard to know if it’s been used.</li>
<li>Jägermeister - There are rules.</li>
<li>Fast food</li>
</ul>
<h2 id="foods-i-do-eat">Foods I Do Eat</h2>
<ul>
<li>Anything not listed above (I think)</li>
<li>Eggs - I’m pro choice ← That’s a joke, in case you missed it</li>
<li>Milk and milk products - I’m lactose intolerant though, so I minimize it</li>
<li>Beer - it’s not a soda.</li>
<li>Gatorade</li>
<li>Juice</li>
<li>In-N-Out fast food - It’s generally a lot better than other places</li>
</ul>
<h2 id="foods-that-confuse-me">Foods that Confuse Me</h2>
<ul>
<li>Escargot - Is it meat? Is it vegetable? Do I really care if it <em>is</em> meat?</li>
</ul>
<h2 id="reasons-for-the-madness">Reasons for the Madness</h2>
<p>Let’s start with the big one - Why I don’t eat meat. This one usually boils down to environmental reasons. In order to create meat, you have to create animals. And to create animals, you have to feed animals. Feeding animals is a waste when you can just eat the food they would eat instead. In other words, the lower you eat on the food chain, the better it is for the environment. When you eat an animal, you are also eating all the other foods that that animal ate during its life. That’s a waste. In addition, animals like cows and pigs create incredible amounts of methane, which happens to be a rather powerful (and in my estimation, avoidable) green house gas.<sup><small>1</small></sup></p>
<p>In addition to those reasons however, I ask you this: What good reasons are there to eat meat? I can think of two: It’s socially easier, and it tastes delicious. If it’s environment v. taste, I choose environment.</p>
<p>Moving on, hydrogenated oil is an easy one. I don’t eat it because it is <span class="caps">REALLY</span>, <span class="caps">REALLY</span> bad for you. It causes hardening of the arteries, higher cholesterol levels, diabetes, and one or two other rather impressive diseases. Like I say, they’ve banned it elsewhere, and soon it should be banned here. It’s the food industry vs. the people it serves. Eventually, with any luck, the people will win.</p>
<p>As for bottled drinks and corn syrup drinks, it’s a bit more complicated. The bottles are a huge environmental concern, since four out of five end up not being recycled, and since recycling isn’t a perfect process anyway. Beyond that, I don’t support the <span class="caps">U.S.</span> corn subsidy since it creates crazy economic scenarios that make no sense. Sugar is bad for you, I’m sensitive to caffeine (and it causes insomnia), and carbonation is bad for your teeth. Like with meat above, there is only one reason to drink these: the taste. Health, the environment, and good <span class="caps">U.S.</span> policy trump taste, and so I don’t drink these.</p>
<p>For fast food, the reasons abound, and I probably don’t need to go into them too much here. Ultimately, I don’t do fast food because of the way it is produced and the way it harms the environment and health of people around the world. I read a while back that every McDonalds burger sold in the <span class="caps">U.S.</span> costs about $6 in health damages down the road. That figure seems high, but clearly there is a deferred cost when eating these burgers. Again though, for me, I can’t think of any good reason <i><span class="caps">TO</span></i> eat fast food. It tastes nasty, slowly kills you, damages the environment, and, well, the list goes on.</p>
<p>Finally, as for Jägermeister, like I say, there are rules.</p>
<h2 id="references">References</h2>
<p><small><sup>1</sup></small>According to the <a href="http://en.wikipedia.org/wiki/Global_warming_potential#Values" target="_blank"><span class="caps">IPCC</span> 100-year global warming potentials</a>, methane is about 25 times worse than <span class="caps">CO</span><sub>2</sub></p>Yelp Scraper to Get Business Info in a Geographic Area2008-12-21T16:41:13-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-21:posts/2008/12/21/yelp-scraper/<p>I spent the past couple days on one of my first Python projects - using the <a href="http://www.yelp.com/developers">Yelp <span class="caps">API</span></a> to compile a list of restaurants in a defined geographic area.</p>
<p>It’s been a good project. Because of some limitations of the <span class="caps">API</span>, I had to do some interesting tricks to make it work. One problem with the <span class="caps">API</span> is that it only allows 20 hits per query, so if you want to do a big query, you have to divide it up into tiny queries that have fewer than 20 hits each. </p>
<p>To accomplish that, if a query gets 20 hits within those two points, it will divide the longer dimension of the rectangle created by the points in half, and perform a query on each of those two new rectangles. For each of those, if there are 20 hits, it will again divide it in two and perform two new queries, and so forth until less than 20 hits are found for the rectangle. Once less than 20 hits are found, the data is entered into a database. Once all the points have been added to the database, a comma separated file is created, and the program ends. </p>
<p>It was pretty incredible switching to Python for this project from my usual Java, and also using an official <span class="caps">API</span> for the first time. This project ended up being about 200 lines (half of which are comments). I can’t imagine how long it would be with Java, since I used some rather powerful Python modules to accomplish this (namely, csv, urllib <span class="amp">&</span> json).</p>
<p>If anybody is interested in seeing/using the code, let me know. It should be useful if you need a list of restaurants or other businesses in a certain area. Worthy causes only please!</p>Cheney is so shady, it pisses me off.2008-12-19T21:35:28-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-19:posts/2008/12/19/cheney-is-so-fing-shady-it-pisses-me-off/<p>Cheney is <a href="http://www.google.com/hostednews/ap/article/ALeqM5jz2z92QFdgFrIMAJC-4GQcHOm3MgD955ETCO0">at work</a> to keep his records from becoming public as part of
the National Archives when he goes out of office. </p>
<blockquote>
<p>The vice president alone may determine what constitutes vice presidential
records or personal records, how his records will be created, maintained,
managed and disposed, and are all actions that are committed to his
discretion by law.</p>
</blockquote>
<p>I can think of no reason why this would be necessary unless he’s the shadiest
person ever in office. Oh, right.</p>
<p>As an ex-government worker, I can testify to how ridiculous this is: It’s
really fucking ridiculous.</p>Dear God, This is a Terrible Interface2008-12-13T19:17:04-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-13:posts/2008/12/13/this-is-a-terrible-interface/<p>The <span class="caps">UI</span> for a <span class="caps">KDE</span> Python <span class="caps">IDE</span> is about the worst I have ever seen:</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/clutter.png" /></p>
<p>That’s about 90 buttons.</p>Rsnapshot Backup Solution OR Why Backing Up Is Hard To Do2008-12-09T22:06:48-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-09:posts/2008/12/09/rsnapshot-backup-solution-or-why-backing-up-is-hard-to-do/<p>I’ve been working on getting this post figured out for about five months. In this post, I am going to try to explain exactly how my backup works, and why. It’s ridiculously complicated at times, but the detail is necessary on paper in some form or other.</p>
<p>For my backup system, I rely heavily on <a href="http://rsnapshot.org">rsnapshot</a>, which is a tool that uses rsync and some perl scripting to create snapshots of directories. Rsync is a pretty awesome tool. It functions like a simple copy/paste, except that it will check the destination directory of the paste and will only copy the necessary rsnapshot. As such, it can be interrupted in the middle of a copy, and will be able to continue later where it left off. Perl is a scripting language that has been used with rsync to give it some extra power.</p>
<p>This power is the ability to perform incremental backups, which is to say that if I have <span class="caps">5GB</span> of data that I backup 10 days in a row, it will only take up about <span class="caps">5GB</span> of data, total. However, if I have <span class="caps">5GB</span> of data today, an additional <span class="caps">5GB</span> tomorrow, and another <span class="caps">5GB</span> the day after, which I backup each day for ten days, it will only require a total of <span class="caps">5GB</span> of space the first day, <span class="caps">10GB</span> the second day, <span class="caps">15GB</span> the third day, and no more space after that for the remaining 7 days.</p>
<p>This is important if you want to backup your data on a regular basis. Since I run a server, I have several things that I must backup. I back these up on a daily, weekly, and monthly basis. The list includes:</p>
<ul>
<li>My laptop is backed up wirelessly to the server’s hard drive</li>
<li>The email server gets copied to an external <span class="caps">USB</span> drive (this includes all the Zimbra configuration rsnapshot as well as thousands of emails)</li>
<li>The web server gets backed up to the <span class="caps">USB</span> drive (this includes the Drupal installation and the MySQL database)</li>
<li>Lots of configuration rsnapshot for the servers go to the <span class="caps">USB</span> drive (i.e. the /etc/ directory)</li>
<li>And finally, the backup configuration itself goes to the <span class="caps">USB</span> drive</li>
</ul>
<p>Each of these backups presents some challenging difficulties. For the web server, it is challenging because it is backing up MySQL, Zimbra and Drupal. In order to do this, I have to coordinate the MySQL database dump so that when the Drupal backup is triggered, it will copy the MySQL information over to the <span class="caps">USB</span> drive along with the normal Drupal information. For Zimbra, the email server has to be stopped, backed up, and then started again, which means control of the email server has to be carefully scripted.</p>
<p>The laptop presents a challenge because it is the only thing that is backed up wirelessly, and in order to do so, the server must authenticate itself to the laptop before it is allowed to log in and make the copies. If that wasn’t complicated enough, in addition, the laptop needs to be set up with a static <span class="caps">IP</span> address so that the server can find it to perform the backup. Finally, the laptop needs to be <span class="caps">ON</span>, and connected to the network when the server attempts the backup. </p>
<p>Once all of that is figured out logically, you have to authenticate the laptop to the server, create the scripts, backup configurations and cron rsnapshot. I have attached some of these configuration rsnapshot to this post, provided they don’t reveal too much of my network topology.</p>
<p>One final challenge that had to be overcome was connecting the <span class="caps">USB</span> drive to the server in such a way that it would always be mounted in the same location. In addition, I learned that <span class="caps">FAT32</span> doesn’t support file system links, and so I had to format the <span class="caps">USB</span> drive as ext3.</p>
<p>As of today, it’s about five months since I began this project, and I believe I can say that the backup happens flawlessly on a daily, weekly and monthly basis. There are a few things I’d like to change however:</p>
<ul>
<li><del>I’d like to get an email notification when a backup fails</del> — Done - See comment below.</li>
<li><del>I’d like to begin backing up /etc/ on my laptop</del> — Done</li>
<li><del>At one point, I was backing up a list of all the installed software on my system - it’d be nice to have that again</del> — Done - I wrote a python script to do so</li>
<li><del>The backup is unencrypted, so anybody can take the <span class="caps">USB</span> drive and have a heck of a lot of emails. Gotta fix that.</del> — See the note below in the comments for details.</li>
</ul>
<p><strong>Files of Interest</strong></p>
<ol>
<li><a href="https://michaeljaylissner.com/archive/rsnapshot/rsnapshotOpal.conf">rsnapshot configuration for my laptop</a></li>
<li><a href="https://michaeljaylissner.com/archive/rsnapshot/rsnapshotDrupal.conf">rsnapshot configuration for the Drupal server</a></li>
<li><a href="https://michaeljaylissner.com/archive/rsnapshot/rsnapshotEtcHome.conf">rsnapshot configuration for the backup configuration rsnapshot and the
<code>/etc</code> directory</a></li>
<li><a href="https://michaeljaylissner.com/archive/rsnapshot/rsnapshotZimbra.conf">rsnapshot configuration for the Zimbra server</a></li>
<li>Scripts to <a href="https://michaeljaylissner.com/archive/rsnapshot/ZimbraStop">stop</a> and <a href="https://michaeljaylissner.com/archive/rsnapshot/ZimbraStart">start</a> Zimbra</li>
<li>My <a href="https://michaeljaylissner.com/archive/rsnapshot/cronlist.txt">cron file</a></li>
</ol>
<p>All in all, this just goes to show that backing up is a very difficult thing to do properly and automatically. It’s one thing if you have a desktop that backs up to a <span class="caps">USB</span> drive. It’s another if you have a server and a laptop. Had I known how long this would take going into it, I’m not sure I would have figured it all out. How the average computer user is supposed to figure this out is beyond me.</p>We Knew It Existed - The Official Definition of The Internet2008-12-07T23:43:25-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-07:posts/2008/12/07/we-knew-it-existed-the-official-definition-of-the-internet/<p>On October 24, 1995, the Federal Networking Council met and decided that the
“Internet” refers to the global information system that:</p>
<ol>
<li>is logically linked together by a globally unique address space based on
the Internet Protocol (<span class="caps">IP</span>) or its subsequent extensions/follow-ons;</li>
<li>is able to support communications using the Transmission Control
Protocol/Internet Protocol (<span class="caps">TCP</span>/<span class="caps">IP</span>) suite or its subsequent
extensions/follow-ons, and/or other <span class="caps">IP</span>-compatible protocols; and</li>
<li>provides, uses or makes accessible, either publicly or privately, high level
services layered on the communications and related infrastructure described herein.</li>
</ol>
<p>Oh. Thanks for that.</p>To Be Silent is To Lie2008-12-05T17:01:32-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-05:posts/2008/12/05/to-be-silent-is-to-lie/<p><img alt="No alt" src="https://michaeljaylissner.com/images/eagle-badge.jpeg" /></p>
<p>C. William Steele<br />
Director<br />
National Eagle Scout Association<br />
1325 West Walnut Hill Lane<br />
<span class="caps">P.O.</span> Box 152079<br />
Irving, <span class="caps">TX</span> 75015-2079 </p>
<p>5 December 2008</p>
<blockquote>
<p>Sometimes to be Silent is to Lie</p>
</blockquote>
<p>— Miguel de Unamuno</p>
<p>Mr. Steele:</p>
<p>When I was four years old, I was a Tiger Scout. Later, I became a Cub Scout,
and then a Webelos. When I was old enough, I became a Boy Scout. Over the
next few years, I advanced in rank, became an Eagle Scout and achieved many
Eagle Palms. I had over 100 merit badges, was the Junior Assistant
Scoutmaster, went on the National Jamboree in Arlington, Virginia,
and the International Jamboree in Chile. </p>
<p>I was what could be considered one hell of a Boy Scout. Today,
with much bitterness and sadness, I give up the only remaining symbol of
those parts of my life. Today, I return to you my Eagle Scout Badge,
and in so doing, renounce and reject the prejudices and discriminative
practices of the Boy Scouts of America.</p>
<p>When I was about 16, I learned that agnostics, atheists and gays would not
be tolerated by the policies of the Boy Scouts. While it’s true that as of
2000, the supreme court backs your (well-funded) position as a private
organization to discriminate institutionally, that does not make it right.
Each of these positions flies in the face of scouting elsewhere in the
world, and each of them reinforces an environment in which people with
different opinions are awarded different value. While it is true that Baden
Powell said that “[no] man is much good unless he believes in God and obeys
His laws,” we sometimes must reflect on the beliefs of our founders,
and put them in the context of their day. When Baden Powell made this
remark, women had not yet gained suffrage, Nazi Europe had yet to come and
go, and apartheid had yet to be institutionalized, let alone dismantled. In
short, it was a different time.</p>
<p>We must ask ourselves what are we doing today that our children will disdain.
Today we live in a world where religious differences can be enlightening
and can lead to greater understanding of ourselves and our peers. Yet in
this world, religion can be used publicly as an accusation (Obama as Muslim),
and defenses to such accusations need not defend the religion,
only the man. We live in a world today where religious differences lead to
war, terrorism, and deaths of thousands of people. We live in a world where
an organization designed to create leaders out of boys discriminates based
on religion and sexual preference. If we are not careful,
our children and their children will not look kindly upon our time as one of
freedom of opinion and religion, but rather as one of oppression, war,
and discrimination.</p>
<p>Your organization has at its heart some of the greatest lessons I have
learned during my lifetime, and it saddens me greatly to be forced to
abandon it. I plan to have children one day, and it saddens me greatly that
they will not have the Boy or Girl Scouts of America in their lives. Most
of all though, it saddens me that a national organization would choose not
to include a diversity of people and opinions. </p>
<p>Enclosed is my Eagle Scout badge, one of my more treasured possessions. I
hope some day to get it back from you, and I hope someday that you will
realize the error of your ways.</p>
<p>Sincerely, </p>
<p>Michael Lissner
Eagle Scout, ‘98</p>It’s OK to Advertise the Holdiays Now…2008-12-02T08:53:23-08:00Mike Lissnertag:michaeljaylissner.com,2008-12-02:posts/2008/12/02/its-ok-to-advertise-the-holidays-now/<p>I noticed this year that the winter holiday advertising actually came <strong><em>before</em></strong> Halloween. I could be wrong, but didn’t it used to be a faux pas to do this before Thanksgiving? </p>
<p>Oh well, this is a few days late, but I just wanted to mention that it’s officially <span class="caps">OK</span> to roll out last year’s music and crank up the commerce pressure machine.</p>Rebuilding the 9th Ward in New Orleans2008-11-30T20:11:06-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-30:posts/2008/11/30/rebuilding-the-9th-ward-in-new-orleans/<p>I’ve spent Thanksgiving in the Deep South this year at my girlfriend’s
grandparent’s house. It’s been a great trip, but one thing about it keeps
plaguing me.</p>
<p>We spent a couple of days in New Orleans, and one of the places I insisted upon
seeing was the 9th Ward, where Katrina dealt some of the worst damage. I wanted
to see if people were recovering, and how much the place had been fixed up
since 2005 when the storm blew through.</p>
<p>What surprised me (aside from the <a href="http://www.flickr.com/photos/bisset_linda/3026355210/">markings</a>) is that people are moving
back into this area, rebuilding their houses, and generally, pouring money into
the location. On the one hand, it makes sense since it’s their home, but on the
other, I can’t help but think that <strong><em>somebody</em></strong> should stop
this from happening. From what I’ve learned while here, the 9th Ward is an area
of New Orleans that is going to flood if there is another hurricane
Katrina…which there will be sooner or later. Considering that Katrina
<a href="http://en.wikipedia.org/wiki/Hurricane_Katrina">killed almost 2,000
people</a> this seems rather unwise.</p>
<p>So, rather than moving back in, shouldn’t we be cutting our losses right about
now, finding somewhere for these people to live, and preventing another
disaster? Or is my logic flawed?</p>Civic Frustration2008-11-23T17:10:59-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-23:posts/2008/11/23/civic-frustration/<p>I was walking to work a few months ago, enjoying the crisp summer morning air, and I came to a stop light that instructed me to wait to cross. It being a one-way street, I looked left, saw no cars for a block and a half, and casually walked across the road, against the traffic light’s firm instruction. I continued walking for another third of a block, and then heard a siren blare behind me <em>on the sidewalk</em>.</p>
<p>Incredibly, I was getting pulled over (so to speak), by a motorcycle cop (now illegally riding on the sidewalk) for defying a traffic light while on foot. I was – and still am – in shock. I expressed my disbelief to the officer, “You’re kidding right?” He was not. “You have better things to do with your time, right?” He did not. He told me a woeful tale of how he has to call parents in the middle of the night to tell them that their child had been hit while crossing the road. I informed him that I was in fact a professional walker that literally walked halfway across the continent, and that I was pretty much <span class="caps">OK</span> crossing the street. He insisted he was doing me a favor, and teaching me a lesson.</p>
<p>For the 20 minutes that I stalled the guy, I did my best to make him realize that what he was doing was a waste of time, good faith and resources. I realized then and I realize now that this is the minority position when being ticketed by the cops, and I don’t think it helped me get out of the ticket. The whole time I was arguing with the guy though, I couldn’t help but think about all the waste that is caused by meaningless laws. Jay walking. Full-stops at stop signs. Waiting at red lights at <span class="caps">3AM</span>. The list goes on.</p>
<p>All of these things waste time, and don’t have particularly good purposes. We live for only so long, and how much of our time is stuck waiting because of laws that take morality, judgment, and reason out of the picture? Clearly, there is room for improvement, but somehow cops feel comfortable (righteous?) about giving these kinds of tickets.</p>
<p>Ninety-three dollars later, and I’ve cleared my name of this heinous crime on humanity. Surely something is wrong though, when cops have nothing better to do than to give this kind of ticket. Can’t we find better ways to use our resources? </p>A Music Cost Inventory2008-11-22T17:21:02-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-22:posts/2008/11/22/a-music-cost-inventory/<p>According to <a href="http://www.copyright.gov/title17/92chap5.html">Title 17, Chapter 5, section 504c2 of the <span class="caps">US</span> copyright law</a>, if you get caught with music that you have downloaded illegally from the Internet, you can get charged up to $150,000 per infringement. I thought I would do a little experiment to see how much I would be in for if my entire collection were to be found to be illegal. </p>
<p>Let’s do some math. I have 3,876 tracks, at $150,000 each. So if my entire collection were to be found illegal, that means it would cost me $581.4 million dollars — about .6 billion dollars. </p>
<p><span class="caps">OK</span>, let’s assume that I can live with that reality. It just seems odd that I could have bought those songs for $3,876 on amazon.com, or iTunes.</p>
<p>Something isn’t quite right here. Also, did I mention that all <span class="caps">US</span> digital music sales <a href="http://www.ifpi.org/content/section_resources/dmr2008.html">are estimated</a> to total $2.9B in 2007? That makes my music worth about 20% of the 2007 revenue.</p>Mr. Rogers on the Usage of VCRs2008-11-22T17:13:23-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-22:posts/2008/11/22/mr-rogers-on-the-usage-of-vcrs/<p>I found a good quote by <a href="http://en.wikipedia.org/wiki/Mr_Rogers">Mr. Rogers</a> himself today. I knew I always liked this guy. Too bad he couldn’t live forever. This quote is a bit dated, but the point is still good. It also helps to imagine his voice before reading this:<blockquote>Some public stations, as well as commercial stations, program the “Neighborhood” at hours when some children cannot use it. I think that it’s a real service to families to be able to record such programs and show them at appropriate times. I have always felt that with the advent of all this new technology that allows people to tape the “Neighborhood” off-the-air, and I’m speaking for the “Neighborhood” because that’s what I produce, that they then become much more active in the programming of their family’s television life. Very frankly, I am opposed to people being programmed by others. My whole approach in broadcasting has always been “You are an important person just the way you are. You can make healthy decisions.” Maybe I’m going on too long, but I just feel that anything that allows a person to be more active in the control of his or her life, in a healthy way, is important.</blockquote>You tell them Mr. Rogers. You tell ‘em.</p>More Details On Fire Last Night2008-11-14T13:29:56-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-14:posts/2008/11/14/more-details-on-the-fire-last-night/<p><strong>What Happened?</strong>
Last night around midnight, we heard a crash…might have been more like a bang. I thought it sounded like a bucket of junk falling off a shelf. When we looked outside to see what the sound was, we saw a car on fire across the street. I immediately called 911 and reported it. I had a fire extinguisher, but they kindly urged me not to use it. Not sure if I would have if they hadn’t. At that point, the fire was pretty small by comparison to the video, so I’m not totally insane. </p>
<p>When we first saw the car, the fire was only <span class="caps">ON</span> the top of the back of the car, which is what leads me to believe that the fire came from the outside, and that the bang was the impact of the molotov cocktail. Within a few minutes, the flame from the outside of the car had penetrated the gasoline tank, and gas was pouring onto the ground forming a flaming puddle. I believe the large explosion seen in the video is the gas tank getting hot enough to explode. This in turn led to the power lines melting and falling in a dramatic fashion onto the nearby Honda. </p>
<p>After about another two minutes, the fire department arrived and quickly put out the fire. It was fortunate that they arrived when they did because there is a large tree over the car that could have easily spread the fire to the neighboring buildings.</p>
<p>After another hour or so, the fire was out in both cars (it spread to the one next to it), and the electrical wire was neutralized. The news team came, but I didn’t want to do an interview. Nevertheless though, I did give them my movie, and they tell me it aired on the 5-9 morning news.</p>
<p><strong>Thoughts</strong>
I’ve been living here for about 4 years now. The hood has some issues which I’ve put some effort into trying to fix. Since living here, I’ve seen a guy chase another with a knife, I’ve cleaned up about 6 hypodermic needles, I learned of a bullet hole in a neighbor’s window, and I’ve heard from my window a murder from about a block and a half away. Now I can add molotov cocktail to the list.</p>
<p>Some of these things I know about only because I’m involved in the neighborhood, and I can chalk up to things that most people would be blissfully ignorant of. Others, like the arson and the knife chase are hard to ignore. </p>
<p>I like living in Berkeley, and I like my living situation - good roommates, affordable rent, a nice house - but it’s times like today when I have to reflect on why I am living across the street from a drug dealer, and if it’s really safe and practical for me and for others. My usual policy is to mind my own business, and they’ll leave me alone, which is quite true, but still, exploding cars are hard to ignore.</p>
<p>For years I have been telling friends that it’s safe to come here, that their car will be <span class="caps">OK</span>, and not to worry, that I have been fine for years. I’m still fine, but I think it might be a harder sale these days. I just hope things get better, not worse.</p>Car Arson Across The Street From My House2008-11-14T01:59:11-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-14:posts/2008/11/14/car-arson-across-the-street-from-my-house/<p>I’m guessing <a href="http://www.youtube.com/watch?v=Rd13wCaRfJA">it was a Molotov cocktail</a>. More details to come tomorrow.</p>Our Poor Great Grandparents2008-11-11T00:50:41-08:00Mike Lissnertag:michaeljaylissner.com,2008-11-11:posts/2008/11/11/our-poor-great-grandparents/<p>It’s important to have perspective these days. Times are changing, you know, and it can be hard to keep track of how things used to be. In that vein, I found an interesting quote from 1978:<blockquote>Children who begin school today have probably listened to more music than their great grandparents heard in their entire lives.</blockquote>It’s pretty hard to imagine music as such a treat, since I listen to it pretty much every day. </p>
<p>This also reminds me of the Stravinky’s <a href="http://en.wikipedia.org/wiki/The_Rite_of_Spring">Rite of Spring</a>, which was so raucous that it caused riots. These days people get offended by rap, punk and video games (oh my!), and claim that they make children into little ne’er-do-wells. </p>
<p>Riots though? I can’t imagine music causing riots ever again.</p>Misdirected Energies2008-10-31T00:07:18-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-31:posts/2008/10/31/misguided-energies/<p>From <em><a href="http://www.rmi.org/images/PDFs/WTOE/WTOE.pdf">Winning the Oil Endgame</a></em> (free login required):</p>
<blockquote>
<p>The average new <span class="caps">U.S.</span> light vehicle in 2003 had 24% more weight,
93% more horsepower, and 29% faster 0-60-mph time than in 1981,
but only 1% more miles per gallon. If 1981 performance had instead stayed
constant, light vehicles would have become 33% more efficient</blockquote></p>
</blockquote>
<p>It’s not a bad read, but it is 300+ pages of dense work.</p>Excess Elections Spending2008-10-29T14:16:35-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-29:posts/2008/10/29/excess-elections-spending/<p>We’re just about to the line here with the election, and I, for one, am really looking forward to a phone that stops ringing, to my mail carrier’s back feeling better, and to my inbox devoid of political emails. </p>
<p>Really, things have gotten out of control. In an <a href="http://ap.google.com/article/ALeqM5iXAkBilVhjbpsgAAHfgp6kGEShvwD944BQP84">article by the <span class="caps">AP</span> today</a>, the Republicans said that they were going to: <blockquote>“…send out over 200 million pieces of mail and have over a quarter of a billion contacts, counting the mail, the phones and the door knocks,”</blockquote>According to the 2000 census, there are about 227 million people in the <span class="caps">US</span> over the age 18. What that means is that if <span class="caps">ONLY</span> the republican party <span class="caps">ONLY</span> contacted me regarding the presidential race, they would still do so more than one time.</p>
<p>Unfortunately, both parties contact me at all levels of government from city to county to state to federal. And they both do it for each candidate, and every measure. Often they do it more than once. </p>
<p>Are there any numbers totalling the cost of elections nationwide? I’d be interested in seeing such a thing. What else could we buy with that amount of money? </p>Maps We Really Need to Use More2008-10-21T11:21:27-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-21:posts/2008/10/21/maps-we-really-need-to-use-more/<p>I stumbled across some incredible maps yesterday while looking at some maps of the status of the American election. </p>
<p>These maps use the Gastner and Newman algorithm (don’t ask me for details) to stretch a map to make sizes of countries correspond with some datum of interest. Generally, we study geography as a separate topic from useful stats, but these pictures show which countries are really important, and which might be candidates for less emphasis.</p>
<p>For example, we can take the map of the world, and stretch it so that we can see where the population of the world is located:</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/population800x400.png" /></p>
<p>Or we can analyze where the highest rates of <span class="caps">HIV</span>/<span class="caps">AIDS</span> can be found:</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/hiv800x400.png" /></p>
<p>Or total spending on health care (no surprises here):</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/healthcare800x400.png" /></p>
<p>Pretty interesting stuff. <a href="http://www-personal.umich.edu/~mejn/cartograms/">This link</a> includes more of these, and also software for making them yourself.</p>Yahoo! Drives Me Nuts2008-10-21T10:26:17-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-21:posts/2008/10/21/yahoo-drives-me-nuts/<p>I joined a yahoo group the other day, and I noticed that when Yahoo! shows my member information, it says I am three years younger than I am. “No problem” I thought to myself, “I’ll just edit my information, surely I put in the wrong birthday.”</p>
<p>I went into the member section, and (after giving them my password for the second time in two minutes) found where my birthday was listed as “on file.” I clicked the edit button for that section, and in the resulting page, it again said that my birthday was “on file.” It did not give me a way to change it.</p>
<p>Wondering how to change it, I decided to try the help tool. I searched for “change birthday,” which gave me the response:<blockquote>Q: Why can’t I change my birthdate, and why does it say, “on file”?
A: We use your birthdate as a security measure in case you forget your password. We would not be able to do so if you were able to change it.</blockquote>Great. Good work guys.</p>Change the Default Print to File To PDF in Ubuntu Hardy Heron2008-10-19T23:13:25-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-19:posts/2008/10/19/change-the-default-print-to-file-to-pdf-in-ubuntu-hardy/<p>In Ubuntu Hardy Heron there is a new printer driver that will print a webpage as a <span class="caps">PDF</span> file. It’s pretty useful, but unfortunately it’s set to print the page as post script format by default. While I appreciate post script, it’s not that compatible for other people, so I usually want to make <span class="caps">PDF</span> documents instead.</p>
<p>To change that setting to <span class="caps">PDF</span>, navigate in Firefox to about:config, and search for the setting called “print.print_to_filename”. Double click on it, and change the value to a more useful name than mozilla.ps, and change the extension to .pdf. I changed the setting to “Printed Page.pdf”</p>
<p>From there you should be all set.</p>
<p>Now, if anybody can figure out how to make the title of the webpage populate for the name of the saved file, we’ll be all set.</p>A Script to Kill Evolution2008-10-13T17:36:05-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-13:posts/2008/10/13/a-script-to-kill-evolution/<p>I use Evolution as my mail reader, and I like it. It has a lot of good features including a calendar, address book, memos and mail, as well as a number of others. One problem though is that it gets caught up when processing mail, and sometimes just won’t come back.</p>
<p>The other problem is that it has several helper apps that are behind the scenes making things work properly, so if you try to just kill the application itself, those will still be running and your problem may not be solved.</p>
<p>My solution was to write a short script to kill all of Evolution and its helper apps. Hope this helps somebody else someday:</p>
<div class="highlight"><pre>% more bin/evokill
<span class="c">#!/bin/bash</span>
ps aux | grep evolution
<span class="nb">kill</span> <span class="sb">`</span>ps aux | grep evolution | awk -F<span class="s1">' '</span> <span class="s1">'{print $2}'</span><span class="sb">`</span>
</pre></div>
<p>This script just looks for any application that has the word evolution in its name, and then sends it the kill signal. Not too sophisticated, but it gets the job done. You could easily substitute the word evolution for something else as well.</p>Radar Analysis Charts: Fun, Trendy, BAD!2008-10-08T16:08:09-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-08:posts/2008/10/08/cluster-analysis-charts-fun-trendy-bad/<p>There is this trend that seems to be popping up everywhere of using radar charts such as this one:</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/screenshot.png" /></p>
<p>For the record people, these are bad. They imply that there is some circular relationship about your data points. They are line graphs made into a circle. If you want to indicate the volume under a curve, make a line graph, fill the area under your curve, and then consider it done. Don’t use these unless your data points progress from A → B → C and then back to A. </p>
<p>Please? </p>
<p><em><span class="caps">EDIT</span>: I should add - don’t use line graphs for things that don’t progress from A to B to C either. For those things, use bar graphs, or column graphs.</em></p>Music Stats2008-10-08T14:35:46-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-08:posts/2008/10/08/music-stats/<p>I have this problem when I am listening to music that I almost never choose artists whose name starts with anything after the letter D. When I am browsing for music, I just never get that far in the list. For some time, I’ve wondered if this is my fault, or if I just have more music in the front of my collection.</p>
<p>The time came to do a little stats work and figure out why this is. Here are the results.</p>
<p>While there is a strong predominance of the letters A-E, there is also one in the P-T range. This leads me to believe that I should hunt for music in that area more often.</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/Number of Occurances Pentads-img1.png" /></p>
<p>While I expected A-E to come out ahead, who would have thought that B would have more than 80 artists, almost twice the second most common letter? </p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/Number of Occurances Pentads-img2.png" /></p>
<p>So, what conclusions does this lead to? One: That I need to look at my music beyond the letter D. Two: That B is a very popular letter.</p>
<p>For those wondering about their own music collection, if you browse to your music folder and run the following, it will tell you how many artists starting with that letter you have. For the example below, it tells me I have 30 artists with the letter ‘A’.</p>
<div class="highlight"><pre><span class="n">ls</span> <span class="n">Music</span> <span class="o">|</span> <span class="n">grep</span> <span class="o">-</span><span class="n">i</span> <span class="o">^</span><span class="n">a</span> <span class="o">|</span> <span class="n">wc</span> <span class="o">-</span><span class="n">l</span>
</pre></div>Piracy “Costs”2008-10-08T14:12:00-07:00Mike Lissnertag:michaeljaylissner.com,2008-10-08:posts/2008/10/08/piracy-costs/<p>Ars Technica has a <a href="http://arstechnica.com/articles/culture/dodgy-digits-behind-the-war-on-piracy.ars/1">good article today</a> about the costs of piracy where they debunk (in four glorious pages) two figures that are often cited to explain just how bad the piracy problem has become.</p>
<p>They’ve done an excellent job showing that the figures are absolutely bogus, but their conclusion really makes quite a point. For reference, the first figure is that 750,000 jobs have been lost due to piracy, and the second is that piracy costs $200-$250 billion. </p>
<p>Here’s a quote from the conclusion, after they have debunked both of the numbers:<blockquote>Neither figure is terribly plausible on its face. As Wired noted earlier this week, 750,000 jobs is fully 8 percent of the current number of unemployed in the United States. And $250 billion is more than the combined 2005 gross domestic revenues of the movie, music, software, and video game industries.</blockquote></p>
<p>Hmmm…sounds like these numbers might be a bit exaggerated.</p>The Argument for Encryption, and Why Vista Is Irresponsible2008-09-26T20:34:31-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-26:posts/2008/09/26/the-argument-for-encryption-and-why-vista-is-irresponsible/<p>We all agree that security is necessary for our data, but we all fall down when it comes to implementation. An example that I keep returning to is the need for encryption. I posted a few days ago about how Yahoo! doesn’t encrypt their email, allowing a sophisticated hacker to intercept any message to or from your account. </p>
<p>Today, I encountered my password in plain text in a configuration file that is easily accessible to anybody that gains physical access to my computer. The guilty program is the Pidgin <span class="caps">IM</span> client (<a href="http://developer.pidgin.im/ticket/5872">bug filed here</a>), which stores login and password information in an <span class="caps">XML</span> file in your home directory. I’ve seen files of this sort a number of times, and for some reason programmers keep using this technique.</p>
<p>Most people believe that if they have confidential information in their computers, and if they use a password on their computer, they’ll be <span class="caps">OK</span>. Nobody will be able to get past the password. While that isn’t entirely true (most passwords are easily broken), the thing to remember is that once a hard drive is removed from a computer, any of the data on it can be accessed — without the password. So, so long as programmers keep using this technique, sensitive data will still be out there.</p>
<p>The easiest solution to this problem is to encrypt your entire hard disk at all times. That way, even if your hard disk is removed from your computer, all the data is jumbled anyway. Ubuntu released this feature back in April, and Microsoft released this feature with the release of Vista. Unfortunately though, to receive encryption on your Vista installation, you have to buy Vista Ultimate, which costs $120 more than the Home version (<a href="http://www.microsoft.com/windows/windows-vista/compare-editions/default.aspx">at a cool $320!</a>).</p>
<p>As we trust more and more data on our computers, is this irresponsible product engineering? Absolutely. It costs Microsoft no more money to put encryption on all versions. Unfortunately though, they make more money by charging for it. </p>On Airport Security and Knives2008-09-22T16:39:48-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-22:posts/2008/09/22/on-airport-security-and-knives/<p><img alt="No Alt" src="https://michaeljaylissner.com/images/opinel_splits.jpeg" /> </p>
<p>I had the occasion to go through airport security over the weekend,
and I realized an interesting thing. If you want to get through security
with a large knife, all you have to do is try to slip one through in your
bag a few times over the course of a few days or weeks. </p>
<p>Each time you fail, you act like an idiot (“oops!”),
and give them the knife, proceeding without it to your airplane. Eventually,
the guy watching the x-ray screen will miss the knife, you will proceed,
and you will finally be able to cut your airplane steak.</p>
<p>I learned this lesson by accident when I nearly missed my plane. I had
planned on checking my small bag with the knife in it,
but when I arrived at the airport late (my fault), I could either miss my
plane, or try to sneak the knife through.</p>
<p>Since I didn’t want to miss my flight, I tried and succeeded to get the
pictured knife through. Pretty amazing that a three inch blade can pass
right by, eh?</p>
<p>I wonder if terrorists are patient…</p>Quick Update on my Prostate2008-09-17T15:24:10-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-17:posts/2008/09/17/quick-update-on-my-prostate/<p>Well, there is an interesting development in the theft of my credit card
number. Today I received supplements in the mail for my prostate. Supplements
that were bought with my credit card. For those wondering, no, I do not need
this medicine. No, I did not order this medicine. </p>
<p>I’m intrigued and a bit amused that this is what my identity thief decided to
do with my money, but I’m going to have to decline their offer of prostate
supplements. This purchase raises so many questions, I don’t know exactly
where to begin.</p>There’s a Lesson About Yahoo! Security I Learned from Palin Today2008-09-17T15:08:09-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-17:posts/2008/09/17/there-is-a-lesson-about-yahoo-security-i-learned-from-palin-today/<p>The lesson is this: Yahoo! doesn’t use encryption on their webmail. I’ll
repeat that: <span class="caps">YAHOO</span>! <span class="caps">DOESN</span>’T <span class="caps">USE</span> <span class="caps">ENCRYPTION</span> <span class="caps">ON</span> <span class="caps">THEIR</span> <span class="caps">WEBMAIL</span>! </p>
<p>I’m nothing short of shocked. I could have sworn that Yahoo! was a $26B
company. Surely, <span class="caps">SURELY</span> they, of all people would see the importance and
value of secure email, right? Nope. </p>
<p>They’ve been offering free email since at least April of 1996 when they had
their <span class="caps">IPO</span>. Somehow in the last 12 years they never secured the damned thing? What?</p>
<p>Note below the conspicuous use of http rather than https:</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/yahooSecuritySucks.png" /></p>Delete Original Images from F-Spot and Rotate Using Exif Information2008-09-15T23:33:48-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-15:posts/2008/09/15/delete-original-images-from-f-spot-and-rotate-using-exif-information/<p>Over the past couple weeks, my girlfriend and I spent a lot of time working on the photos from our Peru trip. Since we used F-Spot to do our photo editing, when we were done we had a couple of problems when it came to transferring the photos back to her computer which is running Vista. </p>
<p>The first problem was that when we rotated images with F-Spot, it simply changed the exif information for the photo, and didn’t change the pixels of the photo themselves. This was fine when viewed in F-Spot because it is aware of exif information, and displays the photos correctly. However, when we transferred the files to her computer, we discovered that Vista does not take exif information into account on the <span class="caps">OS</span> level, nor does Picassa. As a result, we needed to somehow rotate the images that had exif information indicating a non-normal rotation.</p>
<p>The second problem we encountered is that in F-Spot when you edit a photo, it creates a second file with the edited photo, and leaves the original unchanged. So, if you edit file dsc00343.jpg, you get a second photo called dsc00343 (Modified).jpg. This is <span class="caps">OK</span> when in F-Spot, however, when we went to her computer, it was very hard for her to have <span class="caps">ONLY</span> the modified version of those photos, and to delete the originals (since the edited versions are better than the originals).</p>
<p>To solve the first problem, I used a couple of tricks. The first thing I did was to make a copy of the photos in case all went south.</p>
<div class="highlight"><pre>mkdir backupPhotos
cp *.jpg *.jpeg backupPhotos
<span class="nb">cd </span>backupPhotos
</pre></div>
<p>Once that is done, we can begin rotating images. For this, we will need the jhead program.</p>
<div class="highlight"><pre>sudo aptitude install jhead
</pre></div>
<p>Once that’s installed, we rotate:</p>
<div class="highlight"><pre>jhead -autorot *.jpg *.jpeg
</pre></div>
<p>This will rotate all of the files that have unusual information in the exif orientation field. </p>
<p>Problem number one solved.</p>
<p>For problem two, we will need to isolate all of the photos that have been modified, and delete the originals. To do this, we will capitalize on the fact that the renamed images use the original pictures name in their name. </p>
<p>To begin with, we create a list of the photos that have been modified:</p>
<div class="highlight"><pre>ls *.jpg *.jpeg | grep -i modified > modifiedImages.txt
</pre></div>
<p>Using awk, we can separate out the original name of the photos. The following
commands will convert the ‘)’ to ‘(‘ and will use the two ‘(‘ as a delimiters,
returning the name of the file as the first field, and the .jpg or .jpeg as
the third field. After that, it will remove any spaces from the file name, and
will create a new file with a list of the modified pictures. It sounds
complicated, but the final result should work:</p>
<div class="highlight"><pre>tr <span class="s1">')'</span> <span class="s1">'('</span> &lt; modifiedImages.txt > modifiedImages2.txt
cat modifiedImages2.txt | awk -F<span class="s1">'('</span> <span class="s1">'{print $1,$3;}'</span> | sed <span class="s1">'s/ //g'</span> &gt; modifiedImages3.txt
</pre></div>
<p>You should now have a file called modifiedImages3.txt that contains the name of all of the original photos. To delete the pictures in this list from the collection - permanently - run:</p>
<div class="highlight"><pre>rm <span class="sb">`</span>cat modifiedImages3.txt<span class="sb">`</span>
</pre></div>
<p>You should now be able to transfer this entire directory of photos to another computer without rotation issues or duplicated photos.</p>On DRM and the Darknet2008-09-15T21:09:43-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-15:posts/2008/09/15/on-drm-and-the-darknet/<p>I just read <a href="http://www.google.com/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fcrypto.stanford.edu%2FDRM2002%2Fdarknet5.doc&ei=VTLPSLfdG5m0sQOo1ciIBw&usg=AFQjCNHZkIYjxy6LnWvUSt6kGrZ3SYLMZQ&sig2=hz865qMKNfakTgDi4sUVpA">an
interesting paper</a> written by some Microsoft engineers on the subject of
the futures of darknets and illicit file sharing on the Internet. </p>
<p>Pretty interesting stuff:</p>
<blockquote>
<p>…the darknet will be a competitor to legal commerce. From the point of
view of economic theory, this has profound implications for business strategy:
for example, increased security (e.g. stronger <span class="caps">DRM</span> systems) may act as a
disincentive to legal commerce. Consider an <span class="caps">MP3</span> file sold on a web site: this
costs money, but the purchased object is as useful as a version acquired from
the darknet. However, a securely <span class="caps">DRM</span>-wrapped song is strictly less attractive:
although the industry is striving for flexible licensing rules, customers will
be restricted in their actions if the system is to provide meaningful security.</p>
</blockquote>
<p>It seems so obvious, yet…this paper was written several years ago. </p>I Am Me, Dammit!2008-09-15T15:00:30-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-15:posts/2008/09/15/i-am-me-dammit/<p>Well, it happened. The bastards stole my identity. They somehow got my credit
card number, address, phone number, etc, took them, and put them to use. Grand
total losses: $309. Not too bad, considering.</p>
<p>I’ve called my credit card company, and they promise to reimburse me for my
losses. This is when I thank the federal government for making them do this.
Thank you feds!</p>
<p>I’m thinking about how this happened, and I have a theory. I am about 95% sure
this happened as a result of shopping for car parts online. One of the
retailers I went to (lost to me now) decided to share my contact information
with a number of “partners” so that a part I was looking for could be found
more easily. I ended up getting the part, but I think they might have shared
more info than they should have. Arg. </p>
<p>After all of the services that credit cards have tried to sell me over the
years to protect me from this kind of thing, I’m happy to say that I’m fine
without them. It’s really not the end of the world…it’s annoying though, yes.</p>Why Online Booksellers do so Damned Well2008-09-13T09:31:19-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-13:posts/2008/09/13/why-online-book-stores-do-so-damned-well/<p>Lately in Berkeley, a number of our independent bookstores have closed their doors for business. In every case, the rumor I’ve heard from the employees lays the blame squarely on online competition. I’m not entirely sure I buy the argument as the sole cause, but there probably is some truth to it. </p>
<p>This year, as I shopped for books and readers, I decided to keep my receipts and to total up the costs. In the end, my process for getting books was:</p>
<ul>
<li>Buy them at the campus store</li>
<li>Look them up online</li>
<li>Curse</li>
<li>Buy them online</li>
<li>Receive them on my doorstep</li>
<li>Return the originals to the campus store</li>
</ul>
<p>I feel a bad about this process, but on the other hand, before now I didn’t realize just <em>how</em> expensive the books are on campus. Take a look:
<table>
<tr>
<td></td>
<td><strong>On Campus</strong></td>
<td><strong>Online</strong></td>
</tr>
<tr>
<td>Intellectual Foundations of Information Organization</td>
<td>$46</td>
<td>$37</td>
</tr>
<tr>
<td>Computer Science: An Overview</td>
<td>$96</td>
<td>$7</td>
</tr>
<tr>
<td>Introduction to Information Retrieval</td>
<td>$60</td>
<td>$43</td>
</tr>
<tr>
<td>Free Culture: The Nature and Future of Creativity</td>
<td>N/A</td>
<td>$10</td>
</tr>
<tr>
<td>The Wealth of Networks</td>
<td>N/A</td>
<td>$14</td>
</tr>
<tr>
<td>Readers</td>
<td>$137</td>
<td>N/A</td>
</tr> <br />
<tr>
<td>Shipping</td>
<td>N/A</td>
<td>$10</td>
</tr>
<tr>
<td>Totals</td>
<td>$339</td>
<td>$121</td>
</tr>
<tr>
<td>Less N/A’s</td>
<td>$202</td>
<td>$87</td>
</tr>
<tr>
<td><strong>Grand Total Spent:</strong></td>
<td></td>
<td><strong>$258</strong></td>
</tr>
</table></p>
<p>Pretty amazing. It would have cost me $115 more to get books on campus. And we wonder why online book stores do so well. </p>Peru Pictures Posted…Finally!2008-09-07T14:56:39-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-07:posts/2008/09/07/peru-pictures-posted-finally/<p>N and I finally posted our pictures from Peru. We both had cameras, so we ended the trip with about 1,500 pictures. After two weeks of adjusting, cropping, and deleting pictures, we’ve wittled it down to only 757 photos. </p>
<p>I know, I know, that’s one heck of a lot of photos, but we decided there were just too many that couldn’t be deleted. </p>
<p>We’ve posted the photos on Picassa, so if you’re interested in seeing them, drop me a line, and we can get you permission to the album. </p>
<p>Enjoy.</p>Crime in my hood in the last 90 days2008-09-05T10:34:17-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-05:posts/2008/09/05/crime-in-my-hood-in-the-last-90-days/<p>I did a little research today, and discovered some fun facts. Within one mile of my house, in the last 90 days there have been:</p>
<ul>
<li>Arson: 1</li>
<li>Assault W/Deadly Wpn: 3</li>
<li>Barking Dog: 13</li>
<li>Burglary: 8</li>
<li>Burglary Auto: 54</li>
<li>Burglary-Com’l: 11</li>
<li>Burglary-Res’l: 49</li>
<li>Drunk In Public: 32</li>
<li>Grand Theft: 42</li>
<li>H <span class="amp">&</span> S Violation: 34</li>
<li>Homicide: 1</li>
<li>Loud Noise: 296</li>
<li>Malicious Damage: 32</li>
<li>Petty Theft: 96</li>
<li>Prostitution Activity: 33</li>
<li>Rape: 4</li>
<li>Robbery: 36</li>
<li>Stolen Vehicle: 59</li>
</ul>
<p>Some of those are more striking than others. Like the four rapes, or the 59 stolen automobiles. Maybe the 3 assaults with deadly weapons. Or how about the nearly 300 noise complaints (in 90 days).</p>
<p>Jeesh.</p>
<p>Source: <a href="http://www.ci.berkeley.ca.us/ContentDisplay.aspx?id=7060">http://www.ci.berkeley.ca.us/ContentDisplay.aspx?id=7060</a></p>Sarah Palin - Worst candidate of all time?2008-09-05T08:51:04-07:00Mike Lissnertag:michaeljaylissner.com,2008-09-05:posts/2008/09/05/sarah-palin-worst-candidate-of-all-time/<p>I have been getting a lot of email lately from various organizations telling me about Sarah Palin. They’ve started to pile up in my inbox, so I decided that I better learn a little about the woman. Here’s what I learned so far:</p>
<ul>
<li>She was mayor of a town so small it didn’t have a police department<sup>[1]</sup></li>
<li>She believes the Iraq war is “a task from God.”<sup>[2]</sup></li>
<li>Referring to a natural gas line she wanted built, she said, “God’s will has to be done in unifying people and companies to get that gas line built, so pray for that.”<sup>[2]</sup> Gods will? What? </li>
<li>She has been Governor of Alaska for about a year and a half. For the ten years or so prior to that, she was mayor of a <span class="caps">TINY</span> town of about 5,469 people.<sup>[3]</sup></li>
<li>She opposes abortion in all cases except if the health of the mother is in danger. That includes rape and incest.<sup>[4]</sup></li>
<li>As of 2006, she supported teaching creationism in schools. To wit: “Teach both…I am a proponent of teaching both.”<sup>[5]</sup></li>
<li>She sued the Bush administration for listing polar bears as a threatened species.<sup>[6]</sup></li>
</ul>
<p>Do we really want this person in any position of power? To reiterate, she was mayor of a town of about 5,000 people for the bulk of her time in politics, she believes she knows the will of God, she would have creationism in schools, she would have rape victims give birth to the rapist’s child against their will, and is even more anti-environmental than the Bush administration. </p>
<p>Incredible. Please help get this word out. This is awful, and not just a passing concern.</p>
<p><strong>References</strong>
<sup>1.</sup> <a href="http://www.time.com/time/politics/article/0,8599,1837918,00.html">http://www.time.com/time/politics/article/0,8599,1837918,00.html</a>
<sup>2.</sup> <a href="http://ap.google.com/article/ALeqM5jNulPSqaP1eyysv8ENJWhk0ZSrPgD92VJPL00">http://ap.google.com/article/ALeqM5jNulPSqaP1eyysv8ENJWhk0ZSrPgD92VJPL00</a>
<sup>3.</sup> <a href="http://en.wikipedia.org/wiki/Wasilla,_Alaska">http://en.wikipedia.org/wiki/Wasilla,_Alaska</a>
<sup>4.</sup> <a href="http://www.juneauempire.com/stories/101906/sta_20061019031.shtml">http://www.juneauempire.com/stories/101906/sta_20061019031.shtml</a>
<sup>5.</sup> <a href="http://dwb.adn.com/news/politics/elections/story/8347904p-8243554c.html">http://dwb.adn.com/news/politics/elections/story/8347904p-8243554c.html</a>
<sup>6.</sup> <a href="http://www.timesonline.co.uk/tol/news/environment/article3987891.ece">http://www.timesonline.co.uk/tol/news/environment/article3987891.ece</a></p>Linux Tip - Route Standard Output Into to the Clipboard2008-08-28T20:47:05-07:00Mike Lissnertag:michaeljaylissner.com,2008-08-28:posts/2008/08/28/linux-tip-route-standard-output-into-the-clipboard/<p>A friendly online stranger just taught me how to do something that has been plaguing me for some time. Ever since I learned how to use pipes in the unix commandline, I have wanted to know how to pipe the output of a command into the system clipboard.</p>
<p>For example, the echo command simply repeats whatever you tell it to. So if I run</p>
<div class="highlight"><pre><span class="nb">echo </span>hello
</pre></div>
<p>The computer will give me the output </p>
<div class="highlight"><pre>hello
</pre></div>
<p>By using a pipe (this symbol: |) I can route the output of one command into the input of another. </p>
<p>For example, if I run: </p>
<div class="highlight"><pre><span class="nb">echo </span>hello | helloprogram
</pre></div>
<p>The helloprogram will receive the value of ‘hello’ as an input, and will do something with it. This allows stringing together small commands into long ones, which sometimes is incredibly handy. </p>
<p>Anyway, if you want to route standard output into the system clipboard, you will need to install an application called xclip. Once that is installed, a command such as:</p>
<div class="highlight"><pre><span class="nb">echo </span>hello | xclip -i -selection clipboard
</pre></div>
<p>Will put the word hello into the clipboard. Ctrl + V will then paste that
value into whatever application desired.</p>
<p>Thanks to aaron at <a href="http://www.cyberciti.biz/faq/linux-copying-with-middle-mouse-button/#comment-38676">http://www.cyberciti.biz/faq/linux-copying-with-middle-mouse-button/#comment-38676</a> for help with this question.</p>Ch-ch-ch-ch-Changes2008-08-25T21:02:04-07:00Mike Lissnertag:michaeljaylissner.com,2008-08-25:posts/2008/08/25/ch-ch-ch-ch-changes/<p>Well, we got back from Peru on Sunday (pictures forthcoming), and today was my
last day at work with the <a href="http://ehsd.org/comm000.html">Community
Services Bureau</a> of Contra Costa County. </p>
<p>I’ve never worked somewhere for so long - all in all, it was about three
years, during which time I progressed from Temp Clerk to Intermediate Clerk
to Assistant Manager. You do gotta love working in government.</p>
<p>In a way, I’ve been planning on quitting since about December of 2006, when I
first applied to go back to school. Now that it’s a year and a half later,
I’m surprised I’m not more excited or elated about this change. It’s possible
it hasn’t sunk in yet because I have been on vacation for the past two weeks
(and am used to not going to work), but ultimately, I feel pretty normal,
which is odd.</p>
<p>Tomorrow is the first day of school at the <a href="http://ischool.berkeley.edu">Berkeley
School of Information</a>. I’ve got my classes all set up, and I’m shocked at
exactly how awesome the classes are. </p>
<p>Here’s the official list as of now:</p>
<ul>
<li>Information Organization and Retrieval</li>
<li>Distributing Computing Applications and Infrastructure</li>
<li>Politics of Piracy</li>
<li>Climate Change Impacts and Adaptation</li>
<li>Computer Mediated Communication</li>
<li>Photovoltaic Materials: Modern Technologies</li>
<li>Metrics of Sustainability</li>
</ul>
<p>A lot of classes, eh? It’s 20 units as of now, so I am definitely going to drop a number of them. It’s going to be hard to decide which to drop though. It’s a three-way split between classes offered through Haas school of business, the Energy and Resources Group and the iSchool. I guess we’ll see which float to the top. </p>Update from Peru2008-08-13T20:14:53-07:00Mike Lissnertag:michaeljaylissner.com,2008-08-13:posts/2008/08/13/update-from-peru/<p>My girlfriend and I have been travelling around Peru for the past week or so.
It has been nothing short of awesome.</p>
<p>Our first stop was in Lima for one night, after which point, we left to go to
the Amazon Basin, specifically Puerto Maldonado. In Puerto Maldonado, we were
picked up by our guide, and quickly ushered down the Tambopata river. From our
jungle lodge, we had a number of rather excellent excursions. We went to a
bird clay lick, where we saw a fair amount of birds, including red maccaws. We
went to a jungle farm, and learned about their practices, and ate a bunch of
fruit (some normal, some strange). We climbed a tower into the jungle canopy
and did some bird watching from there, and we spent a night camping in the
jungle. On that last excursion, we saw the most poisonous spider in Peru (I
think), and saw some other spiders that I have to admit were damned frightening.
So far, no malaria, or other jungle diseases to speak of.</p>
<p>At the moment we are in Cusco, which is effectively the tourist capital of Peru.
Today we saw the Sacred Valley, and tomorrow we head out on a four-day hike
along the Inca trail, culminating at Machu Piccu. </p>
<p>From here, we head to Arequipa, and from there, to Lima and then home.</p>Sewing and Peru2008-08-03T22:57:43-07:00Mike Lissnertag:michaeljaylissner.com,2008-08-03:posts/2008/08/03/sewing-and-peru/<p><img alt="No Alt" src="https://michaeljaylissner.com/images/balaclava.png" /></p>
<p>My girlfriend and I have been getting ready to go to Peru finally,
and one thing we had to do was to make some real hats to will keep us warm
at night.</p>
<p>I’ve spent some time shopping around for hats, but really,
when it comes down to it, there is no finer camping hat than a balaclava. It
can be worn on your head Smurf-style; It can be worn all the over your head
burglar style; Perhaps you want it below your chin, or maybe above. You can
pull the whole hat over your entire head and poke your head through the face
hole so it works as a scarf. I ask you what other hat could possibly
accomplish all this?</p>
<p>Ah, the balaclava - My favorite piece of gear. After months abuse,
they never give up. The ones that I make are always made of 200 weight
Malden Mills Polartec fleece, which is the finest fleece in the land. I just
take a sheet of it, hold it around my head and start pining. After a good
twenty minutes of pinning and stitching, I cut out the face hole,
give it a blessing and consider it done.</p>Stop Getting Catalogs2008-07-28T21:38:57-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-28:posts/2008/07/28/stop-getting-catalogs/<script type="text/javascript" src="http://www.catalogchoice.org/badge.js?color=green"></script>
<p>Just a quick post today to promote <a href="http://catalogchoice.org">Catalog Choice.org</a>. I’ve been using it now for the past six months, and I am beginning to reap the fruit of my labors.</p>
<p>It’s a pretty slick site that I recommend everybody sign up for. Essentially, once you’re signed up, whenever you get junk mail, you log into the site, look up the publisher, and opt out. They contact the publisher on your behalf, and you’re done.</p>
<p>I’ve come across a couple of pieces of junk mail so far that aren’t in their database, but I have suggested those items to Catalog Chioce, and they say they’ll get to them. </p>
<p>The site itself is sponsored by the <a href="http://ecologycenter.org">Ecology Center</a> and the <a href="http://nwf.org">National Wildlife Federation</a>, so it seems legit enough. </p>
<p>Check it out and take control of your junk mail.</p>Ubuntu Disk Usage Analyzer2008-07-27T18:00:00-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-27:posts/2008/07/27/ubuntu-disk-usage-analyzer/<p><img alt="No Alt" src="https://michaeljaylissner.com/images/disk_usage-pic.png" /></p>
<p>One of my favorite utilities lately is the Disk Usage Analyzer that comes
installed on Ubuntu. It can be run either locally or remotely. </p>
<p>It’s pretty awesome. I have been playing with my backups lately,
and this utility allows me not only to see which directories are large,
but also where my files are taking up the most space. For example,
the picture at right depicts my home directory. By mousing over the slices
of the pie, you can see what’s in them, and how big they are. By clicking on
a slice, it becomes the center of the pie, and you can see which directories
are within it (and how big they are). </p>
<p>In terms of <span class="caps">UI</span>, I have to say this one works very well for me. I have yet to
see another app for this purpose anywhere else, though admittedly I have
not been looking that hard.</p>Moving and Updating Drupal2008-07-24T22:45:32-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-24:posts/2008/07/24/moving-and-updating-drupal/<p>You may recall from one of my earlier posts that I was running two servers in my attic when I originally set things up at the end of last summer. Originally, I had one server for Zimbra, and the other for Drupal. I did this because I was scared that if I didn’t, people would be unable to access the website without getting the email, and vice versa. I had no familiarity with apache, and a limited understanding of ports. </p>
<p>Well, today I had a moment of inspiration, and decided it was time to retire the older of the two servers, and to move the Drupal installation to the Zimbra server.</p>
<p>In addition to reducing the number of servers that I am maintaining, this also reduces the amount of energy I’m consuming, and also allowed me to update my Drupal installation. I was running Drupal 5.3 because that was the one that was in the Ubuntu repos, but I am now up to 5.9 (the most recent version).</p>
<p>So, how did it go? It went pretty well. I had a backup of everything on my second server already, so it was largely a matter of copying things to the right places. Probably the most important lesson I learned is that symbolic links are not followed by rsnapshot, so my backups until this time have been incomplete. In my new installation, I am not using symbolic links, so that problem should be alleviated.</p>
<p>Another challenge I encountered was that I had to update my dbconfig.php files to line up with the new database configuration, and I also had to spend some time getting the correct document root to function in apache2, which I also just installed.</p>
<p>The biggest problem I encountered was that the clean <span class="caps">URL</span>’s broke, and were a pain to get fixed. I have fixed those now, so the only remaining thing is to get gallery functioning again. The thing to remember here is that clean urls function by directory, and that the higher up the directory tree you go, the higher the priority of the .htacces files.</p>
<p>As for Gallery2, I have to say it is a big pain, so I may just revert to trusting Google with my images. We’ll see if I have another moment of inspiration.</p>I Just Heard About This2008-07-19T20:22:52-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-19:posts/2008/07/19/i-just-heard-about-this/<p>I just learned about this, but it’s pretty shocking so I thought I would
post it. Apparently a few years ago, Bush said that he uses “The Google”. </p>
<p>Observe:
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/MunMCO3uNdA&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/MunMCO3uNdA&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>That’s pretty bad. He’s the president. From this clip,
it’s pretty obvious that he doesn’t use the internet. It would probably be a
useful tool for his line of work.</p>
<p>In a similar vein, McCain said, “Well, basically,
<strong>it’s a Google</strong>. You just, you know, what you can find out now on the Internet. It’s remarkable, you know.” Emphasis mine.</p>
<p>He also says, “I am a [computer] illiterate that has to rely on my wife for
all of the assistance that I can get.”</p>
<p><a href="http://www.cnn.com/video/#/video/politics/2008/06/25/moos.mccain.doesnt.compute.cnn">Observe here</a>.</p>
<p>This is really, really sad. Is there <strong><span class="caps">ANY</span></strong> job for which you
would deliberately hire somebody that professes internet and computer illiteracy?</p>
<p>Shocking.</p>While Cleaning the Block2008-07-19T15:27:04-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-19:posts/2008/07/19/while-cleaning-the-block/<p>I spent a couple hours cleaning my block today. Among the very special trash I picked up, I found not one, not two, but two and a half used hypodermic needles. Also of interest, one of my neighbors seems to have placed a box of 100 fresh, sterile needles outside their house.</p>
<p>I can’t help but wonder if that is a good way to do a needle exchange program. You throw it on the street. I put a whole box of them outside my fence on the sidewalk. Hmmm…</p>
<p>On the up side, picking up trash seems to be a great, high-profile way to build community. The trash around my house is so bad that I could definitely use help picking it up, and every time I or my girlfriend are out there, we seem to meet allies that want to fix up the neighborhood. I collected one guy’s info today, and she collected somebody else’s info last week. If we keep this up, we may build a nice set of contacts of all our neighbors. So that’s how meeting your neighbors works. Huh.</p>My Linux Story2008-07-17T20:03:38-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-17:posts/2008/07/17/my-linux-story/<p>I thought I would post a quick entry today about how I came to be a Linux user and enthusiast. I guess it’s a combination of a couple things.</p>
<p>Historically, what happened was that I was using <span class="caps">XP</span> and looking at thumbnails of some pictures in their file navigator. I was looking at about 300 pictures, and I didn’t want to open them all up individually (this was before useful apps like Picasa came around). I just wanted to look at the thumbnails. Except those were too small, so I wanted to make them bigger. I spent about two hours searching online to try to figure out how to make such an adjustment. Eventually, I discovered a Windows “Powertool” that you could install. It seemed like overkill, but it did the job. What bugged me though about it was that obviously it didn’t require a Powertool to adjust image size. It just required a tweak of some bit of code somewhere in the system. That was my tipping point. I decided I couldn’t take the viruses, the expense and the closed product anymore, and promptly decided it was time for a new <span class="caps">OS</span>.</p>
<p>So that’s what brought me to Linux. What kept me here is the openness and the philosophy. Sure, at times it’s a bit trickier to get certain things done, but I love the philosophy that if I want a change, I can either make it myself if I am a programmer, or I can file a feature request with the developers. Somebody will read that request, and maybe it will get integrated, if it’s a good enough idea.</p>
<p>I also love the fact that I can download, install and run an excellent email server, and a top-notch web server. For free. Also, no viruses. Ever. Nor any anti-virus software to pay for. And did I mention the whole thing is free? </p>
<p>As for the day to day stuff, I really don’t notice much difference. At work, I use <span class="caps">XP</span>, which involves using Firefox, Word, Excel and Outlook (the latter three of which my work paid good money for). At home it’s Firefox, Open Office and Evolution, all of which are very similar to the Microsoft package, only with better compatibility with other programs.</p>
<p>The other thing I really like about my Linux system is the ability to set things up like in the previous tutorial. I did an Internet search for “Linux wake on <span class="caps">USB</span>”, and knew exactly how to adjust the system in a matter of moments. That kind of customization is a power you just don’t have in Windows.</p>Wake Your Computer by USB2008-07-14T20:27:57-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-14:posts/2008/07/14/wake-your-computer-by-usb/<p>I recently began using my laptop at my desk with a <span class="caps">USB</span> keyboard and mouse,
and I thought I would explain how to set up Ubuntu so that <span class="caps">USB</span> peripherals
will wake up your computer from sleep mode. This is convenient if you have
your laptop set up such that the lid is closed and inaccessible.</p>
<p>In Ubuntu, the way to set this up is to edit the file located at
<code>/proc/acpi/wakeup</code>. To see the current contents of this file do this:</p>
<div class="highlight"><pre>% cat /proc/acpi/wakeup
Device S-state Status Sysfs node
P0P2 S4 disabled
P0P1 S4 disabled pci:0000:00:1e.0
MC97 S4 disabled
HDAC S4 disabled pci:0000:00:1b.0
P0P4 S4 disabled pci:0000:00:1c.0
P0P5 S4 disabled pci:0000:00:1c.1
P0P7 S4 disabled
P0P8 S4 disabled
P0P9 S4 disabled
USB0 S3 disabled pci:0000:00:1d.0
USB1 S3 disabled pci:0000:00:1d.1
USB2 S3 disabled pci:0000:00:1d.2
USB3 S3 disabled pci:0000:00:1d.3
EUSB S3 disabled pci:0000:00:1d.7
P0P6 S4 disabled pci:0000:00:1c.2
SLPB S4 *enabled
</pre></div>
<p>This shows you a number of devices, most of which I don’t claim to
understand. The ones to notice are the <span class="caps">USB</span> ones, which you will see are
disabled by default.</p>
<p>Once these are toggled on, your computer will wake up from sleep when <span class="caps">USB</span>
peripherals are used. To toggle one of these on, as root, run:</p>
<div class="highlight"><pre><span class="nb">echo</span> <span class="s2">"USB0"</span> > /proc/acpi/wakeup
</pre></div>
<p>This will toggle <span class="caps">USB0</span> from disabled to enabled. To check this,
run <code>cat /proc/acpi/wakeup</code> again. You should see that it’s enabled,
and you should be able to test this by suspending your computer.</p>
<p>This will set up your computer to wake up from <span class="caps">USB</span>…for now. To make it
work after your computer has been restarted, you will need to write a short
init script named wake.sh with the following contents:</p>
<div class="highlight"><pre><span class="c">#!/bin/bash</span>
<span class="nb">echo</span> <span class="s2">"USB0"</span> > /proc/acpi/wakeup
</pre></div>
<p>Save this file to <code>/etc/init.d</code>, and make it executable by running:</p>
<div class="highlight"><pre>chmod +x wake.sh
</pre></div>
<p>Finally, once this file is in <code>/etc/init.d</code>, and is executable,
as root run:</p>
<div class="highlight"><pre>update-rc.d wake.sh defaults
</pre></div>
<p>That will make init know about the file, and run it at startup. Happy awakenings!</p>
<p><strong>Source:</strong> <a href="http://ubuntuforums.org/showthread.php?t=711747">http://ubuntuforums.org/showthread.php?t=711747</a></p>The Facts are In - Ars Technica Rocks2008-07-13T21:47:54-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-13:posts/2008/07/13/the-facts-are-in-ars-technica-rocks/<p>For the past five years or so, I’ve been using a feed reader of <a href="http://www.mozilla.com/en-US/thunderbird/">one kind</a> or <a href="http://reader.google.com">another</a> to read <span class="caps">RSS</span> feeds. For those who don’t know what these are, they’re great. What they allow you to do is “subscribe” to web sites, so that if the site is updated, you know pretty much immediately. I have about 40 of these subscriptions, which are mostly to friends’ blogs, news sites, or some other sites I like to keep track of. It’s really convenient: I don’t have to monitor some 40 sites, I just check my feed reader, and it will do the legwork for me on all of the sites.</p>
<p>Anyway, I digress. One of the feeds I subscribe to is <a href="http://arstechnica.com/journals/linux.ars">Ars Technica, Open Ended</a>, which is supposed to be their journal of open source news. It’s usually top notch news, but I have noticed that occasionally certain open source news items don’t make it to into Open Ended. I mentioned this to them yesterday, and today they have created a new <span class="caps">RSS</span> feed for open source news. </p>
<p>Talk about service. They’re officially the bomb. The new feed is <a href="http://arstechnica.com/oss.rssx">arstechnica.com/oss.rssx</a>.</p>
<p>Check it out. Pretty slick, I must say.</p>Log Your Friend Out of Gmail2008-07-04T12:16:16-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-04:posts/2008/07/04/log-your-friend-out-of-gmail/<p>I keep having this problem where I want to use somebody’s computer to check my gmail, but I know that if I go to mail.google.com, I will see their email. I was thinking about this last night, and I came up with two solutions. The first was to bookmark the gmail logout link into their browser or maybe del.icio.us so that I could visit it without having to go to their gmail, and the second solution was to post that link here. </p>
<p>So, if you know that you want to log out your friend from gmail without seeing their inbox, all you have to do is <a href="https://mail.google.com/mail/?logout&hl=en-GB">click here</a>. </p>No wonder I’m losing money right now…2008-07-02T22:21:42-07:00Mike Lissnertag:michaeljaylissner.com,2008-07-02:posts/2008/07/02/no-wonder-i-am-losing-money-right-now/<p><span class="caps">USA</span> Today had <a href="http://www.usatoday.com/money/markets/2008-06-30-wall-street-first-half_N.htm">an article</a> a few days ago about the recession that we seem to officially be in. It’s pretty shocking. </p>
<p>For example, here’s a fact from the article: The Dow Jones had its biggest June loss since the great depression. </p>
<p>And another: The <span class="caps">U.S.</span> stock market has lost $2.1 trillion in value this year - $1.4 trillion in June alone. </p>
<p>For perspective that’s 15.2% of the <a href="https://www.cia.gov/library/publications/the-world-factbook/print/us.html">2007 estimated <span class="caps">GDP</span></a>.</p>My Eyeballs2008-06-25T21:27:17-07:00Mike Lissnertag:michaeljaylissner.com,2008-06-25:posts/2008/06/25/my-eyeballs/<p><img alt="My eye" src="https://michaeljaylissner.com/images/eyeball.jpeg" /></p>
<p>Got my eyeballs checked at the Berkeley Optometric Group on Friday. They
dilated my eyes and took this picture. It was awesome. Now we know that my
eyes are in good shape. Good.</p>
<p>That’s a picture of my eye.</p>Lessons from the Street2008-06-23T19:29:42-07:00Mike Lissnertag:michaeljaylissner.com,2008-06-23:posts/2008/06/23/lessons-from-the-street/<p>I’ve been more aware of the happenings in the street lately after one roommate had his car stolen, another had hers broken into (they took a bag of coins), and my car was front-ended a week or two ago. I’ve learned some valuable lessons just by watching what people are doing.</p>
<p><strong>1. I have a mattress, and live in Berkeley. How do I get rid of it?</strong>
Get a U-Haul. Go to Fairview St. Remove mattress from truck. Set it on the curb. Depart.</p>
<p><strong>2. It’s noon on a Sunday, and I’ve finished my breakfast. How do I dispose of my beer bottle?</strong>
First, find a storm drain in a gutter, preferably one with a metal grate. Smash the bottle, either with your foot or the grate. Using your foot, sweep the debris into the drain.</p>
<p>Seriously. This is what people do on my block. I just do not get it.</p>On Memories2008-06-12T18:56:49-07:00Mike Lissnertag:michaeljaylissner.com,2008-06-12:posts/2008/06/12/on-memory/<p>As we progress in science, the time is going to come when we can transfer memories from one person to another. They exist in some material form (as proteins I believe), and thus should be measurable, copyable, etc.</p>
<p>One interesting thing however that was captured both in an excellent <a href="http://www.wnyc.org/shows/radiolab/episodes/2008/02/14">Radiolab show</a>, and in Cormac McCarthy’s <em>The Road</em>, is the destructive power of recalling a memory.</p>
<p>It’s interesting. As McCarthy states, “…each memory recalled must do some violence to its origins.” According to Radiolab, McCarthy is right on the money. In their show, they explain that as we think about a memory, really we are constructing it from fragments of that memory, recreating how we imagine it was. Unfortunately though, the next time that we recall that memory, we lose some accuracy because we can’t quite keep track of which parts we constructed the last time, and which parts were there from the beginning.</p>
<p>This is why people who dwell on a memory, or are repeatedly asked to recall the same thing, will quickly forget what was fact, and what they constructed. It’s not that they are making things up, per se, it’s just that what they believe, and what they constructed have merged.</p>
<p>So, what’s the best way to remember your first kiss, or your the face of a loved one lost? Don’t think about it - unless, of course, you’re sure you want to.</p>Fiji Water Tries, Fails to Be Smart2008-06-03T18:54:03-07:00Mike Lissnertag:michaeljaylissner.com,2008-06-03:posts/2008/06/03/fiji-tries-fails-to-be-smart/<p>Well, it seems somebody is reading my blog after all. After reading <a href="https://michaeljaylissner.com/posts/2008/05/15/meet-my-enemy/">my post
regarding my hate of Fiji water</a>, Fiji has responded by <a href="http://www.fijigreen.com">creating a new
website</a> that tries to lure consumers out of their minds.</p>
<p>I think it’s great that Fiji Water wants to lower their carbon impact,
but come on folks. Talk about green-washing. This is just stupid. If you
care about the environment, stop bottling water in Fiji. Actually,
just stop bottling water. </p>
<p>The end.</p>Install Citrix In Ubuntu Hardy Heron2008-06-02T09:44:53-07:00Mike Lissnertag:michaeljaylissner.com,2008-06-02:posts/2008/06/02/install-citrix-in-ubuntu-hardy-heron/<p>For a while there, I was struggling to get the Citrix client installed on
my computer. It was frustrating, and I put hours into debugging it,
and trying to get it to work. In the end, I took a circuitous route,
installing VirtualBox in Ubuntu, Windows in VirtualBox, Firefox in Windows,
and finally Citrix in Firefox.</p>
<p>Last week, I took another stab at getting this done, and for some reason it
went very smoothly. To install Citrix in Ubuntu Hardy Heron, begin by
<a href="http://www.citrix.com/English/ss/downloads/details.asp?downloadId=3323&productId=186&c1=ost1349860#top">downloading</a> the Citrix client as a .tar.gz.</p>
<p>Next, unpack the install file using the terminal by running: </p>
<div class="highlight"><pre>sudo tar xvfz en.linuxx86.tar.gz
</pre></div>
<p>Change into the Citrix directory, and run </p>
<div class="highlight"><pre>sudo ./setupwfc
</pre></div>
<p>This will begin the install script. As it proceeds,
simply allow the default settings, and you should be good.</p>
<p>The final step is to install the root certificates. To do this,
attempt to start a Citrix program, and it may fail,
reporting an error message. In the message, it will tell you what
certificates it needs installed. Go to <a href="https://www.geotrust.com/resources/root_certificates/index.asp">this website</a>, and download the
certificates the error message informed you that you need by right clicking
their download links, and selecting “Save as…” Once those are downloaded,
rename their extension so they are .crt files, and move them to </p>
<p>:::bash /usr/lib/ICAClient/keystore/cacerts</p>
<p>Restart Firefox, and you should be good.</p>
<p>Thanks to <a href="http://skarh.wordpress.com/2008/05/20/how-to-citrix-on-ubuntu/">Skarh</a> for this how to.</p>Create a List of Formulas from Excel Files2008-05-22T12:16:59-07:00Mike Lissnertag:michaeljaylissner.com,2008-05-22:posts/2008/05/22/create-a-list-of-formulas-from-excel-files/<p>I have begun training a replacement at work, and I need to teach him all of
the excel formulas that we use in our department documents. I started making a
list of all the formulas, but my mind quickly went blank, and I decided I
needed a way to automate it. </p>
<p>Here’s the technique I figured out. Open each of the files that you believe
has useful formulas in it, and go to File > Save as… Save each document into
an empty directory as xml spreadsheets (.xml). If you open one of these
documents in a text editor, you are likely to see a line something like the following: </p>
<div class="highlight"><pre><span class="nt"><Cell</span> <span class="na">ss:Formula=</span><span class="s">"=SUM(C:C[1])"</span><span class="nt">><Data</span> <span class="na">ss:Type=</span><span class="s">"Number"</span><span class="nt">></span>0<span class="nt"></Data></Cell></span>
</pre></div>
<p>The key is that each row in your new xml documents that contains a formula
will have the formula keyword, so to isolate these, run the following on a
Unix computer in the directory where you saved all the xml documents.</p>
<div class="highlight"><pre>grep <span class="s1">'Formula='</span> *.xml | sort | uniq > uniqLinesWithFormulas.txt
</pre></div>
<p>That will create a file called uniqLinesWithFormulas.txt that will contain
each line from all of your <code>.xml</code> files that contains a formula. From there,
you can skim them visually for useful formulas, or put the file into Excel
again and play with it there. This was as far as I needed to go in my
analysis. Once I had this done, it was pretty easy to see the 30 or so
formulas I regularly use.</p>Dear Hillary2008-05-20T21:06:22-07:00Mike Lissnertag:michaeljaylissner.com,2008-05-20:posts/2008/05/20/dear-hillary/<p>Dear Hillary, </p>
<p>It seems you have lost the contest, and it’s time that you accept that fact. I won’t say you ran a good race, but you really did put one heck of a lot of effort. By <a href="http://www.msnbc.msn.com/id/21660914">my count</a> though, there are 313 delegates remaining. Obama needs to get 72 of them. You need 243. </p>
<p>I think it’s time to throw in the towel, and - dare I say it - move on. Please?</p>Drag a Screenshot Using ImageMagick2008-05-17T17:48:40-07:00Mike Lissnertag:michaeljaylissner.com,2008-05-17:posts/2008/05/17/drag-a-screenshot-using-imagemagick/<p>I learned an interesting trick while working on the Fuji water article. We all know that if you want to take a screenshot in Linux, all you usually have to do is press the “printscreen” button. That, however, takes a screenshot of the entire screen, which you then have to trim down into a useful bit of picture. </p>
<p>The trick I learned to make this easy is to simply type:</p>
<div class="highlight"><pre>import screenshot.png
</pre></div>
<p>That will turn your cursor into a little crosshair, which you can drag across a section of the screen. </p>
<p>If you want to do that after a delay, the trick is to use the sleep command like so:</p>
<div class="highlight"><pre>sleep 10; import screenshot.png
</pre></div>
<p>I found this tip along with a lot of others on <a href="http://tips.webdesign10.com/how-to-take-a-screenshot-on-ubuntu-linux">this blog</a>. There are some other interesting techniques there as well.</p>Meet My Enemy2008-05-15T22:26:41-07:00Mike Lissnertag:michaeljaylissner.com,2008-05-15:posts/2008/05/15/meet-my-enemy/<p>I’d like everybody to meet my new enemy, and that of my girlfriend,
who is now working against bottled water. Behold Fuji: traveler from
distant seas, pillager of distant islands, waster of petroleum,
and emptier of pockets. </p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/Fiji bottle_0.jpg" /></p>
<p>So, not only is <a href="http://www.google.com/products?q=fiji+water&oe=utf-8&scoring=p">Fiji water expensive</a>, but it also <span class="caps">COMES</span> <span class="caps">FROM</span> <span class="caps">FIJI</span>!!!!
Think about that for a moment. Fiji is an island in the middle of the
Pacific. Behold the planet Earth, and the island of Fiji:</p>
<p><a href="http://maps.google.com/maps?f=q&hl=en&geocode=&q=fiji&ie=UTF8&z=6"><img alt="No alt" src="https://michaeljaylissner.com/images/FijiMap2.png" /></a></p>
<p>Somehow, the water must get from there to here (it’s about 5,
500 miles to the bay area). Luckily, the bottle is square so they can fit a
lot of it on a ship, but it must be bottled for weeks and months before it
arrives here. Why are we pillaging this island? It’s madness.</p>Happy Mother’s Day, Decemberists Style2008-05-11T11:56:38-07:00Mike Lissnertag:michaeljaylissner.com,2008-05-11:posts/2008/05/11/happy-mothers-day/<h2 id="a-cautionary-song">A Cautionary Song</h2>
<blockquote>
<p>There’s a place your mother goes when everybody else is soundly sleeping.
Through the lights of beacon street and if you listen you can hear her weeping, she’s weeping,
Cause the gentlemen are calling and the snow is softly falling on her petticoats,
And she’s standing in the harbor and she’s waiting for the sailors in the jolly boat. See how they approach.</p>
<p>With dirty hands and trousers torn they grapple ‘til she’s safe within
their keeping.
A gag is placed between her lips to keep her sorry tongue from any speaking, or screaming.
And they row her out to packets where the sailor’s sorry racket calls for maidenhead.
And she’s scarce above the gunnels when her clothes fall to a bundle and she’s laid in bed on the upper deck.</p>
<p>And so she goes from ship to ship, her ankles clasped her arms so rudely
pinioned
‘till at last she’s satisfied the lot of the marina’s teeming minions, in their opinions.</p>
<p>And they tell her not to say a thing to cousin, kindred,
kith or kin or she’ll end up dead.
And they throw her thirty dollars and return her to the harbor where she goes to bed.
And this is how you’re fed.</p>
<p>So be kind to your mother, though she may seem an awful bother,
and the next time she tries to feed you collard greens, remember what she does when you’re asleep.</p>
</blockquote>Eco-tip 5 - Stop Junk Mail2008-05-04T20:41:05-07:00Mike Lissnertag:michaeljaylissner.com,2008-05-04:posts/2008/05/04/stop-junk-mail/<p>How to stop junk mail in three steps, as gleaned from <a href="http://www.recycleworks.org">recycleworks.org</a>:</p>
<p><strong>1. Hit the big dogs first</strong>
Write two letters. One to: Harte Hanks Direct Mailing, Circulation, c/o Pennysaver, 2830 Orbiter St., Brea, <span class="caps">CA</span> 92821. The other to: Valassis Direct Mail, Inc., Consumer Assistance, <span class="caps">PO</span> Box 249, Windsor, <span class="caps">CT</span> 06095. On each, ask for your name to be removed from their mailing list, and make sure to give them all variations on your name (Beth, Elizabeth, Betsy, etc). For template letters, click <a href="http://www.stopjunkmail.org/sample/dma.pdf">here</a>, and <a href="http://www.stopjunkmail.org/sample/advo.pdf">here</a>.</p>
<p><strong>2. Hit the medium dogs next</strong>
Contact Direct Marketing Association (<span class="caps">DMA</span>), and get off their list. <a href="https://www.dmachoice.org/MPS/proto1_reg.php">Online seems easiest,</a> though it requires a credit card to “confirm your identity”.</p>
<p>Opt out of credit card offers by calling the opt out number: 1-888-567-8688. This, I believe requires your Social Security Number, but I assure you it’s legit.</p>
<p>Opt out of Publisher’s Clearinghouse by calling 1-800-645-9242.</p>
<p>Opt out of shopping flyers:
ValPak Coupons: 800-237-6266.
Advo/Valassis: 888-241-6760, or online at <a href="http://www.advo.com/consumersupport.html">www.advo.com/consumersupport.html</a>.</p>
<p><strong>3. Get catalogs gone</strong>
You can opt out of some catalogs by going to <a href="http://catalogchoice.org"> catalogchoice.org</a>.</p>Remap Caps Lock as Backspace in Windows and Linux2008-04-29T21:33:41-07:00Mike Lissnertag:michaeljaylissner.com,2008-04-29:posts/2008/04/29/remap-caps-lock-as-backspace/
<p>A while back my wrist started hurting from reaching for the cursed backspace
key. I was making too many mistakes. My solution was to remap the caps
lock key on all the computers I use to act as an additional backspace key.
How did I do it? Well, I’m glad you asked. I’ll tell you.</p>
<h2 id="in-windows">In Windows</h2>
<p><span class="caps">EDIT</span>: I noticed that the picture doesn’t have all the detail you need. The
easier way to do this, is to download <a href="https://michaeljaylissner.com/archive/scancode.reg">this registry key</a> post,
and to right click it, selecting merge. After that, restart the computer, and
you should be all set.</p>
<p>To remap the caps lock to function as a backspace key in Windows,
one must edit the registry keys. To do that, go to <code>Start > Run...</code>,
and type in <code>regedit</code>. In the editor that opens up, navigate to the key shown
in the picture below, and create a new key named Scancode Map of the type
<code>REG_BINARY</code>. Give it the value shown in the picture, restart,
and you’re set. If things get wacky, delete the key and try again.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/Windows Registry Remap Screenshot.jpg"/></p>
<h2 id="in-ubuntu">In Ubuntu</h2>
<h3 id="for-versions-newer-than-1410">For versions newer than 14.10</h3>
<p>This can easily be done using the Ubuntu Tweak tool. Simply open it up, go to the section on <code>Typing</code>, and then reconfigure the CapsLock key.</p>
<h3 id="for-versions-prior-to-ubuntu-1410">For versions prior to Ubuntu 14.10</h3>
<p>I have tested the following in all versions between Ubuntu 7.04 and 14.04. Start
by opening a terminal, and running the xev program. Once that is running,
press the caps lock key, and it will tell you the numerical value of that key.
For example, my output from that command looks like this:</p>
<div class="highlight"><pre><span class="n">mlissner</span><span class="err">@</span><span class="n">opal2</span><span class="o">%</span> <span class="n">xev</span>
<span class="n">KeyPress</span> <span class="n">event</span><span class="p">,</span> <span class="n">serial</span> <span class="mi">28</span><span class="p">,</span> <span class="n">synthetic</span> <span class="n">NO</span><span class="p">,</span> <span class="n">window</span> <span class="mh">0x4800001</span><span class="p">,</span>
<span class="n">root</span> <span class="mh">0x59</span><span class="p">,</span> <span class="n">subw</span> <span class="mh">0x0</span><span class="p">,</span> <span class="n">time</span> <span class="mi">2775892</span><span class="p">,</span> <span class="p">(</span><span class="mi">373</span><span class="p">,</span><span class="mi">636</span><span class="p">),</span> <span class="n">root</span><span class="o">:</span><span class="p">(</span><span class="mi">376</span><span class="p">,</span><span class="mi">685</span><span class="p">),</span>
<span class="n">state</span> <span class="mh">0x0</span><span class="p">,</span> <span class="o">**</span><span class="n">keycode</span> <span class="mi">66</span><span class="o">**</span> <span class="p">(</span><span class="n">keysym</span> <span class="mh">0xff08</span><span class="p">,</span> <span class="n">Caps_Lock</span><span class="p">),</span> <span class="n">same_screen</span> <span class="n">YES</span><span class="p">,</span>
<span class="n">XKeysymToKeycode</span> <span class="n">returns</span> <span class="n">keycode</span><span class="o">:</span> <span class="mi">22</span>
<span class="n">XLookupString</span> <span class="n">gives</span> <span class="mi">1</span> <span class="n">bytes</span><span class="o">:</span> <span class="p">(</span><span class="mi">08</span><span class="p">)</span> <span class="s">"</span>
<span class="n">XmbLookupString</span> <span class="n">gives</span> <span class="mi">1</span> <span class="n">bytes</span><span class="o">:</span> <span class="p">(</span><span class="mi">08</span><span class="p">)</span> <span class="s">"</span>
<span class="n">XFilterEvent</span> <span class="n">returns</span><span class="o">:</span> <span class="n">False</span>
</pre></div>
<p>In there, you will see the keycode for the capslock key, in my case, number
<code>66</code>. Using that, create a file in your home directory called .Xmodmap, and put
the following in it:</p>
<div class="highlight"><pre><span class="o">!</span>
<span class="o">!</span> <span class="n">Make</span> <span class="n">the</span> <span class="n">caps</span> <span class="n">lock</span> <span class="n">button</span> <span class="n">a</span> <span class="n">backspace</span> <span class="n">button</span>
<span class="o">!</span>
<span class="n">remove</span> <span class="n">Lock</span> <span class="o">=</span> <span class="n">Caps_Lock</span>
<span class="n">keycode</span> <span class="mi">66</span> <span class="o">=</span> <span class="n">BackSpace</span>
</pre></div>
<p>Once that is done, the next time you log in, your caps lock will function as a
backspace. The only remaining problem is that it still does not have the
auto-repeat function that backspace should have. To fix that, run:</p>
<div class="highlight"><pre><span class="n">xset</span> <span class="n">r</span> <span class="mi">66</span>
</pre></div>
<p>That will make things work properly, but you need to run that every time you
log in, or else it won’t work properly. To fix that run:</p>
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">gedit</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">X11</span><span class="o">/</span><span class="n">Xsession</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="mi">50</span><span class="n">x11</span><span class="o">-</span><span class="n">common_determine</span><span class="o">-</span><span class="n">startup</span>
</pre></div>
<p>And add <code>xset r 66</code> to the bottom.</p>
<p>That should do it.</p>
<p><a href="http://ubuntuforums.org/showthread.php?t=369402">Source</a></p>Bypass Form Protection in MS Word2008-04-18T10:13:22-07:00Mike Lissnertag:michaeljaylissner.com,2008-04-18:posts/2008/04/18/bypass-form-protections-in-microsoft-word/<p>I recently had the occasion to need to get around the form protection in an
<span class="caps">MS</span> Word file. Turns out it’s a pretty easy exploit, but the directions I
found elsewhere on the internet didn’t quite do the job. </p>
<p>Here’s the trick:</p>
<ol>
<li>Open the protected document, and save it as an .html file.</li>
<li>Close the .doc file, and open the .html file in a text editor such as notepad or <span class="caps">GVIM</span></li>
<li>In the .html file, find a tag that says something like: “<w:UnprotectPassword><span class="caps">ABCDEF01</span></w:UnprotectPassword>”</li>
<li>Replace each of the characters in the tag with zeroes so it reads: <code><
w:UnprotectPassword>00000000</w:UnprotectPassword></code></li>
<li>Open the .html file in Word, and save it as a .doc. Go to Tools > Unprotect Document</li>
</ol>
<p>That should do it. I’d love to hear any evidence to the contrary. </p>The Vision2008-04-15T22:33:39-07:00Mike Lissnertag:michaeljaylissner.com,2008-04-15:posts/2008/04/15/the-vision/<p>If you have been reading this blog for any length of time, you are probably aware that I am a huge environmentalist. You may not clearly understand just how huge an environmentalist I am though. Lately, I have been doing some thinking about my long-term goals, and some of them are coming into some clarity:</p>
<ol>
<li>I want to build a house and live in it.</li>
<li>I want my house to be made while maintaining a neutral carbon impact. If I
use trees to build my house, I want those materials to be renewed before my death.</li>
<li>I want to stop using petroleum and coal altogether. No cars. No
petroleum fed food. Only clean energy. Offsets for all things outside the realm of the above.</li>
<li>I want to achieve the above comfortably.</li>
</ol>
<p>In a blog, these goals seem a little silly, but I have been thinking about variations of these for many years, and they are indeed quite serious, real goals. </p>
<p>That said, putting them out there in public makes me look and feel like an extremist, like a crazy person outside of what is considered the norm - outside even of the margins. I think I can do it though, and I think I need to get to work soon if I am going to feel like my life has been a success.</p>
<p>The first thing I need is money. More of it. Lots more of it.</p>The Mission: Results2008-04-15T22:17:28-07:00Mike Lissnertag:michaeljaylissner.com,2008-04-15:posts/2008/04/15/the-mission-results/<p>Well, it’s been a month, and the results are in. For the past month, I’ve been <a href="/blog/the-mission">trying to realize some pretty ambitious goals,</a> and let me tell you, it has not been easy.</p>
<p>The first, and perhaps most important goal was to “avoid single-passenger car usage at all costs.” For the most part, this goal has been a success. To achieve this goal, I have had to change my behavior and paradigms pretty radically. For my daily commute, I changed from a 25 minute car ride to a 45 minute bike and train ride. For groceries, I had to carry a massive backpack full of food, and for everything else, I have been riding my bike all around town. The one time I failed at this goal was when my car broke (somebody else was driving it), and it had to get to a mechanic. For that, I apologize, but what can you do?</p>
<p>The second goal was to jump a rope 500 times daily. I have failed at this goal for a couple of reasons. The first is travel. I did a fair amount of travel during the past month, and it’s a tiring thing to do. I don’t like jumping rope after traveling. That’s a fact. The second reason is that I was doing <em>a lot</em> of other exercise during the past month. I biked about 120 miles during my commute, I played soccer and basketball, and I hiked about 30 miles. Am I really supposed to jump rope after all that? </p>
<p>The next goal was flossing. I flossed pretty much every day during the period, but I did forget to bring it during one of the vacations mentioned above, so I didn’t floss during those nights. I was lucky enough to have a dentist (dis)appointment during the month, wherein I learned that I have three fresh, new cavities in my mouth, so that helped to make the flossing goal a success (sort of).</p>
<p>No hydrogenated oil. This was a pretty easy one all in all. I failed once, when in a meeting it just was kind of unavoidable because of social circumstances. I made up for it though by persuading a friend not to eat hydrogenated oil at a later date, so my karma is good there. This stuff is all over the place in food. It’s pretty surprising where it turns up when you start looking for it.</p>
<p>For the reading a half hour goal, it was a piece of cake since I was riding public transportation anyway. I did neglect it on the weekends, but I think the balance came out <span class="caps">OK</span>.</p>
<p>That was a lot of detail, I know. More than you probably wanted, but I wanted to get it on paper (so to speak). The real outcomes of this are not those of the 30 days, but rather the outcomes of long-term change in my habits. I can say that this was a rather challenging process, and I didn’t really enjoy it the entire time. It made me a lot more tired each day, and the commuting made me have to get up earlier, so that was tough. Figuring out how to do things by bike has a learning curve as well, which was also stressful at times.</p>
<p>When it is all said and done though, I can say that this has been a positive experience. I am planning on continuing most of the goals (floss, oil, car and reading), but I think the jump rope can leave my life at this point. </p>
<p>There are two answers to the question of whether the mission was a success. I did not achieve any of the goals without some kind of qualifier, so in that regard, no the mission has failed. However, on the other hand, it has created lasting change in me, so in that regard, the mission is a great success.</p>Something New…and Some Updates2008-04-01T22:45:48-07:00Mike Lissnertag:michaeljaylissner.com,2008-04-01:posts/2008/04/01/something-new-and-some-updates/<p>I’m starting something new. I can’t tell you what it is yet, but I’m very excited about it. It has nothing to do with anything you might be thinking that it is. Unless you already know what it is. Confused? Don’t be. You’ll find out what it is soon enough. For those of you that are wondering, no, this has nothing to do with my “Secret Skill” that I picked up while in Spain.</p>
<p>In other news, it’s official - I’m going to Peru in August before starting at Cal. I had no idea Peru was so awesome. It’s like a giant exaggerated California, except with jungle. They have massive <a href="http://en.wikipedia.org/wiki/Huacachina">sand dunes</a>, the <a href="http://en.wikipedia.org/wiki/Nevado_Huascaran">4th highest mountain in the Americas</a>, the headlands for the Amazon River, <a href="http://en.wikipedia.org/wiki/Colca_Canyon">giant canyons</a> that make the grand canyon seem quaint, and so much adventure, I have no idea how to handle it. Also, did I mention <a href="http://en.wikipedia.org/wiki/Machu_Picchu">Machu Picchu</a>? <a href="http://en.wikipedia.org/wiki/Lake_Titicaca">Lake Titicaca</a>?</p>
<p>More details to come on this craziness.</p>A Decision Has Been Made2008-03-15T00:47:52-07:00Mike Lissnertag:michaeljaylissner.com,2008-03-15:posts/2008/03/15/a-decision-has-been-made/<p>Well, it wasn’t easy to figure this one out, but I have officially chosen to
go to <span class="caps">UC</span> Berkeley. The reasons were many, but what it boiled down to in the
end were four things:</p>
<ul>
<li>Price</li>
<li>Curriculum</li>
<li>Location</li>
<li>Reputation</li>
</ul>
<p>These are usually summarized by the acronym <span class="caps">PCLR</span> (pronounced “Pickler”). </p>
<p>I’m excited about having chosen Cal, though it was a very challenging
decision. Obviously, my happiness for the next two years was at stake, but
beyond that, it seems like my entire future was on the table. Check back with
me in four years, we’ll see how I’m doing…</p>The Mission2008-03-15T00:41:57-07:00Mike Lissnertag:michaeljaylissner.com,2008-03-15:posts/2008/03/15/the-mission/<p>Here’s the mission folks. For the next month, I will do the following every day:</p>
<ul>
<li>I will jump a rope on average 500 times.</li>
<li>I will eat no hydrogenated oil</li>
<li>I will floss every day</li>
<li>I will avoid single-passenger car usage at all costs</li>
<li>I will read a book for at least one half hour</li>
</ul>
<p>I started this on Monday, and so far so good. It’s a lot for one day - especially the car and the jumprope thing.</p>
<p>Will report back (hopefully) in one month.</p>My Child Is NOT Catholic2008-03-09T10:34:27-07:00Mike Lissnertag:michaeljaylissner.com,2008-03-09:posts/2008/03/09/my-child-is-not-catholic-dawkins-insists/<p><img alt="Dawkins" src="https://michaeljaylissner.com/images/dawkins.jpg" /></p>
<p>I had the pleasure of going to see <a href="http://en.wikipedia.org/wiki/Richard_Dawkins">Richard Dawkins</a> last night at Cal.
Although our fourth-row seating probably influenced my judgement,
I must say he is a truly excellent speaker. </p>
<p>I finished his book, <a href="http://en.wikipedia.org/wiki/The_God_Delusion"><em>The God Delusion</em></a> several months ago,
and I had to agree with a friend who said he was a bit “heavy-handed” in
the book. So when I went to see him in person, I expected much the same. I
expected him to push me, to drive his point, to be a little bit too
aggressive in his delivery. To the contrary though, he is a subtle,
interesting, humble, and actually quite a funny speaker. </p>
<p>In his speech, he engaged in “consciousness raising”,
which he believes worked for feminism, and which he believes will work for
religion. His example was that as a result of feminist consciousness
raising, if I say: “All men are created equal”, you might think: “Right,
but what about the women?” He wants to apply this tool to religion,
so if I say: “A Catholic child”, you think: “Children aren’t Catholics -
They’re too young to know where they stand on such issues.” </p>
<p>He believes (and I must agree) that religion in the world has brought much
violence and destruction, and that the whole thing could be cut off at the
stem if we all realized that our children do not share our religion. I’m
simplifying and combining several of his points, but that was really the
thrust of his speech. If I am a catholic, that does not make my child a
catholic; I a Muslim, does not make my child a Muslim. Etc.</p>
<p>To drive his point home, Dawkins showed a picture that he said he found on
the Christmas cover of the <span class="caps">UK</span>’s <a href="http://www.telegraph.co.uk/">Telegraph Newspaper</a>. In the picture,
were three children sitting side by side in costume for some Christmas event
(I think they were the three wise men or some such). The idea behind the
picture was to depict religious harmony. To quote his book:</p>
<blockquote>
<p>At Christmas-time one year my daily newspaper, the Independent,
was looking for a seasonal image and found a heart-warmingly ecumenical one
at a school nativity play. The Three Wise Men were played by,
as the caption glowingly said, Shadbreet (a Sikh),
Musharraf (a Muslim) and Adele (a Christian), all aged four. Charming?
Heart-warming? No, it is not, it is neither; it is grotesque. […] Imagine
an identical photograph, with the caption changed as follows: “Shadbreet (a
Keynesian), Musharaff (a Monetarist) and Adele (a Marxist),
all aged four.” Wouldn’t this be a candidate for irate letters of protest?
It certainly should be.</p>
</blockquote>
<p>I can’t say that I’m one to really get “irate” about such things,
but he really does have a point. The number of people that grow up to be the
same religion as their parents is astounding. How can it be that the
religion of all peoples’ parents around the world just happens to be the
right one for their children? It defies logic.</p>
<p>So Dawkins believes that if we raise consciousness in a similar way to
feminism, and find a way to allow children to be nontheists until they are
old enough to make such decisions on their own, we might just be able to
beat thi religion thing. We might be able to curb religious violence by
allowing children to make their own choices. </p>
<p>It could work, and I for one am officially convinced that I will not let
people speak of religious children. </p>Notes on Drupal Multisite2008-03-05T23:23:24-08:00Mike Lissnertag:michaeljaylissner.com,2008-03-05:posts/2008/03/05/notes-on-drupal-multisite/<p>As I mentioned in my previous post, I just finished setting up a drupal multisite configuration. It took a lot of work to get this all figured out, so I thought I would put some notes together for those that may follow in my footsteps.</p>
<p>What challenged me the most with figuring this out were the concepts, so I want to touch on those more than anything else.</p>
<p>The way to set up a multisite installation consists of the following general steps:</p>
<ol>
<li>Make a new drupal database in your MySQL install</li>
<li>Set up the directory hierarchy in your drupal directory</li>
<li>Set up your second domain as a virtual host in apache</li>
<li>Configure your settings.php file to point to your new database</li>
<li>Run the install.php script from your browser</li>
</ol>
<p>That’s really it, but it’s kind of a complicated process. Some further
notes expanding the concepts from above:</p>
<ol>
<li>
<p>When you’re making your new MySQL database, I found the command line to
be the easiest way to do it, but there are a lot of instructions on how to
do it with web-based tools. For a good tutorial on the command line method
check this out <a href="http://drupal.org/node/22675">http://drupal.org/node/22675</a>.</p>
</li>
<li>
<p>The directory hierarchy was one of the more complicated parts of this for
some reason. Essentially, it should look like this:</p>
<p>:::bash
drupal/sites/default
drupal/sites/site1.com drupal/sites/site2.com</p>
</li>
</ol>
<p>Within site1.com and site2.com go your settings.php and dbconfig.php files.
If you like, you can put modules and themes directories as well. If you do,
drupal will use these modules/themes if there is not a module/theme of the
same name in the usual directory. This is really useful because it allows
modules to be installed on one site, the other or both,
depending on where you put the module’s directory.</p>
<ol>
<li>
<p>I can’t remember exactly how I set up the virtual hosts,
but the Internet has many resources on this one. The trick to know is that
one virtual host points to the drupal/sites/site1.com directory,
and the other points to the drupal/sites/site2.com directory.</p>
</li>
<li>
<p>No tricks here or on number five.</p>
</li>
</ol>
<p>Good luck! </p>New Website - CharityHikers.org2008-03-05T22:54:53-08:00Mike Lissnertag:michaeljaylissner.com,2008-03-05:posts/2008/03/05/new-website-charityhikersorg/<p>Just a quick post today to announce that I have finally figured out how to run a drupal multisite installation, and I have finally converted my old website, <a href="http://www.charityhikers.org">CharityHikers.org</a> over to Drupal. Making charityhikers.org a dynamically driven site has been one of my goals since about 2004, so completing this task is giving me an excellent dose of satisfaction. </p>
<p>The site began as a place where I could put up information about my hike for <span class="caps">AIDS</span> research, but I have developed it into something that other people can use to fundraise for their own causes. With this step, I think it is finally getting pretty close to a useful tool, but I still have a couple of things I’d like to accomplish with the site.</p>
<p>The biggest goal I have for it is to allow hikers to sign up, and then update their profile with their charity and personal information, and to have that dynamically generate the menus, pages, etc. that are needed for the site so that their new information is automatically integrated. At present, pages have to be manually created through the <span class="caps">CMS</span> system, which is a bit of work, but it’s not too bad all in all.</p>
<p>The second goal I have is to allow picture uploading for hikers. It doesn’t take a whole lot of storage space to do this, and it seems like a good service to provide. My current plan is to use gallery2 to accomplish this feat, but I’m having some serious issues with the database right now.</p>
<p>Anyway, goals and road maps aside, I’m really quite happy with this change. My real goal is for this site to really start bringing in donations. So far it’s brought in a little over $10K, but in the scheme of things that’s really not a whole lot of money…</p>Treasures of Old Websites Part II2008-02-26T19:07:14-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-26:posts/2008/02/26/treasures-of-old-websites-part-ii/<p>I also found the attached news articles I had posted on my website. Pretty
funny/embarrassing stuff.</p>
<h3 id="enclosures">Enclosures:</h3>
<ol>
<li><a href="https://michaeljaylissner.com/pdfs/pct-news-articles/claremont-courier.pdf">Claremont Courier: Pitzer Graduate Ventures 2,650 Miles on Foot</a></li>
<li><a href="https://michaeljaylissner.com/pdfs/pct-news-articles/inland-valley-bulletin.pdf">Oaklnd Tribune: Hike to Cure <span class="caps">AIDS</span></a></li>
<li><a href="https://michaeljaylissner.com/pdfs/pct-news-articles/oakland-tribune.pdf">Inland Valley Daily Bulletin: Pitzer Grad to Attempt Mexico-to-Canada Hike</a></li>
<li><a href="https://michaeljaylissner.com/pdfs/pct-news-articles/pitzer-college-press-release.pdf">Pitzer College Press Release</a></li>
</ol>Treasures of Old Websites2008-02-26T18:58:04-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-26:posts/2008/02/26/treasures-of-old-websites/
<h2 id="background">Background</h2>
<p>I’ve been working the past couple of days on getting my other site,
charityhikers.org moved over to my home server and recreated on Drupal. It’s
turning out to be a huge pain in the neck. The main problem is that there seem
to be too many viable ways to accomplish what I want, and no consensus as to
what the best one is. The result of this is that there are a number of
half-hearted attempts at explaining how to have multiple sites running off of
one Drupal installation, but none of them are really that detailed, or really
apply all that well…it’s frustrating.</p>
<p>However! In doing this, I discovered a treasure I thought I had lost. I
discovered my old <span class="caps">PCT</span> journal entries, which I have posted below, by date.
It’s a bit long, so I won’t be offended if nobody reads them, but it’s
interesting to see what I was thinking before the big trip back in ‘05.
Unfortunately, I don’t have any of the actual posts from the trail, so it’s a
bit of a cliff hanger. Alas.</p>
<h2 id="madman-planning">Madman Planning</h2>
<p><strong>21 March 2005</strong><br/>
Well, it seems the journaling function of my site is finally up and running.
It has been a long road to get here today, and I am glad we are finally
nearing the end of it.</p>
<p>I can not say I have really kept a journal very much in the past, so this is a
bit of a foreign medium to me. I write lots of personal emails though, so
perhaps I will just pretend I am writing one of my confidants, and see how
that goes for a while. Nah. Too easy.</p>
<p>So, planning for the trip comes along nicely these days. At this point, I am
pretty much ready to go with the following enormous gaping holes in my preparations:</p>
<ol>
<li>I have not finalized my resupply bounce box, or the destinations it will be
going to.</li>
<li>My first aid training from October is growing more and more useless by the
day. I need to restudy it before the trip, but it is just so boring.</li>
<li>I need to move out.</li>
<li>Some sewing remains to be done.</li>
</ol>
<p>I guess this means the planning is coming along nicely. Whatever the case, I
will be ready when the time comes. I know what gear to take, and I have my
many permits all taped to my wall.</p>
<p>Last weekend I took some time to actually study my first aid stuff. I
discovered that I had indeed forgotten the many nuances of it as I had
imagined I would. I did think of a brilliant way to remember it all though: I
finally made my own <a href="https://michaeljaylissner.com/archive/SOAPA_Note.xls"><span class="caps">SOAP</span> note</a>. These are the things you use when an
accident occurs to make sure you take all the right vital signs and ask all the
right questions. By making my own, I essentially wrote myself a guide to first aid.</p>
<p>Jeesh this is a boring entry. I kind of just wanted to write it so that
something would be here, and so people had something to read. I will write
another one in a week or so.</p>
<h2 id="backpacking-journaling-etc">Backpacking, Journaling, Etc</h2>
<p><strong>25 March 2005</strong><br/>
Well, I think I said in the last journal entry that the journal site was done.
That was a lie. It needs more work, and seems to be an interminable source of
work. That having been said, I am fairly certain it is about done now. I have
been working with a volunteer from Craig’s List on getting everything to work
the way I want it to, and the result has been pretty sweet thus far. Last
night I stayed up rather late and got it to its present condition. A number of
changes have been made to it, but nothing that will wow non-coders, so I am
going to spare you all any more talk about this subject.</p>
<p>A more interesting subject to talk about is the fact that I am going
backpacking this weekend. It will probably be the last trip before the big one,
so it is a bit stressful. I am trying out a couple of new things, namely some
padding that I put into the straps of the M5 so it would hold more weight, some
new shoes that I pro-dealed from Vasque, and I think that is about it. I might
see if I can stand using Ken (my quilt). It is getting warmer out.</p>
<p>The one thing that I haven not been able to decide is where the hell I want to
go. I do not want to go to Big Sur because it is infested with Poison Oak and
ticks, the trails are unreliable, and there is not that much ground to cover.
So, that having been said, where should I go? Certainly not Point Reyes. Jesus
that place is busy on a normal weekend, this is Easter weekend. I guess I
could go to a more southern area in Los Padres forest and successfully dodge
the snow down there. It is a long drive though. Much longer than I would like.</p>
<p>Anyway, as the last hike before the trip, it is bound to be humbling. I think
I can get at least 50 miles in this weekend, so that will be good experience
as well.</p>
<h2 id="skyline-to-sea-trip-report-raccoons-rains-and-rushing-waters">Skyline to Sea Trip Report » Raccoons, Rains, and Rushing Waters</h2>
<p><strong>28 March 2005</strong><br/>
Well, I am back from the trip, and it was quite awesome. Certainly something
to write home about anyway.</p>
<p>I started off the trip on Saturday, whereupon I learned that there was no
legal parking at the trail head. Pretty damned annoying really. I get out of
bed early to rush myself to the trailhead, where I learn that there is no
parking. There is not even a ranger station, but there is a payphone to make
up for the lack of cell phone coverage. So, I called the station, and made
reservations for the campsites. Do you take credit cards? Naturally, they do
not, and naturally the nearest <span class="caps">ATM</span> is about half an hour away. So, here I am,
I have my reservations, but no way to pay for them, and I am at the trailhead,
with nowhere to park within about ten miles. I spend about half an hour looking
for parking, eventually finding a place I can pull off the road that does not
have any <em>blatant</em> signs saying I can’t park there. I park. I hit the trail,
and for the first 2/3rds of Saturday, I followed the road, crossing it every
few miles. It was noisy, and lame, but eventually it kind of veered away from
the road and became much more beautiful. By the time I finished my first 16
miles, and made camp, I was in the heart of the Big Basin Natural Park, a
beautiful place indeed.</p>
<p>Upon waking up the next day, I headed west yet again, towards the sea. Beauty
was everywhere, but it was the best when I saw the beginnings of Barney Falls,
which are by far the most beautiful waterfalls I have ever seen outside of
Yosemite. Imagine if you will, hiking along through trees that have been around
since the Byzantine Empire (probably), on this verdant and moist trail. It is
gorgeous. Then, all of a sudden, you see a waterfall that is about 50 feet
high, and rather wide in the middle of it all — Gorgeous.</p>
<p>So, anyway, I eventually, made it to the sea, and turned around to head 31
miles back to camp, and eventually my car. Along that direction, I saw a lot
of the people that I had passed going the other way, and they were rather
curious to see me coming at them a second time, but that is another story. The
real story is that Rain was predicted. I made camp at Sunset Camp in what
looked like a good spot if it should start raining. Well, it did start
raining, and eventually that spot became flooded. I spent about an hour
digging in the mud, making dikes and dams around my tarp, but in the end it
proved to be a futile effort. I probably dumped out my 1L pot about 50 times
before I gave up. It was a sad day, but luckily, moving my tarp was not such a
big deal, so I did.</p>
<p>Night fell.</p>
<p>With night came animals (the bastards). I was sleeping under my tarp in one
hell of a rain storm. Thus I could hear just about nothing. I woke up to see
what looked like something white moving away from my tent. It was a full moon,
but the clouds made it pitch dark out. I grabbed for my flashlight, and
discovered that it was missing. Shit. I grabbed for my pack, where I had a
backup light, and discovered <span class="caps">IT</span> was missing. <span class="caps">SHIT</span>. <span class="caps">SHIT</span>. <span class="caps">SHIT</span>. Bobcats have
stolen my pack right from next to me under my tarp. I now have no light, and
it is too dark to walk anywhere. Ok. I need to get a light from the people in
the neighboring camp. They are asleep. I will have to wake them. Done. Ok. I
have a light. It went on like that for about half an hour, eventually resulting
in my discovery of everything that was once mine with the exception of my food
bag, the food that was in it, and one of my (expensive titanium) stakes that
had gone missing during the tent move. I tied my pack to my tarp with the
theory being that if bobcats were going to steal my pack, they would have to
wake me up to do it. They did come back to steal my <span class="caps">EMPTY</span> pack, but it is not
like it woke me, and they were unable to get it untied. Oh, and they were
apparently raccoons, not bobcats. So, in conclusion, I lost all of my food for
the final day, and my pack got some tears in it. Not cool at all. So, I hiked
out to the nearest road, informed the ranger, and hitch-hiked back to my car.
All in all, about fifty miles covered, one storm bested, and a mafia of
racoons fed.</p>
<h2 id="training-preparations-and-having-both-arms-pulled-in-opposite-directions">Training, Preparations and Having Both Arms Pulled In Opposite Directions</h2>
<p><strong>4 April 2005</strong><br/>
So, the final weeks are upon us. There’s no denying that now. How am I coping
is probably the best question to ask at this point. The answer is that I’m
losing a fair amount of sleep because I keep waking up with revelations pretty
much every night, but other than that, I’m doing ok. Plus, I’m unemployed, so
it doesn’t particularly matter that I don’t get the best sleep during the night
because I can always just sleep more during the day.</p>
<p>These revelations though, they’ve got to stop. Pretty much every night I
either dream <span class="caps">PCT</span>, or wake up around four in the morning with the revelation
that, “Put shampoo in your bounce box,” or, “you’ll want a
phone card.” Really, I wish my brain would just take a chill pill. Last
night was especially bad, which pretty much explains why I’m complaining
about it so much. I’m pretty sure that was due to the fact that I made
(and ate) about a dozen cookies the day before though.</p>
<p>The weekend was good as far as training went. I did some sewing on Captain
Tent for Mr. Boothe, and I made myself a right hand rain mitt out of Epic
material. Now I just need to make mike some mitts, and myself a left hand
mitt, and my sewing will be done.</p>
<p>So far today I have been pulled in so many different directions is kind of
strange. I dealt with my phone line; returned messages; got paid for my final
weeks of work (though I still need to go to the bank); programmed my <span class="caps">GPS</span> a bit,
and dealt with some <span class="caps">AIDS</span> fundraising stuff. So many different things, so
little time. I have to get back to work, but before I do, a report on the
training that I did, and the fact that I have blisters.</p>
<p>Over the weekend, I did some training by hiking about ten miles out to
Barney Falls again, and climbing bleachers at Cal. Both were tiring, but today
I must train more. The hike was really strange because Rachael and I were
accompanied by a photographer from the Oakland Tribune. Keep your eyes peeled
for the article on April 18th.</p>
<h2 id="revisiting-the-worst-day-of-all-time">Revisiting the Worst Day of All Time.</h2>
<p><strong>11 April 2005</strong><br/>
Approximately one year ago today, I received in the mail a form from the <span class="caps">DMV</span>
that told me that me registration on my Mustang was overdue, and that in
addition to the regular fee, I was being charged a late fee. At the time, it
was frustrating because I had never been asked for the original fee, and at
the time I was rather strapped for money. I eventually went down to the <span class="caps">DMV</span>,
where, after waiting in line for some time, I learned that I had forgot my
wallet. You can imagine how terrible this was on a hot day in <span class="caps">LA</span> traffic.</p>
<p>I drove home to get it, and calmed down a bit about how frustrating it was
that the one time in a very long time that I forgot my wallet, this was the
effect. I got back in my hot car, and drove back to the <span class="caps">DMV</span> (about a half
hour drive, with no traffic). In addition to having traffic, I actually had to
wait for a funeral procession to go by. It took a long time, and I had no A/C.
In the end, I got the late fee waived, got new stickers for my car, and got on
with life, considering it the worst day of all time, which it was at the time.
I realize that it doesn’t sound so bad, but there were more details I’ve
left out for all of our sake.</p>
<p>Today is threatening to be about as bad as that day. For the past month, I
have been harassing my dad (also my employer) about getting me my tax forms.
Finally, on Saturday, he got them to me. This left me with about five days to
get them done - not much time, if any at all really. So today, being the
earliest time that I could get them in, I called H&R Block to see what
they could do for me. After telling them some information, I came to learn
that it looked like I owed about, oh $2,500 by the man’s estimate. About half
of what I have saved for the trip. This is not good news, so I decide I should
call my dad to give him a piece of my mind, and ask how the hell this happened.
He, being the savvy business owner that he is, asks me a number of
questions, and informs me that I need to get an extension so that his <span class="caps">CPA</span> can
deal with it when I drive down to San Diego for the Kick Off. Just what I need
right now. So, here’s the uncertainty with that: I don’t know who’s going to
pay that money, or how much it is going to come out to. Probably somewhere
around $1,500 is my guess. More than I would like to part with, especially to
the war machine. I mean, what would Emerson say?</p>
<p>So that was pretty bad, but I filed the extension over the phone, agreed to
pay a 1% late fee, and got on with life. The next project was to call the <span class="caps">DMV</span>
about the notice I got last week informing me that, yet again, I had become
“delinquent” in my “renewal.” Sigh. here’s the bad news, the car that I
failed to renew? I gave it to my dad to sell. He sold it to one of his
employees in Mexico. I don’t know who, but it’s down there, being the good
Mustang it always was. So. I call the <span class="caps">DMV</span> to ask them what to do about the fee
I owe on the car I don’t have. The third time I call the number, I don’t get
the busy signal, and I actually get through to a phone maze of some sort.
After dialing about ten numbers, I get put on hold for a second. Then, I get
thrown back into the phone maze, because all operators were busy. So, I go
through it again, and get put into the queue. This happens three times.
Eventually, I get through to what sounded like a Vietnamese woman that was
fresh to America. She barely spoke English, and was quite angry for some
reason. Why? I don’t know. Anyway, I asked her what to do. She says, file the
Release of Liability Form, <span class="caps">REG138</span>. Ok, I say. She notes that it will ask who I
sold the car to. Hell. I don’t know who it’s sold to. My dad sold it in Mexico
to one of his workers. He probably doesn’t even know my dad anymore. I tell
her this, and the jist of what she says is, well, you can’t release liability
without that information. I reiterate that I don’t have it, and she tries to
hang up on me. I plead, “please, please don’t hang up on me.” Miraculously,
she does not. I ask again, what can I do if I don’t know their name? She has
no answers, and barely speaks English, so I ask for a supervisor. No luck. She
says, I should call the “Registration Control Unit in Sacramento,” and gives
me a number, 916.767.8035. Happy, I call the number. She was toying with me.
The number has this message, “At the tone, the time will be 2:22 <span class="caps">PM</span> Pacific
time. Beep.” She literally gave me the number to the universal time place. I
am still in shock about that.</p>
<p>So here’s the summary. I owe a couple of grand in taxes. I have a car that
is mine, but is owned by somebody else. I can either pay $100 for it every
year, or somehow try to find another answer. It’s <span class="caps">3PM</span>. Today has been terrible,
but at least I didn’t get stuck behind a funeral procession. Perhaps I hate the
<span class="caps">DMV</span>. How can it be so bad without people being up in arms? I don’t understand.
We live in the modern age.</p>
<h2 id="better-today-thanks-for-asking">Better Today, Thanks for Asking</h2>
<p><strong>13 April 2005</strong>
Well, it seems that all is well in the world of <span class="caps">PCT</span> planning. For some reason,
I can’t quite figure out what it is that I should be doing to get ready.
It’s possible that I’m entirely ready at this point. I have a few things that
I want to shop for, but the pile of gear that is going with me down to San
Diego is ready. I can’t really pack for the trip yet because I don’t want to
compress my sleeping bag, but all else is ready.</p>
<p>My roommate Rachael has told me that I should jot down some of my biggest
worries for my ever vigilant public. Probably my biggest worries at this point
are water worries - that one, I won’t get through the desert without some
serious dehydration, and that two, I won’t get through the Sierra Snow like I
need to. I have done some thinking about the southern California water
situation, and I think the thing to do about it is carry a ton of water, keep
your eye on the next water stop, and hope for the best. I figure if I carry
six liters, I should have more than enough. Usually that’s cutting it close,
but I hear that every creek, crik and rivelet is pumping with water this year.</p>
<p>As to what I am going to do about the snow in the sierras, and, more
importantly, the San Gabriels, I think the plan is to hit it like a ton of
bricks. It’s not the most brilliant plan, but I think it <em>might</em> just work. I
think my age might factor into this foolhardy plan. Anyway, we’re going to hit
it, and perhaps we’ll break fresh trail. Should be interesting anyway.</p>
<p>One other concern that I am harboring at this point is Ken. Ken is my homemade
sleeping quilt. I’ve had him for about eight or nine months now, but
I’ve been too afraid to really get out with him much. I have been sleeping
under him for a good few days now, and I think I can get used to him. If not,
I’ll have a Feathered Friends Hummingbird waiting for me at my mom’s house in
San Diego, so worst case scenario, I’ll just have her mail me that.</p>
<p>So, all in all, I think I’m in the calm before the storm. It’s possible
of course that the storm will never hit, but I’m pretty sure it will. Take
the following information, and tell me if it adds up nicely: On Friday, I have
a going away party in Berkeley. On Saturday, I have one in <span class="caps">LA</span>. On Sunday, I
have one in San Diego. On Monday, I have a date with my dad’s <span class="caps">CPA</span> to do my
taxes. Hmmm…</p>
<h2 id="finishing-touches">Finishing Touches</h2>
<p><strong>19 April 2005</strong><br/>
Well, things are winding down, and it looks like I am about ready to go now.
The bounce box is packed; I have resupply packages set up for Warner Springs,
Idyllwild, Wrightwood, Kennedy Meadows, and Ashland; I’ve been on tour for the
past few days, and have said goodbye to just about everybody I know; and I’ve
done, filed and paid my taxes (grand total with deductions: ~$500).</p>
<p>Even though it seems like everything is a go, I feel somewhat strange. In a few
days, I’m going to begin walking. After walking for a few days, I’m
going to continue walking. Then, after a few weeks of walking, yes, I am going
to walk some more. Eventually, after five months of it, I will stop walking,
if and only if I have made it to Canada. Sounds simple, but I get bored easily.
I’ve never done anything quite like this before, so I can only guess how my
mind and body will react. I’m pretty confident about how my body will react
(aside from my ankles and hips), but I know my mind is going to go insane at
least temporarily. I was trying to explain to a friend last night about how
it will happen when my brain tries to make me quit. I think that at first my
brain will tell me that I’m bored. Then it will tell me to quit, that there’s
no point in going on if I’m not having fun. Eventually, I will tell it to go
away and mind its own business, but it’s harassed me incessantly in the
past, and it will continue harassing me on and on even after I’ve asked it to
leave me alone. The trick is going to be telling it to go away, and
remembering all the reasons that I am on the trail - the beauty, the
challenge, the isolation.</p>
<p>I guess I have cold feet a little bit right now, but I’m quite excited. I
know it will be the trip that defines the next chapters in my life, and I know
that I will leave the trip a changed person.</p>
<p>The next post will be from the trail.</p>Went Solo Backpacking this Weekend2008-02-24T22:07:32-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-24:posts/2008/02/24/went-solo-backpacking-this-weekend/<p>I went solo backpacking this weekend for the first time in a <span class="caps">LONG</span> time. I think the last time I really did a trip like this one was actually before I did the <a href="http://www.pcta.org"><span class="caps">PCT</span></a>, which was back in ‘04. </p>
<p>I went out to Point Reyes National Park, leaving Friday after work, and returning Sunday. On Friday, I camped at the ranger station, and on Saturday, I set out on an ambitious trek covering 25 miles that day, and 5 the next. I had packed extremely lightly with no water filtration, no stove, pot, spoon. Really, the only things in my pack were food, clothes, a tarp and stakes, some knick knacks and a water bladder. </p>
<p>With the light load, things were going well on Saturday morning, but then, a little after lunch, it started to rain. Then pour. Then the winds came on. All in all, as it should turn out, this was <a href="http://www.sfgate.com/cgi-bin/article.cgi?f=/n/a/2008/02/22/state/n105157S77.DTL&hw=rain&sn=024&sc=254">one hell of a storm</a>. I set up my day so that I do a loop starting on the east heading south, and then I would hook west and head north along the coast. This meant that once the storm hit, I would be heading north on an incredibly exposed trail for about 15 miles. </p>
<p>Let me tell you folks, it was an adventure. I was so exposed that I felt like I could not stop to eat, drink or anything, so I just kept hiking for the entire distance, until I reached camp, after a long, long day. At one point, in one of the windier areas, I was running downhill, the wind coming on so hard that I began to be detached from the earth. It was actually lifting me off the ground…not a lot, just a little, but enough to be a worry. </p>
<p>Anyway, despite the adventure, the trip was good. It gave me some time to reflect on all the changes coming on in my life, and to get out and feel alive. </p>
<p>Did I find the answer to my question of Cal vs. <span class="caps">UW</span>? No…not in nature I didn’t.</p>It’s Official. I’m Going to Grad School.2008-02-21T22:37:02-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-21:posts/2008/02/21/i-am-going-to-grad-school/<p>I hadn’t mentioned this previously here on the blog, but for the past several months, I’ve been working my butt off putting together two grad school applications for Masters of Information Management (<span class="caps">MIMS</span>). The two applications were for <a href="http://ischool.berkeley.edu"><span class="caps">UC</span> Berkeley School of Information</a> and <a href="http://www.ischool.washington.edu">University of Washington Information School</a>. </p>
<p>I am elated to announce that yesterday I heard from <span class="caps">UW</span>, and today I heard from Cal. They have both officially offered me entrance into the Fall 2008 class. Amazing. </p>
<p>I applied to the program at Cal last year and was denied, so I didn’t really expect them to let me in this year, but things are looking up. Now I just have to decide which one to go to.</p>
<p>On the one hand, <span class="caps">UW</span> is a bigger program with seemingly more resources, but Cal is a smaller, leaner, and more personalized. I think it looks like I need to plan a visit to <span class="caps">UW</span> for an on-campus day.</p>
<p>Anybody have any ideas on which to go to? </p>Yosemite Pictures Posted2008-02-19T23:07:59-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-19:posts/2008/02/19/yosemite-pictures-posted/<p><img alt="No alt" src="https://michaeljaylissner.com/images/Yosemite Cover Pic.JPG" /></p>
<p>Just a quick note today to announce that pictures from last weekend are
posted in the photo area for those of you that have logins. </p>
<p>It was a fantastic weekend. Some friends and I decided to go to Yosemite to
go hiking, show shoeing and camping. All in all, Yosemite remains one of
the most beautiful places on earth. The pictures are impressive,
but they still can’t tell the whole story. Enjoy.</p>Install Garmin Topo! in Linux2008-02-11T22:08:23-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-11:posts/2008/02/11/install-garmin-topo-in-linux/<p>I’m planning a quick trip out to Yosemite for next weekend, and I wanted to print out a couple of maps from Garmin Topo! beforehand. The last time I used Topo! was about four years ago, when I had Windows <span class="caps">XP</span> installed. I don’t remember how I installed it then, but that probably means it wasn’t too challenging. </p>
<p>This time, however, I don’t have a computer running Windows except for as a virtual client within Ubuntu, so I figured that would be the best place to begin. I booted up Windows <span class="caps">XP</span>, popped in the <span class="caps">CD</span>, mounted it within the virtual client, and tried to install. No dice: some error message. I played with it for a while, and I eventually decided that for some reason, it just wasn’t going to work. </p>
<p>My next idea was to try installing Topo! within Ubuntu via Wine (Wine Is Not an Emulator). Wine is an application that attempts (and often fails, sometimes works) to allow Windows applications a method of working within Linux. I closed down Windows, opened the install <span class="caps">CD</span> within Ubuntu, and double-clicked the Setup.exe file. Amazingly, the Windows Install Shield business popped up, and the installation proceeded with no problems whatsoever.</p>
<p>Once that was done, the only remaining step was to make myself a nice link/alias/launcher. Once it’s installed, the Topo! executable is located at ~/.wine/drive_c/<span class="caps">TOPO</span>!/<span class="caps">TOPO</span>.<span class="caps">EXE</span>, so it’s just a matter of making a link to that, and you’re all done.</p>Federal Salaries2008-02-10T12:02:17-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-10:posts/2008/02/10/federal-salaries/<p>Just some food for thought from <a href="http://thebudgetgraph.com">thebudgetgraph.com</a>:</p>
<ul>
<li>Salary of William McGuire, <span class="caps">CEO</span> of UnitedHealth Group: <strong>$124M</strong></li>
<li>Salary of Leslie Norwalk, Head Administrator of Medicare/Medicaid: <strong>$143,250</strong></li>
<li>Salary of <span class="caps">CEO</span> of Walmart: <strong>$17.5M</strong></li>
<li>Salary of Postmaster General of the <span class="caps">USPS</span>: <strong>$173,000</strong></li>
<li>Highest paid federal employee, Army Football Coach Bobby Ross: <strong>$600,000</strong></li>
<li>President’s salary (perks aside): <strong>$400,000</strong></li>
</ul>
<p>And just to add some perspective, the <span class="caps">USPS</span> would be the 20th largest company above Meryl Lynch, if it were private (revenues of <strong>$78B</strong>). </p>
<p>Medicare/Medicaid has a revenue of <strong>$565B</strong>; UnitedHealth Group has <strong>$45.4B</strong>.</p>
<p>Football is a game. </p>
<p>The president rules the free world (more or less). </p>
<p>Painful.</p>Tune Your Monitor. You’ll Like It.2008-02-10T10:45:55-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-10:posts/2008/02/10/tune-your-monitor-youll-like-it/<p>I recently bought a new <span class="caps">LCD</span> monitor, and when I plugged it in, it was terribly fuzzy, so I returned it, and got a new one…which was also fuzzy (though less so). This made me wonder if I could perhaps fix the problem, so I began playing with all those buttons on my monitor.</p>
<p>I managed to improve things, but until I discovered the images on <a href="http://www.lagom.nl/lcd-test/">this page</a>, I couldn’t get it quite dialed in.</p>
<p>It was actually a pretty surprising experience adjusting the monitor at that website. You essentially are shown an image, and asked to adjust one of your settings until the image looks right. It works like a charm, and if your <span class="caps">LCD</span> is at all fuzzy, I highly recommend it.</p>Personal Music Collections2008-02-02T20:02:59-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-02:posts/2008/02/02/personal-music-collections/<p>I was curious which artists of mine had the most songs, so I ran:</p>
<div class="highlight"><pre>du Music/ | sort -nr | head -11
</pre></div>
<p>Now we know that my top ten artists are:</p>
<div class="highlight"><pre>% du Music/ | sort -nr | head -11
17582796 Music/
490928 Music/Radiohead
378148 Music/Daft Punk
315856 Music/Red Hot Chili Peppers
313032 Music/Massive Attack
306228 Music/Kanye West
305796 Music/Outkast
289288 Music/Nirvana
276416 Music/Beck
258544 Music/Nine Inch Nails
248608 Music/Beatles, The
</pre></div>Bots be Damned!2008-02-01T18:18:42-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-01:posts/2008/02/01/bots-be-damned/<p>Well, I know my site must be really popular now.<sup><small>1</small></sup> I have begun getting my first comment spam from a lovely person hawking porn via links posted as comments. </p>
<p><a href="http://en.wikipedia.org/wiki/Captcha">Math captchas</a> have been implemented. Bots be damned!</p>
<p><sup><small>1</small></sup>This is a stab at being facetious.</p>GIS Training2008-02-01T18:02:58-08:00Mike Lissnertag:michaeljaylissner.com,2008-02-01:posts/2008/02/01/gis-training/<p>My work sent me on a Geographic Information System (<span class="caps">GIS</span>) training today, and I must say it was a very educational experience. I was unfamiliar with <span class="caps">GIS</span> before the training, and after today, look what I can do:</p>
<p><img alt="No Alt" src="https://michaeljaylissner.com/images/gis-example2.jpg" /></p>
<p>The basic idea is to be able to take census tracts of land, combine them with population studies, and then to plot the information geographically (as above). The software of choice for places that need closed-source software (such as my work) seems to be ArcGIS, but there are several other open source versions that are free. The two that I’ve found so far are Grass and QuantumGIS (aka qgis). </p>
<p>From what I can tell, Grass is the original, old-skool <span class="caps">GIS</span> developed by the military, and Quantum is the up and coming <span class="caps">GIS</span> that wants to supplant it. I’ll try to come back once I’ve tried them both, and let people know what I learn. In the mean time, I must say it’s exciting to be able to make graphs like these. </p>
<p>Any requests for studies? I’m amped to test these out…</p>Marvelous RSS, Marvelous Google2008-01-27T15:36:34-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-27:posts/2008/01/27/marvelous-rss-marvelous-google/<p>I’ve been working on the site a fair amount lately, and have added a couple of
new features. The first one is a set of those ubiquitous bookmarking buttons
for Technorati, del.icio.us, etc. that you should be seeing if you are reading
this online. I’ve been trying to optimize this blog for a bit, and I figured
I probably need these sooner or later.</p>
<p>The other thing I added today is the “Subscribe” block, which for the moment
is listed on the left under the recent music. I did a little playing around in
the heart of Drupal, and modified this block so that it has text links for
<span class="caps">RSS</span> and for an email service I just discovered from Google.</p>Amazon Has mp3’s! I Wish I Could Download Them…2008-01-22T19:04:40-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-22:posts/2008/01/22/amazon-has-mp3s/<p>It made some headlines, and is about to make more during superbowl.
<a href="http://www.news.com/8301-10784_3-9848258-7.html?tag=newsmap">Amazon
has started selling mp3’s from all four of the major record labels.</a> It’s a
pretty cool revelation, so I went ahead and checked it out.</p>
<p>Guess what? Linux users, you are screwed. In order to download albums from
Amazon, you must “Get the Amazon mp3 downloader”…which is not available for
Linux. Excuse me? Say what? I have downloaded literally hundreds upon hundreds
of files from the Internet, and never have I needed a special tool other than
Firefox. Why now? </p>
<p>Amazon, if you’re going to do something great like this, do it whole hog.
Don’t make me install junkware. After all, I’m <em>choosing</em> to give you
money, right? </p>New Theme Poll2008-01-21T15:09:25-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-21:posts/2008/01/21/new-theme/<p>I’ve finally taken a moment to change the official theme of my site. I have
thoughts about the change, but I can’t share them, because to do so would
be to bias the poll I’ve created here <strong>[poll archived]</strong>.</p>
<p>So, that, in a nutshell is the question I have today. Do we roll with the
new theme that you should be seeing now (if not, hit refresh),
or do we roll with the old theme that can still be used if you log in and
then edit your default theme to Garland.</p>
<p>After all those posts about elections, don’t you want to vote? Go ahead,
follow the link above. Share your opinion…</p>Top Five Problems with Major American Elections2008-01-20T13:04:07-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-20:posts/2008/01/20/top-five-problems-with-elections/<p>I’ve been thinking about elections a lot lately (even before that last post), and I’ve come up with five things that are simply broken about democracy. Call me a commie or a socialist or something if you must, but I challenge you to identify why these are not critical flaws with our system. </p>
<p><strong>Number 1 - Money</strong>
It’s long been known that it’s expensive to run for any political position, but how much does it really cost? Well, as of January 9, <a href="http://blog.washingtonpost.com/the-trail/2008/01/09/clinton_fundraising_remains_st.html">this article</a> says that Hillary has raised about 24 million bucks. That’s pretty darned impressive, but let’s take a moment to think about that. Nobody gives money for nothing, so the way I like to think about it is to say that she is 24 million dollars in debt. If she wins, she’ll need to get that money back to those companies/people, and will probably do something to make that happen. Kind of like the current administration <a href="http://www.google.com/search?oe=utf-8&rls=com.ubuntu%3Aen-US%3Aofficial&client=firefox-a&um=1&hl=en&q=halliburton+cheney+connection&sa=N&tab=nw">did for Halliburton</a>, except more democratic. So we have a new president that has biases on their very first day. Great. My solution to this is a very simple concept: publicly funded elections. I know it sounds expensive, but it serves two purposes. The first is that it allows politicians that are running for office to focus on their current jobs, rather than focusing on raising money. The second is that it levels the playing field for third parties (see number 2 below) while creating elected officials without debts to companies. What a concept!</p>
<p><strong>Number 2 - No Third Party</strong>
This one is obvious. Does anybody vote green or independent (or other) outside of strongly democratic states? Is there a third party? No, not really, which means that it’s either democrat or republican, i.e. status quo. </p>
<p><strong>Number 3 - Nobody Knows Their Candidate</strong>
It’s a fact. There is so much hype around elections that pretty much everybody, including those who follow these things pretty closely don’t know what their candidate stands for. What it comes down to for the democratic primary is, “Black or woman?” In the case of the republican primary it’s “Military guy or mormon?” That is not how the fate of the world (voting for president) should be decided, but I bet it’s about what it’s coming down to. I recently was shown a site called <a href="http://www.glassbooth.com">glassbooth.com</a>, which asks you some questions about your opinions on issues, and then tells you how to vote so you get a candidate that agrees with your opinions. Doesn’t that make more sense? Can’t we have that when we vote for president? </p>
<p><strong>Number 4 - State Electorate System…Broken.</strong>
Shall we face it yet that having our vote broken up by state electorate points doesn’t make much sense? Why should our votes be broken up by artificial lines in the sand? It doesn’t pass the logic test if you ask me. For example, there was a recent measure in California to redistrict the state, thus allowing a more accurate split of its points. That makes sense, but why not just do away with the whole outdated system altogether? It’s time, isn’t it?</p>
<p><strong>Number 5 - Voter Ignorance/Impossibly Complicated Issues</strong>
I’ll be the first to admit that I don’t know what most of the candidates stand for on an issue by issue basis (see number three above). I think I have some idea, but that’s only after studying up, and I still feel kind of ignorant on much of it. Think about this squirrelly question: is a tax break good for the economy? How much of the population knows enough economics to understand this issue? Maybe one percent, and probably more like one percent of one percent. Yet, all of the population votes on the issue, and most of it votes depending on who has the greater advertising money, and thus the more convincing ads. That doesn’t make a whole lot of sense, and I’m not sure what to do about it. It’s not a winning concept, and it can be expanded to other issues, such as stem cells, wire tapping, money for schools, etc.</p>Howard Zinn on “The Use and Abuse of History”2008-01-19T00:29:03-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-19:posts/2008/01/19/howard-zinn-the-use-and-abuse-of-history/<p>I’ve been reading some excellent stuff by Howard Zinn of late. I’ve tried three times now to read his most excellent <em>People’s History of the United States</em>, but I have always failed for one reason or another. I guess it’s just too dense for everyday, casual reading. This time however, I stumbled upon a much more readable book by him, <em>Passionate Declarations</em>. It’s tying in rather well with some thoughts I’ve been having about our electorate system, so I thought I would post a quick quote from it to share the wealth:<blockquote>What sorts of values and ideals are encouraged in the young people of the coming generation by the enormous emphasis on the Founding Fathers and the presidents? It seems to me that the result is the creation of dependency on powerful political figures to solve our problems. </p>
<p>We were being exploited by England? Well, the Founding Fathers took care of that in leading the struggle for independence. Was the nation morally blighted by the existence of 4 million black slaves? Abraham Lincoln solved that with the Emancipation Proclamation. Did we have a terrible economic crisis in the early 1930s? Franklin Roosevelt got us out of that one. Do we face enormous problems today? Well, the solution is to find the right president, to go to the polls and choose either the Republican or Democratic candidate. </p>
<p>Consider how much attention is given in historical writing to military affairs—to wars and battles—and how many of our heroes are military heroes. And consider also how little attention is given to antiwar movements and to those who struggled against the idiocy of war.</p>
<p>…</p>
<p>As a result of omitting, or downplaying, the importance of social movements of the people in our history…a fundamental principle of democracy is undermined: the principle that it is the citizenry, rather than the government, that is the ultimate source of power and the locomotive that pulls the train of government in the direction of equality and justice. Such histories create a passive and subordinate citizenry.
</blockquote>I don’t think I could put it much better than that, but in related news, I completed the first round of election pollster training today. Come February 5, I shall be a clerk of the polls (for better or worse).</p>Search Concept2008-01-15T18:00:04-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-15:posts/2008/01/15/seach-concept/<p>There’s this ongoing problem I’ve been having in that search engines do not have the ability to search the insides of password protected sites. It’s a little frustrating from time to time because so many sites have gads of information that search engines just can’t get to, which means that you have to rely on the site’s search engine, which invariably does not work very well. </p>
<p>So, here’s the concept. The search engine creates an opt-in program wherein websites (like banks for example) can give the engine a generic login and password, and then the search engine can get in, crawl the site, make an index, and then get out. Later, when you search for content, you can search for that information, if you desire, but to see it, you’ll need to log in.</p>
<p>Similarly, if you are a person who uses the secure site, you can give the search engine the ability to log in as you, and then crawl the site for your information. Thus, if you gave the search engine the login to your bank, you could later search for all your transactions at Cha Cha’s restaurant….or whatever. Actually, this might be a privacy concern…but it’s a thought.</p>Volunteering At Last!2008-01-13T21:17:09-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-13:posts/2008/01/13/volunteering-at-last/<p>For the last couple of years I’ve kinda, sorta been hunting on and off for
a place where I could volunteer some of my free time. I started at the
nearby university, thinking that I might be able to convince some kind
professor to teach me some things. When that failed,
I tried searching google for nonprofits that looked interesting. Failing
that, I went on a limb, and asked a professor of mine if he had any ideas
(he did, but they fell through). </p>
<p>Finally, after all this time, one fell in my lap. Last week,
I was looking for a place where I could donate my <a href="https://michaeljaylissner.com/posts/2007/10/23/new-computer-and-give-away-pile/">old computer
hardware</a>, and I discovered the <a href="http://www.accrc.org/">Alameda County Computer Recycling
Center</a>. It looks pretty darned cool. I will spend my time putting
together old computers into useful devices, and then installing Ubuntu or
Suse. In exchange, they will give computers (for free) to needy parties. </p>
<p>It’s not helping the homeless, but it should be educational for me and,
ultimately for them. Plus, it will help to keep e-waste out of landfills.</p>Taxonomy Features Are Go2008-01-13T16:56:44-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-13:posts/2008/01/13/taxonomy-features-are-go/<p>I have been rather busy since starting this blog many months ago, so I never got to finish rounding out its features. One that I have been wanting to figure out and to apply was Drupal’s taxonomy feature, which allows you to categorize your content as you write it.</p>
<p>After I turned it on today, I had to make up about 40 terms categorizing the content that I have written thus far, and I am now in the process of quickly going through and applying these tags to my old entries. What’s cool about having this feature turned on is that in the future, say, when I have 80 gazillion entries about various topics, if you are a reader of the blog, you can easily find entries matching your interests. Assuming, of course, that I write 80 gazillion things.</p>The incredible size of XP2008-01-03T23:39:33-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-03:posts/2008/01/03/the-incredible-size-of-xp/<p>I have been playing with virtualization these past few days, and I installed Windows <span class="caps">XP</span>, Windows 98 and Fedora 6. It’s been an interesting experience, but I am shocked at the size of <span class="caps">XP</span>. After installing it, updating it, installing Firefox and <span class="caps">AVG</span> antivirus, it is 5.<span class="caps">13GB</span> in size! Incredible. </p>
<p>Compare that to Fedora 6, which weighs in at 2.<span class="caps">57GB</span> (with server and programming software), or - hilariously - with Windows 98 at <span class="caps">230MB</span> (roughly a 20th of <span class="caps">XP</span>). </p>
<p>I knew <span class="caps">XP</span> was big, but that’s quite something. Something else that was quite interesting is that it took nearly as long to install 98 despite its puny size. I’m baffled as to how it took so long, but I’m guessing it had something to do with multiple processors, which I’m sure it doesn’t support.</p>Program Idea - Public Jukebox for Internet Cafes2008-01-02T21:32:08-08:00Mike Lissnertag:michaeljaylissner.com,2008-01-02:posts/2008/01/02/public-jukebox-for-internet-cafes/<p>The problem with Internet cafés as I see it is that they can never
make everybody happy when it comes to music. They can quite easily please
one crowd, but they can never please everybody. Back in the good old days,
they tried to solve this in restaurants and bars by having a jukebox with a
bunch of music stored physically inside it. Now we have jukeboxes that can
download music, but that’s where the technology seems to have stopped.</p>
<p>So here’s my concept on the theme. You create a website that can only be
accessed by those on the Internet café’s wireless router,
and you post the address somewhere conspicuous in the café. Next,
you allow the people in the café to stream their music through their
laptops into a queue where it eventually gets played over the loudspeakers.
This way, the people in the café can actually play their own
music when they go to the café, share it with others,
etc. The café servers would have an override button and volume
control and the like, so they can control the masters on the whole ordeal
(this would be to prevent the Kenny G lovers of the world). This
permission could also be given to certain café members who had
proven their good music taste. Actually, giving this permission to all
café patrons might work too.</p>
<p>I think this idea could work with a little manipulation,
but the question of copyrights will probably come up. My argument would be
that the music is being shared non-commercially by the laptop owners,
not the café, and that thus no infringements are being made by the
café; that this would be no different than a laptop owner bringing
speakers into the café and simply sharing their music. This would in
turn shield the café’s of the world, leaving the music sharers liable. </p>
<p>Of course, the counter argument could be made that on a grander scale,
what if the speakers brought in were huge, and what if the audience was
that of the Superbowl, and not the café? In other words,
how is this model different than a Superbowl host playing music during the
Superbowl? To this I would respond that the Superbowl is doing it for
money, whereas the cafe could arguably say they were doing it just to have
good music.</p>
<p>The final idea behind this would be that the café could keep a
database of the music their customers wanted to play,
and that they could then know which single songs to actually buy,
and to actually own the copyrights for.</p>
<p>It could almost work.</p>Black Sabbath - Children of the Grave2007-12-30T12:28:27-08:00Mike Lissnertag:michaeljaylissner.com,2007-12-30:posts/2007/12/30/black-sabbath-children-of-the-grave/<p>Revolution in their minds
The children start to march
Against the world in which they have to live
And the hate that’s in their hearts
They’re tired of being pushed around and told just what to do
They’ll fight the world until they’ve won and love comes flowing through</p>
<p>Children of tomorrow live in the tears that fall today
Will the sun rise up tomorrow bringing peace in any way?
Must the world live in the shadow of atomic fear?
Can they win the fight for peace or will they disappear? Yeah!</p>
<p>So you children of the world listen to what I say
If you want a better place to live in spread the word today
Show the world that love is still alive you must be brave
Or you children of today are children of the grave yeah!</p>Cool Research Tip - Bookmark to Date Websites2007-12-28T13:02:08-08:00Mike Lissnertag:michaeljaylissner.com,2007-12-28:posts/2007/12/28/firefox-last-modified-tip/<p>I spend a lot of time researching things on the Internet, and I’ve noticed a problem with regards to the answers I find. Frequently, after researching something for a while, I discover what appears to be the answer I am looking for, but people are notoriously bad when it comes to dating the things they write.</p>
<p>Yesterday, while scanning the news, I discovered <a href="http://www.cnet.com/workers-edge/8301-13880_1-9835822-68.html?tag=head">this article</a>, which explains that in Firefox if you type “<strong>javascript:alert(document.lastModified)</strong>” into the address bar, it will show a pop-up indicating when the page was - you guessed it - last modified.</p>
<p>This is a <span class="caps">VERY</span> handy tip, and I realized that if you hit Ctrl+B in Firefox, and then right-click in the sidebar > Create new bookmark, you can even save it as a bookmark, so that if you ever want to know when a page was modified, it’s a piece of cake to find out. The one shortcoming of this is that it won’t work on dynamically generated pages, such as this one.</p>PCT Data Project - DONE2007-12-12T21:29:57-08:00Mike Lissnertag:michaeljaylissner.com,2007-12-12:posts/2007/12/12/pct-temperature-project-done/<p>I’m happy to announce that the <span class="caps">PCT</span> data project is complete! </p>
<p>Over the past several weeks/months, I have been slaving away over my
computer writing this program. When used, it will generate a dynamic
graphing area that will load up temperature data for one to six <span class="caps">PCT</span> hikers. </p>
<p>All those that are interested in the most complicated programming
assignment I have ever worked on <a href="https://michaeljaylissner.com/pct-temperatures">are welcome to check it out</a>.</p>
<p>I am officially a free man once again! Thanks to all who made this possible
with their encouragement and patience! </p>Pitzer College Murals2007-12-10T13:58:25-08:00Mike Lissnertag:michaeljaylissner.com,2007-12-10:posts/2007/12/10/pitzer-college-murals/<p>I have finally been reconnected with my long-lost artwork. I painted this
while I was in college, and summarily lost the picture of it somebody had
given me. It’s a rip off from <a href="http://www.youtube.com/watch?v=vSb-nV8l2QY">a hilarious short</a> by Don Hertzfeldt. </p>
<p>I have missed this picture for so long.</p>
<p><img alt="Banana" src="https://michaeljaylissner.com/images/I am a banana.jpeg" /></p>
<p>The rest of the murals at Pitzer, including a bronze sculpture by Peter
Harper can be <a href="http://ccdl.libraries.claremont.edu/cdm4/results.php?CISOOP1=exact&CISOFIELD1=CISOSEARCHALL&CISOROOT=/map&CISOBOX1=Pitzer+College.+Office+of+Public+Relations&CISOSTART=1,1">found here</a>.</p>Eco-tip 4 - Hibernate vs. Suspend2007-12-07T18:22:49-08:00Mike Lissnertag:michaeljaylissner.com,2007-12-07:posts/2007/12/07/eco-tip-4-hibernate-vs-suspend/<p>For some reason, this bit of knowledge just hasn’t gotten out there to the masses. I guess it’s a bit nerdy, but here goes. When computers are not in use, they can do two very different things. They can either suspend, or they can hibernate (or you can turn them off of course). When they suspend, they go into a power saving mode that stores the state of your computer in <span class="caps">RAM</span>. When they are hibernating, the state of your computer is stored on the hard drive. </p>
<p>This is an important distinction because <span class="caps">RAM</span> requires energy to store information (making it volatile memory), and your hard drive does not (making it non-volatile memory). Hence, any time your computer is in suspend mode, it is incurring a negative environmental impact, and any time it is hibernating, it is incurring no more impact than a lump of silicon.</p>
<p>So. I won’t get into how to deal with these in <span class="caps">GNU</span>+Linux, (because I can’t get my laptop to do either), but <a href="http://www.microsoft.com/windowsxp/using/mobility/getstarted/hibernate.mspx">this article</a> has some good information on how to do it in <span class="caps">XP</span>. If you are a Mac owner, this decision has been made for you. Your computer will suspend and hibernate at the same time, and there is no easy way I know of to hibernate only. (They call this SafeSleep, and the idea is that if the <span class="caps">RAM</span> hasn’t been reset by a loss of power, it will boot from <span class="caps">RAM</span>. Otherwise, it will boot from the hard drive.) </p>
<p>I should also mention that hibernation is a great alternative to leaving your computer on when you go home at the end of the day. It saves the state exactly how you left the computer, and saves the environment by not using energy through the night. </p>The Prettiest Ratio and Google2007-11-30T16:43:36-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-30:posts/2007/11/30/the-prettiest-ratio-and-google/<p><img alt="No alt" src="https://michaeljaylissner.com/images/ParthenonGoldenRatio.png" /></p>
<p>In case you haven’t heard about this before, the <a href="http://en.wikipedia.org/wiki/Golden_ratio#Relationship_to_Fibonacci_sequence">Golden Ratio</a> is the
concept of how to define the most aesthetically pleasing ratio between two
lengths, and can be found pretty much everywhere dating back all the way to
the Egyptian Pyramids of Giza. Examples abound in the world around us.
Books, tables, laptops, screen sizes. Essentially anything that looks like
a well-proportioned rectangle probably fits pretty closely into the
Golden Ratio.</p>
<p>You can kind of see what I mean by looking at the picture of the Parthenon
at right that I found on Wikipedia. The idea is this: The length of the
smaller of two distances should be related in the same way to the longer of
two distances as the longer of two distances is related to the sum of the
shorter plus the longer distance.</p>
<p>If that’s too confusing, perhaps this will help:</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/Golden Ratio Formula.png" /></p>
<p>Still confused? How about this: The Golden Ratio is 1.61803399.</p>
<p>I went online a few days ago to figure out how to dimension an applet that
I was making, and discovered yet another cool Google tool. Googling for
“400 * golden ratio” yields the search result of 647. Very cool.</p>Thanksgiving Pictures Posted2007-11-29T23:45:18-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-29:posts/2007/11/29/thanksgiving-photos-posted/<p><img alt="No alt" src="https://michaeljaylissner.com/images/CIMG1483.resized.resized.JPG" /></p>
<p>The pictures from Thanksgiving are posted in the photo area. If you can’t
find them, it’s probably because you need to login. </p>
<p>Thanksgiving was a blast. A friend and I made a circle north to Crater
Lake, then to the Oregon coast at Gold Beach, south to Petrolia and then
home again. Great pictures and good clean fun.</p>An Important Distinction2007-11-26T17:02:25-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-26:posts/2007/11/26/an-important-distinction/<p>For the record people: </p>
<ul>
<li><strong>Quite:</strong> I haven’t <strong>quite</strong> finished my soup. This is <strong>quite</strong> a nice restaurant.</li>
<li><strong>Quiet:</strong> This is a <strong>quiet</strong> restaurant. I enjoy peace and <strong>quiet</strong>.</li>
</ul>
<p>We recently looked for roommates, and we subtracted points from anybody that
wrote in their response email the word “quite” where they meant to say “quiet.”
It was extraordinary how many applicant roommates think they are “a quite person”.</p>A Website that Irks My Soul, and the Internet’s Inability to Kill It2007-11-19T21:15:49-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-19:posts/2007/11/19/a-website-that-irks-my-soul-and-the-internets-inability-to-kill-it/<p>There’s a website a friend pointed out to me. It’s called c o n s e r v o p
e d i a, only without the spaces and with a .com at the end. It exemplifies
so much in the world that is wrong. For example, here’s the picture on the
page entitled “Liberal”:</p>
<p><img alt="Liberal Brain" src="https://michaeljaylissner.com/images/Liberal_Brain_0.jpg" /></p>
<p>Correct me if I’m wrong, but this is a just a bit annoying. </p>
<p>Now, I don’t mention this to bash that site (though I hate it),
I mention it because it exemplifies a problem of sorts with the Internet.
The problem is this: if I want to give props to a site,
I can do so <a href="http://www.gossamergear.com">in a heartbeat by linking to it</a>. A fine example of this was
<a href="http://en.wikipedia.org/wiki/Google_bomb">Google Bombing</a>, while it lasted. On the other hand,
if a website blows and I feel that it is making the world a worse place,
all I can do is put spaces in its name and hope it becomes obscure enough to
go away (which this one is not about to do). </p>
<p>I imagine there are some rather contentious issues regarding an internet
where websites can be voted up and down on a grander scale than digg,
but really, if something is evil and doing harm and disservice to the world,
there should be a way to make it more obscure than the search engine’s
algorithm. Similarly, if a website is doing illegal stuff,
we should be able to get rid of it quickly and without a lot of hassle
(think Internet scam sites).</p>Eco-Tip 3 - Buy Locally, Buy Seasonally2007-11-19T20:42:03-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-19:posts/2007/11/19/eco-tip-3-buy-locally-buy-seasonally/<p>It’s taking some time to catch on, but this is another something to think about when you’re out shopping: If you live in <span class="caps">LA</span>, and it comes to a choice between local oranges, Mexico oranges and oranges from Florida, choose local. </p>
<p>Not only does it save you money (theoretically), it’s fresher and it’s better for the environment. Because it was grown locally, it didn’t have to travel, and thus didn’t pollute its way all the way from the other side of the world. Because it is more likely to have come off the tree more recently, it didn’t have to be refrigerated for the past day/week/month, and is also fresher and more delicious.</p>
<p>Now, naturally (no pun intended), this works better for some areas of the country than others, and for some foods better than others. Walnuts for example are almost exclusively grown in California; pineapples and sugar from Hawai’i. So this brings us to another aspect of the food buying game: switch to foods that are local, like honey as opposed to sugar, and avoid those that come from distant places, like Hawai’i.</p>
<p>The final piece of this tip is to buy seasonally. Not only will the food taste better, but it won’t have been in the freezer for the past six months, which is nice.</p>
<p>The best thing to do, if you have the ability to do so is, of course, to plant some seeds and grow your own.</p>By Decree of This Blog2007-11-16T17:20:50-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-16:posts/2007/11/16/by-decree-of-this-blog/<p><strong>Start Communication</strong></p>
<p>By decree of this blog, henceforth whenever there is a three day weekend, it shall be spelled weeekend. </p>
<p><strong>End Communication</strong></p>The Pleasure of Making Goats Faint2007-11-12T11:17:13-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-12:posts/2007/11/12/the-pleasure-of-making-goats-faint/<p>I went up to Calistoga over the weekend, and had the chance to make <a href="http://en.wikipedia.org/wiki/Fainting_goat">goats faint</a>. It was great fun; like cow tipping, only without getting your hands dirty. Check it out:
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/we9_CdNPuJg&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/we9_CdNPuJg&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>Eco-Tip 2 - Think Long Term…Really Long Term.2007-11-06T20:21:34-08:00Mike Lissnertag:michaeljaylissner.com,2007-11-06:posts/2007/11/06/eco-tip-2-think-long-term-really-long-term/<p><img alt="No alt" src="https://michaeljaylissner.com/images/longnowclock.jpg" /></p>
<p>Well, somehow two weeks have already gone past, and it’s time for another
eco-tip. This week is going to be an easy one for me because on Sunday I saw
a truly beautiful concept: truly long-term thinking.</p>
<p>Out of pure chance, I ended up at the <a href="http://www.longnow.org"
target="_blank">Long Now Museum</a> in Fort Mason, where I saw a prototype
for a clock that will use solar power to run for approximately 10,
000 years. The idea was beautiful because it really blows the top off of
most environmental thinking these days.</p>
<p>So much talk is given to global warming, that it seems like we’re forgetting
the whole point of the environmental movement. The point is
<strong><em>not</em></strong> that the world is getting warmer,
or even that the climate is changing. The point <strong><em>is</em></strong>
that if the climate changes very much, we’ll probably all die. It’s like
the joke about having a fear of heights: It’s not that you’re afraid of
being up high - it’s that you’re scared that if you fall,
you’ll hit the ground and die.</p>
<p>Anyway, I digress. As I was saying, the Long Now clock is a clock that will
synchronize (and probably charge) itself with the sun every day for a very
long time. Obviously, the idea is not to track the time from now until 12,
<span class="caps">007CE</span>. The idea is to try to imagine what it would take for us to live that
long. It kind of looks like we might annihilate ourselves before this clock
ticks its last tick, but it’s somehow nice to know that if we do something
that foolish, at least this clock will sit there happily ticking without us.</p>
<p>This week I invite you to check out <a href="http://www.longnow.org"
target="_blank">their site</a> (which is awesome), and to imagine where we
might be in 10,000 years. I predict that ultimately we won’t be here (but
at least the clock will).</p>The Great Temperature Data Project2007-11-01T20:40:55-07:00Mike Lissnertag:michaeljaylissner.com,2007-11-01:posts/2007/11/01/great-temperature-data-project/<p>Back in ‘05 when I hiked from Mexico to Canada on the Pacific Crest Trail, I
carried a little device called an <a href="http://www.iButton.com">iButton</a>.
This little device contains essentially three things: a clock, a bit of memory
and a thermometer. It’s waterproof, accurate to 0.1 degree Celsius, and is about
the size of five dimes stacked one upon another. There are a bunch of silly
things you can do with these, but what I chose to do with mine was to have it
record the temperature every hour on the hour for the entire time I was hiking,
with the idea being to get some good data about the temperature out there on
the <span class="caps">PCT</span>.</p>
<p>All in all, you can figure that the temperature was recorded 24 times a day
for about 150 days, for an astounding 3600 data points, and about 150
oscillations from the daytime high to the nighttime low. I’ve spent some time
working with the data, and it’s pretty much impossible to make much use of….unless
you write a program to interpret it. You can
<a href="http://charityhikers.org/pct/temps.htm">see it for
yourself</a> if you’re interested.</p>
<p>Well, as fate should have it, I am currently enrolled in a Java programming
class, and I have the option of doing a final project of my own choosing.
Having not put this data to good use has been a burden on my soul for a
couple of years now, and I’ve decided to make my final project an applet that
will allow a user to plot this data on a graph for any date range and any time
range that they choose (e.g. 5pm to 10pm for September 20th to 23rd). </p>
<p>Once this is done, I will attempt to post it here, but here’s the question to
you dear reader, do you have any suggestions as to features that you would be
interested in seeing in an applet of this sort? Thoughts?</p>
<p>I’m quite excited about getting this info out there. Finally.</p>Mashups2007-10-28T13:10:16-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-28:posts/2007/10/28/mashups/<p>For a while, I’ve been reading that mashups between various website technologies would soon be really easy to work with and play with and such. I didn’t believe it until I noticed my website today.</p>
<p>Today, I added the <a href="http://last.fm">last.fm</a> feed you all should be seeing on the left that lists the last five tracks I listened to on my home computer. With it’s addition, on my homepage I now have a post about the San Diego fires that includes a java-based Google Map, a picture gallery that uses code from <a href="http://gallery.menalto.com/">menalto.com</a>, and a nifty widget that ties in with my home computer.</p>
<p>I think mashups, in my opinion, are officially a reality. Pretty cool.</p>The Plan: One Environmental Tip Every Other Week2007-10-24T22:30:12-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-24:posts/2007/10/24/eco-tip-1-the-plan-one-environmental-tip-every-other-week/<p>Many people have been saying to me, “Dude, what’s with the green blog…why’s it so…ummm…green?” Well, there’s a reason for this my friends. The reason is that I had to choose a color, and I went with green to go with my profound love of our friend Gaea. </p>
<p>Along those lines, in thinking about things to post that might be interesting, I came up with a theory that if I put my mind to it, (and you, the public chips in, hint, hint) I (we) can come up with an environmental tip that is worth posting every two weeks or so.</p>
<p>This might not work out, then again it might. We’ll see, it all depends on whether I (we) can come up with things to write.</p>
<p>So, to kick it off, I shall follow on the wisdom of my elders, and post the thing that I have been told is the <span class="caps">MOST</span> important thing to do to cut down <span class="caps">YOUR</span> carbon footprint: Insulate your house. </p>
<p>From what I understand, it’s really just that simple. If you want to make the biggest dollar/<span class="caps">CO</span><sub>2</sub> reduction possible, make your house a fortress of insulation. No drafts equals less heater and less air-conditioner. And, since in 2006 59% of non-petroleum <span class="caps">U.S.</span> energy came from coal¹, this is a very real way to cut down your impact. </p>
<p>My plan this winter is to cover the windows with Cyran wrap, and see if I can get it to tighten up by hitting it with a blow dryer. </p>
<p>¹ <small>Source: <a href="http://www.eia.doe.gov/emeu/aer/pdf/pages/sec1_8.pdf">http://www.eia.doe.gov/emeu/aer/pdf/pages/sec1_8.pdf</a></small></p>“Never Seen a Fire This Bad”2007-10-23T18:40:38-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-23:posts/2007/10/23/never-seen-a-fire-this-bad/<p>Well, last I read, it looked like about 500,000 people have been evacuated down in San Diego because of the fires. This is a bad one folks. All the fire fighters are saying that they’ve never seen a fire this bad, and last I heard, containment was around 5%. That’s probably an over estimation.</p>
<p><span class="caps">KPBS</span> is maintaining a Google Map of the affairs. Yellow is evacuated areas; red is fire.
<iframe width="600" height="600" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?msa=0&msid=114250687465160386813.00043d08ac31fe3357571&ie=UTF8&om=1&ll=33.095074,-117.079762&spn=1.082648,1.220323&output=embed&s=AARTsJoNOFVVIonyc-kc_zU59ppwGypszQ"></iframe><br /><small><a href="http://maps.google.com/maps/ms?msa=0&msid=114250687465160386813.00043d08ac31fe3357571&ie=UTF8&om=1&ll=33.095074,-117.079762&spn=1.082648,1.220323&source=embed" style="color:#0000FF;text-align:left">View Larger Map</a></small> </p>The New Computer and The Giveaway Pile2007-10-23T00:13:23-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-23:posts/2007/10/23/new-computer-and-give-away-pile/<p>A few weeks back, I mentioned that I was having some trouble setting up the Zimbra Suite on my server. I finally got it to work, but it wasn’t as reliable as I needed it to be. When I looked into the problem, it seemed I just needed a newer computer to run it. Apparently they were serious when they talked about the minimum hardware requirements (who knew?).</p>
<p>I thought about just running a lighter-weight piece of software, but after I priced it out, I learned that I could get a new computer (sans monitor, keyboard, speakers, mouse and hard drives) for only $350. So I did. I just finished putting it together* and getting Zimbra working again (which was easy since I used the old hard drives), and now I’ve got a give away pile.</p>
<p>Here’s the list:</p>
<ul>
<li>One computer, sans hard drive. It’s a P3, it’s got about a gig of <span class="caps">RAM</span>, graphics card, integrated ethernet. The case is a beaut, but it weighs in at about 20 lbs. If you get it a set of matched processors, it’s actually kind of fast - </li>
<li>A P3 processor and heat sink</li>
<li>Four <span class="caps">SDRAM</span> spacers</li>
<li>Working keyboard</li>
<li>Two <span class="caps">DSL</span> Modems</li>
</ul>
<p>And that’s it. That computer could work well for somebody that does light computing. The rest is probably garbage, but you never know. Any takers?</p>
<p>*The specs, in case somebody is interested, are meager, but still infinitely faster than the predecessor. The new computer is a Intel Duo, 2.13Ghz ($150), <span class="caps">2GB</span> of <span class="caps">RAM</span> ($70) and cheap motherboard with integrated video, sound and ethernet ($40).</p>The $10,000 scam2007-10-16T23:53:44-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-16:posts/2007/10/16/the-10000-dollar-scam/<p>Here’s the concept: You get a 0.0% <span class="caps">APR</span> credit card, and you see how high of
a limit they’ll give you. You wait for the balance transfer checks to
arrive in a week or two, and you write yourself a check for the amount of
the credit limit. You invest that money for as long as the card remains at
0.0% <span class="caps">APR</span>. When that period is up, you pay off the card, and the game ends.</p>
<p>In my case, that was a total of $10,000, and one year,
so if I find a place to invest that $10,000 at, say, 5%,
I make $500 over the course of a year, all at no cost.¹ ²</p>
<p>Now, here’s where things get a bit tricky…I’m not satisfied with 5%,
so I decided to invest it in a mutual fund, half as an experiment,
half cause the odds were indeed in my favor. My risk was doing well…I was
up…and then, this happened with no explanation.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/chrtsrv.gif" /></p>
<p>Any ideas out there as to what happened? I still have six months before I
have to pay Visa back, but nevertheless, this is annoying.</p>
<p>¹ If you don’t read footnotes, this game is not for you.</p>
<p>² Two things to bear in mind here. One is to get a card with no balance
transfer fees. The other is that your credit score will take a temporary
hit during this ordeal (but I have it on good authority that it will
recover quickly).</p>The Singularity Is Near2007-10-12T22:53:24-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-12:posts/2007/10/12/the-singularity-is-near/<p>I know what you’re thinking: “The Singularity - What is Mike talking about? This must be stupid.” I’m here to say that it might be stupid, but bear with me because I can’t decide if it is, and I need to know the public consensus. </p>
<p>The Singularity is this theory I have been reading far too much about that there will come a time when “computers transcend biology.” Think about that for a moment: computers…transcend…biology. In other words, there will come a time when computers are so advanced that they have moved beyond the limitations of biology; beyond what we now think of as computers, and into some biocomputing nano-thing.</p>
<p>The book I’m reading right now is <em>The Singularity is Near</em> by Ray Kurzweil. It sounds like a joke, and you’d think he was some two-bit writer that didn’t cite his references, or that didn’t know his shit, but sadly, the book has over 100 pages of references, and the man teaches at Stanford. So he’s qualified to write about crazy future ideas. </p>
<p>Imagine if technological change occurred at an exponentially exponential rate (crazy, I know), and that in about 33 years - give or take - we will experience the Singularity. At that point, computers will be able to build themselves. Software will write itself, and because it is being written by software that doesn’t make mistakes like ordinary humans, new versions and steps forward in technology will happen so quickly that we won’t be able to keep up. It sounds crazy at first, but then you start to think about it: We have programming languages, and we have Integrated Development Environments that help us mortals to write software. Is it so crazy to think that the two might merge, and that software might write itself? </p>
<p>Yes? <span class="caps">OK</span>, you’re probably referring to the fact that computers don’t have creative powers. This is true, but, like a child, they can learn language autonomously, and build themselves autonomously already. For example, out here in the Bay Area, we’re near Google, who has just rolled out a new service called Goog-411. Basically, you call 1-800-Goog-411, and a machine will record your voice, ask you what location and business name. It will then (seemingly without fail), give you the phone number for the location, and connect you (for free). It’s great, and what’s more amazing is that the success of your call teaches the computer how to better help the next person. The more people call, the better it works.</p>
<p>So, we have computers that can build themselves already, and we have computers that could theoretically write themselves from the ground up. Imagine if we had computers that could analyze the news, and attempt to fix problems. </p>
<p>All of the above seems plausible to me, more or less. I mean, forty years ago, we didn’t even have computers. Now we have ones that can write the <a href="http://www.soe.ucsc.edu/pipermail/genome/2000-July/000021.html">entire human genome on a <span class="caps">CD</span></a>, or if you prefer, it can do it eight or nine times on a <span class="caps">DVD</span>. That’s all the information needed to create a human. On a <span class="caps">CD</span>. Is it so crazy to believe that computers will be able to do what we humans can? I’m not so skeptical any more. Will the timing be around 2040…I think it may. Freaky.</p>Old Versions of Site are Up2007-10-11T19:04:42-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-11:posts/2007/10/11/old-site-is-up-sort-of/<p>I was working on getting the <a href="https://michaeljaylissner.com/archive/oldsite/index.htm">old versions</a> of the site up and going
for history’s sake, and I have more or less accomplished the task,
though I learned a very important lesson in the process.</p>
<p>For one, I learned that if you want to host additional custom directories
on your drupal site, it’s a piece of cake: Just make the directories in
your drupal directory, and you’re done. For example, my drupal directory is
at <code>/usr/share/drupal-5.1</code>, so to host a page at michaeljaylissner.com/oldsite,
I just made a directory at <code>/usr/share/drupal-5.1/oldsite</code>, put stuff in it,
and was done.</p>
<p>The more important lesson was that when hand-coding <span class="caps">HTML</span>, as I did in the
previous version of the site, relative links such as <code>/assets/picture1.jpg</code>
are <strong><span class="caps">NOT</span></strong> the same as relative links such as assets/picture1.jpg. Both work,
but only one is actually relative to the current page (the latter one). The
former one may as well have been written
<code>michaeljaylissner.com/assets/picture1.jpg</code>, because that’s what that first
slash means. Duh.</p>
<p>Somehow, I never ran into this problem before now. Anyway,
if you take the time to check out the old site (which I don’t really
recommend), you’ll find many broken links. This is why. The other project I
have been working on is getting all of my pictures from the old site set up
on this site in a place where registered users can find them. This is a
work in progress, but if you’re a registered user, you might be interested
to see them, if you haven’t already. </p>My Destiny To Have A Beard2007-10-03T23:17:34-07:00Mike Lissnertag:michaeljaylissner.com,2007-10-03:posts/2007/10/03/destiny-to-have-a-beard/<p>I’ve been doing some thinking, and I think that my destiny* wants me to have
a beard. Let’s take a quick walk through my past, shall we?</p>
<p>First, I was into woodworking. I described it as, “My first great
passion.” Observe this picture. It’s the first hit on google images for
the word “woodworker”.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bearded-destiny/wood.jpg" /></p>
<p>Next, after sort of putting woodworking aside for a while,
I got really into hiking; thru hiking to be precise. This picture is the
third or fourth hit for “thru hiker” on google images,
but I hasten to add that it is the first hit that contains a picture of a person.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bearded-destiny/thru.jpg" /></p>
<p>Finally, as you may have noticed, I’m pretty into Linux these days. It’s
could be a phase as well (we’ll see), but observe this image,
also pulled from google images. Admittedly it’s not hit number one,
but I don’t count pictures of college kids or penguins out of principle. </p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bearded-destiny/linux.png" /></p>
<p>So. It seems I should have a beard. There is a problem with this plan
though, and to illustrate that problem, I have this picture of me,
when I tried it for myself. Damn.</p>
<p><img alt="No alt" src="https://michaeljaylissner.com/images/bearded-destiny/me.jpg" /></p>
<p>What will come after Linux? Will it be Lumberjack or hippie…time will tell. </p>
<p>*Destiny is a load of bunk and we all know it deep down!</p>A Boring Confession2007-09-29T16:34:53-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-29:posts/2007/09/29/boring-confession/<p>I need a heatsink for the mail server. Stupid thing keeps crashing. It’s got
two Pentium <span class="caps">III</span> processors. Anybody have one they want to mail me? My birthday
is coming up…sort of…</p>Zimbra Done. Worth the Wait? Yes.2007-09-29T16:20:59-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-29:posts/2007/09/29/zimbra-done/<p>I finally got Zimbra to work on Tuesday, and I must say it is one of the more frustrating things I have ever had to install. This isn’t Zimbra’s fault though - My rudimentary knowledge of <span class="caps">DNS</span> makes mail serving rather challenging. My main two difficulties when installing Zimbra stemmed from 1) not opening <span class="caps">ALL</span> the ports on my router that I needed to, and 2) assorted <span class="caps">DNS</span> difficulties mentioned above. </p>
<p>Now that it is working reliably though, I’m quite pleased with it, and I’ve realized that it’s so excellent that I am going to have to move all my mail accounts over to it very soon. It has a couple of rather pleasing functions that I’m excited about. The first is <span class="caps">LDAP</span>, which allows me to have the same contact list no matter how or where I get my mail. </p>
<p>The second, and probably more important feature is Transport Layer Security (<span class="caps">TLS</span>) which creates a level of encryption between me and my server so that if an email gets as far as my server without getting eavesdropped upon, it can go that last bit of the journey from the server to me without any worries. This is a feature that for some reason I never had before now, and I’m quite glad to have it, just in case.</p>
<p>Other than that, it’s nice to finally have webmail that’s good enough that I have to think to myself about whether or not I want to check my mail in Thunderbird or Firefox. What a concept. </p>LoJack for Linux Part II2007-09-25T22:42:45-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-25:posts/2007/09/25/lojack-on-linux-part-ii/<p><span class="caps">EDIT</span>: See update in the comments</p>
<p>I did some <a href="http://www.arsgeek.com/?p=1612">research</a> after that last post, and I learned that the trick to this is to get a free account from dyndns.com, and then use the ddclient in daemon mode. That combination will allow you to track the <span class="caps">IP</span> of your computer no matter where it is, no script involved. </p>
<p>The other piece of this puzzle is somewhat more puzzling: How to access the computer after it is stolen. Ideally, this would happen via ssh, but in practice ssh almost always talks over port 22, and routers pretty much always block all ports. The only solution to this problem I can think of is to hack the thief’s router once you know its <span class="caps">IP</span> address, but that’s hardly a solution really.</p>
<p>The other caveat to consider is that if you need a password to log in, the ddclient won’t get started in the first place because the thief won’t be able to log in. So, what’s the better solution: A password login, or ddclient? </p>
<p>Hmmm….any solutions to the ssh problem are more than welcome.</p>A Modest Miracle2007-09-24T20:20:32-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-24:posts/2007/09/24/a-modest-miracle/<p>I got an urge today to take some garlic and to take some rosemary, and to seep
them in oil for a few days to make some bread dip. I had a strange quantity of
virgin oil and fresh peeled garlic on hand, but I lacked the rosemary, so I
grabbed a friend and went walking in the neighborhood, looking for a garden to rob. </p>
<p>We walked for a few blocks in the dark with a flashlight looking for rosemary,
but we weren’t finding any. We found some mint and some tomatoes in a garden
near our house, but no rosemary. Then a nice lady walked by with something in
her hand that looked like a plant. I said, “Hey, do you know any houses around
here that might have rosemary?” She said, “¿necisita rosemary?” and held
up the sprig she had in her hand. We chatted a bit, and she gave me a sprig off
the plant she was bringing home. </p>
<p>Now, I’m not a religious man, and in fact I don’t believe in anything that
can’t be seen (ghosts, goblins, Zeus, god, angels, et al included). Sometimes
I can see why others believe though. I mean, what are the odds? </p>
<p>Upon arriving home, a roommate described it as, “A modest miracle.” Indeed.</p>LoJack for Linux2007-09-23T14:56:19-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-23:posts/2007/09/23/lojack-for-linux/<p>I have been spending some time lately shopping for laptops, and I noticed an interesting product on the shelves these days: <em>LoJack for Laptops</em>. It’s an interesting concept, because I think LoJack could do a lot of cool things these days for just about anything you buy that’s worth more than a couple hundred bucks. My bike, for example, would be another object I would want LoJack for if the system were cheaper. </p>
<p>I checked out the LoJack installation software, figuring it would inform me that I had to have a <span class="caps">GPS</span> chip installed in my laptop for it to work, but to my surprise, it just uses <span class="caps">IP</span> addresses. From what I could figure out, it works in two ways. One, it sends your <span class="caps">IP</span> address to a centralized server at some regular interval. Two, it allows a back door entrance into your computer so that if your computer is stolen, you can monitor the location of it more closely, bug the new owner, convince them to give it back, etc.</p>
<p>I got to thinking about this, and from what I can tell, there isn’t anything here that a Linux laptop can’t easily accomplish. The only tricky part I can think of is the back door thing, because I imagine most routers block incoming traffic on pretty much every port except 80, so ssh’ing into the computer might be tricky even once you know the correct <span class="caps">IP</span> to use.</p>
<p>As for determining the external <span class="caps">IP</span>, I found <a href="http://linux.byexamples.com/archives/307/what-is-my-public-ip-address/">this site</a>, which pretty much fits the bill. The basic idea is to go to one of the million whatsmyip.com-type websites via command line, and grep the <span class="caps">IP</span> out of the code. One hilarious thing I found on there was <a href="http://www.moanmyip.com">moanmyip.com</a>. I highly recommend a visit if you’re “visually impaired”.</p>
<p>Anyway, now that the men in the room are good and turned on, the script pretty much needs three more things: 1. A centralized server to collect the IPs, 2. That ssh back door to mess with the thief, and 3. The script itself!</p>
<p>Updates to come.</p>I want ogg on my iPod2007-09-16T19:59:23-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-16:posts/2007/09/16/ogg-on-ipod/<p>I know this post is going to alienate just about everybody that would ever consider reading my blog, but here’s the deal: I want all iPods to support the ogg file format. </p>
<p>For the uninitiated, the ogg format is like the <span class="caps">MP3</span> or the <span class="caps">AAC</span> format, except for a couple of very important differences. One, it’s free, which is to say that it doesn’t belong to some company, and every time I use it I’m not supposed to be giving them a nickel or something. (The <span class="caps">MP3</span> format technically is licensed to the company that created it, so theoretically, every time you buy a computer, <span class="caps">MP3</span> player, etc., you’re supposed to give them some quantity of money.)</p>
<p>The other reason that I am hereby requesting ogg on my iPod is because it’s better. It sounds better. It compresses better. Are there other metrics that we should be using? None that I know of. I want ogg. Steve Jobs, do you hear me now?! </p>
<p>Now, the theoretical argument above holds water, but I have personal reasons for this desire: I have 357 ogg files that I can’t listen to on my iPod! This pretty much gives me three choices: One, install <a href="http://www.rockbox.org/">Rockbox</a> on my iPod (I have, it didn’t work reliably). Two, convert the ogg files to MP3s (this solution would create inferior-quality songs). Or, three, only listen to those songs on my computer (also a lame solution).
I should also mention while I am on this rant that I have flac files as well. Why doesn’t the iPod support those! iPods are great, but these are serious shortcomings.</p>Chronicals of installing Zimbra, OR If it looks awesome, it’s probably a pain to install.2007-09-14T00:24:56-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-14:posts/2007/09/14/zimbra-chronicals/<p>First of all, <a href="http://www.redhatxchange.com/Zimbra.html">check this out</a>. Use the username ‘admin’ and the
password ‘zcsadmin’. When you’re done there, come back here,
and pick up where you left off. </p>
<p>It’s pretty sweet right? Calendar functions, ajaxy goodness, tagging,
searching, etc. Pretty much all you could want from a web email client,
right? Right. So I figured I’d download and install it. The first thing that
worried me was that it wasn’t in the repositories of Ubuntu software,
so it wasn’t just a <code>sudo aptitude install zimbra</code> away. So I
downloaded it to <code>/usr/src</code>, unpacked it, found the install script
(<code>install.sh</code>), and began the magic (<code>cd /usr/src/zsc; sudo ./install
.sh</code>)</p>
<p>Aside from the fact that my <span class="caps">CPU</span> overheated about 20 times while downloading
the Zimbra Suite (apparently it needed thermal grease and a heat sink
realignment), all went well until the install script got to resolving my <span class="caps">MX</span>
records, hostname, /etc/hosts file, etc. Apparently figuring these out is a
bloody pain in the ass (forgive the imagery, I mean it in the British sense)
. So for the past few days I’ve been struggling with getting this figured
out, and the point of this post is, if you’ve been sending emails to any
@michaeljaylissner.com address, I’m ashamed to say,
they’re not going through. But you probably have realized this,
because they’re bouncing back to you. Well, now you know why.</p>
<p>Give me a couple more days, I’m working on it. In the mean time,
the <a href="https://michaeljaylissner.com/contact">contact</a> link does work.</p>Richard Stallman, Eccentric or Rather Well-Spoken?2007-09-12T21:48:22-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-12:posts/2007/09/12/richard-stallman-founder-of-gnu/<p>
I had the chance to see <a href="http://en.wikipedia.org/wiki/Richard_Stallman" title="Wikipedia Link">Richard Stallman </a>speak the other day at the <a href="http://ischool.berkeley.edu" title="ischool.berkeley.edu"><span class="caps">UC</span> Berkeley School of Information</a>, and it was quite an experience. In case you don’t know the name, Richard Stallman is the man behind <span class="caps">GNU</span>, and <span class="caps">GNU</span> is the software/philosophy that makes <span class="caps">GNU</span>/Linux what it is. Stallman’s belief is that all software, and indeed just about everything that you create should be freely available to anybody that wants it. This is in stark opposition to the Microsoftian or even the Apple perspective of software, and indeed Stallman has written a book about this called *Free Software, Free Society*. As you might expect, from a man with such beliefs, the book itself is free, and <a href="http://www.gnu.org/philosophy/fsfs/rms-essays.pdf">you can find it here</a>.
</p>
<p>
If that doesn’t convince you of his awesomeness, allow me to roughly quote a part of his introduction:<br />
Moderator: “…Richard Stallman has been awarded with four PhD’s — “<br />
Stallman: “—That’s six now.”<br />
Moderator: “I guess somebody needs to update Wikipedia…”
</p>
<p>
The speech he chose was “Copyright vs. Community in the Age of Computer Networks.” It was a real real eye-opener for me. I assumed that the recording and publishing companies were essentially screwing the artists, but I had no idea just how bad it really was. Imagine, if you will, that your garage band suddenly became really popular, and that you got signed with a big recording company. They publish your album, and they distribute it across the <span class="caps">USA</span>, where it sells well. You’d expect that your art would probably be making you some good money, would you not? I know I would, but apparently that’s not how it works.
</p>
<p>
The way Stallman tells it, the first place they nail you is by charging you for the distribution. So, until your album has sold some critical quantity, you’re still paying back the record company the loan they gave you to distribute your album (sounds vaguely like the mafia here, but it gets worse). The next place they nail you is by not giving you much of the album sales. I would think that you’d be given a good buck or two of each album sold, but apparently it’s more like a quarter, or maybe 50 cents. Not much profit there.
</p>
<p>
The third place they nail you is by owning your creativity. You created something from nothing, but if you want to make a copy of your album and give it to a friend, that’s just too bad, you’re going to have to buy the album for your friend just like everybody else. And you know what’s worse? Even many years later, after your album has pretty much stopped selling, and the record company has stopped pressing it, you still don’t own your creativity. In fact, as of 1998, the copyright they own for your creativity can last as long as 120 years, so even after you are long dead, they still own your music. It doesn’t stop there. You now have a schedule to produce more albums for them, each with the above problems.
</p>
<p>
Now, aren’t you glad you made it big, and that copyrights are there to protect you?
</p>
<p>
As you might expect, Stallman explains this a bit more thoroughly in his presentation, but that’s the basic gist of it. As is the case with just about everything related to Richard Stallman, this essay is available for free. In fact, if you’re interested in a bit of reading, <a href="http://www.gnu.org/philosophy/copyright-and-globalization.html">it’s here</a>.
</p>This is it. Drupal systems are go.2007-09-12T21:46:59-07:00Mike Lissnertag:michaeljaylissner.com,2007-09-12:posts/2007/09/12/drupal-is-go/<p>Well, I can’t say I have had a serious blog before, so with this very sentence, I am forging new ground for myself, and through the strange magic of the Internet, for everybody else in the world (except China, who I will now block from this blog by writing the following word: “democracy”).</p>
<p>There’s a pressure here of course not to have any typos and to make this post significant and poignant, but if I know me - and I think I do - I shouldn’t set high bars like that for myself. I should just enjoy the medium, allow mistakes early and often, and proceed with the reason I am here to write today, which, according to the title of this post is to discuss the software of this very blog.</p>
<p>It’s an interesting thing setting up a blog in your house. For some reason, it’s really bloody complicated. First, you’ve got to learn how your house is networked, then how the Internet is networked. Once you think you’ve got that figured out, you have to get a faster Internet connection (cable as opposed to <span class="caps">DSL</span>), and if you are feeling spry, perhaps a static <span class="caps">IP</span>. I’m not feeling spry, and so, dyndns.com is my friend. </p>
<p>The next step once the networking is figured out is to figure out the software and hardware sides of things. This is not an easy task either. In the end, I have set up two computers to run this here blog. One to run Drupal, Apache, etc., and the other to do the mail serving. For the <span class="caps">CMS</span>, I have chosen Drupal because it seems to be all the rage, and because it has a stupid song that got caught in my head for far too long (see youtube for details). Drupal is of course running on <span class="caps">GNU</span>+Linux, Apache, <span class="caps">PHP</span>, and MySQL. As for the mail server, it would be running Zimbra, but at the moment it is crashed. I can’t make it stop overheating, and it’s rather annoying. </p>
<p>Anyway, once that’s up and going, everything should be a go, and I will be a proud Internet host. Only one question truly remains: Is my <span class="caps">IP</span> on an anti-spam blacklist? We shall soon find out. </p>