<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8369819750228323578</id><updated>2011-10-08T19:14:13.438-06:00</updated><category term='web application'/><category term='msft'/><category term='superdell'/><category term='LGPL'/><category term='spf'/><category term='schanze'/><category term='java'/><category term='swing'/><category term='utah'/><category term='programming'/><category term='free'/><category term='competition'/><category term='privacy'/><category term='action figures'/><category term='governor'/><category term='netbeans'/><category term='event bus'/><category term='OSS'/><category term='greylisting'/><category term='interview'/><category term='programmer'/><category term='download'/><category term='super dell'/><category term='ha ha ha'/><category term='jobs'/><category term='fire'/><category term='jpedal'/><category term='direct'/><category term='python'/><category term='interviewing'/><category term='printer'/><category term='video'/><category term='microsoft'/><category term='link'/><category term='eclipse'/><category term='greylist'/><category term='gmail'/><category term='google apps'/><category term='eventbus'/><category term='google'/><category term='ink'/><category term='ogden'/><title type='text'>Adam Taft - Fresh to Squeeze</title><subtitle type='html'>Tasty nuggets from that impossible space between the stove and the counter top.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adam Taft</name><uri>http://www.blogger.com/profile/09627042547348731828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-5837210492809897336</id><published>2010-05-28T09:52:00.002-06:00</published><updated>2010-05-28T09:59:13.315-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSS'/><category scheme='http://www.blogger.com/atom/ns#' term='jpedal'/><category scheme='http://www.blogger.com/atom/ns#' term='LGPL'/><title type='text'>In Reponse To...</title><content type='html'>This blog post is in response to Mark Stephens who &lt;a href="http://adamtaft.blogspot.com/2010/04/jpedal-lgpl-direct-links.html?showComment=1275043737551#c5021735752922822199"&gt;wrote a comment&lt;/a&gt; to my &lt;a href="http://adamtaft.blogspot.com/2010/04/jpedal-lgpl-direct-links.html"&gt;JPedal LGPL Direct Links&lt;/a&gt; blog post.  Thank you Mark for your comment.  I'd like to reply to it here, since I'm likely going longer than a traditional comment block would support.&lt;br /&gt;&lt;br /&gt;Here is Mark's comment:&lt;br /&gt;&lt;blockquote&gt;Adam,&lt;br /&gt;&lt;br /&gt;Its done automatically and you are taken straight to the page with the download links on. As you say, you don't even need to post a valid email address if you are paranoid.&lt;br /&gt;&lt;br /&gt;We just ask for an email address so we can get an idea where the software is being downloaded from. IS that so unreasonable?&lt;br /&gt;&lt;br /&gt;We go to a lot of trouble to make a version of the software freely available, we spend our lives updating it and answering questions on the forums and wonder why we bother when we see your comments...&lt;/blockquote&gt;&lt;br /&gt;Thanks again Mark, I appreciate the dialog.&lt;br /&gt;&lt;br /&gt;First, you're right, &lt;i&gt;currently&lt;/i&gt; the download link to the LGPL JPedal viewer is available on the page after submitting the 'name and email' form (I just tried it out).  However, this was NOT the case when I wrote the blog post originally.  I had to wait for an email to be sent to me in order receive the download link location.&lt;br /&gt;&lt;br /&gt;So, kudos to you guys for changing your form.  If it had been this way originally, I wouldn't have written my post.  I think it's perfectly acceptable for you to ask for name and email, if you choose.  According to the LGPL, you can even charge for downloads of your Free Software.&lt;br /&gt;&lt;br /&gt;With the previous procedure, I had to post a valid email address, so being paranoid was not an option.  This was because, again, the links were not present on the page following the form submission.  I even tried an @mailinator.com email address waiting for the links that way, again with no luck.  This gave rise to my suspicion that a manual process was in place, since &lt;a href="http://www.mailinator.com/"&gt;Mailinator&lt;/a&gt; email addresses tend to get through otherwise.&lt;br /&gt;&lt;br /&gt;So no, in my opinion, what you're doing (now) is not unreasonable to ask.  What is unreasonable, in the spirit of Open Source Software, is to expect valid data to download your software (in this case, valid email).  Though, of course, not required by most (all?) open source licenses, many Free Software advocates tend also to be privacy minded and expect to be able to download anonymously and for free.  And if we can't, we assert the rights which you gave us, to legally distribute your Open software (for free) or, at the very least, do what I did and provide the direct download links.&lt;br /&gt;&lt;br /&gt;This is all, therefore, water under the bridge.  Your new procedure changes the need for me to provide direct download links to your software.  Like I said, I wouldn't have written my original post if it had been the case.&lt;br /&gt;&lt;br /&gt;Your second argument, however, doesn't hold water.  You seem to suggest that you are going out of your way to make your software available to the open source software community for some benevolent cause.  That you are heavy burdened by your LGPL initiatives.&lt;br /&gt;&lt;br /&gt;The fact is that releasing an Open Source version of your software benefits you and supports your business model, because otherwise, you wouldn't have done it to begin with.  In your case, you are hoping to provide an upgrade path from LGPL users to commercially licensed users, by removing support for printing and extraction in your LGPL product.  In your business model, you are releasing your software as LGPL somewhat as a taste of the full package, almost like a limited trial edition.  What you're doing is no more about Free Software (capital F) than what a "freeware" publisher is doing.&lt;br /&gt;&lt;br /&gt;If you are "spending your lives" supporting your free software version without any direct or indirect benefit, then if I were you, I would be questioning your involvement.  If you are so burdened by your support of the LGPL version, since you are obviously strictly motivated to this release for financial reasons, then I am just not seeing that the math is working out for you.&lt;br /&gt;&lt;br /&gt;I have no idea why you took such offense at my original post, but if Open Source is not benefiting your business model (now or in the future), then honestly we (the Open Source Community) really don't want your code.  If you are strictly in this to support your bottom line, and you are so bothered by posts like mine or support/complaints in your forums, then maybe you should just stop.  It would be sad to lose your contributions, but it's better this way.&lt;br /&gt;&lt;br /&gt;We, the OSS community, want partners and contributors who are supportive and happy about our cause.  And, if you are able to make a buck in the process, even better.  We have no problem with that either.&lt;br /&gt;&lt;br /&gt;However, to imply that you are somehow burdened by the support of your software without rewards, or that you expect some sort of kissing of your backside because of your contributions, well, maybe it's time to say goodbye.  We'd hate to see you leave, but rather that than to know that you are somehow dissatisfied with the Open Software Value Proposition.  It's no skin off our backs, either way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-5837210492809897336?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/5837210492809897336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=5837210492809897336' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/5837210492809897336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/5837210492809897336'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2010/05/in-reponse-to.html' title='In Reponse To...'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-1780007073448424933</id><published>2010-04-23T02:24:00.002-06:00</published><updated>2010-05-28T10:35:12.599-06:00</updated><title type='text'>Open Source Java PDF Viewing Library Review</title><content type='html'>Here's a quick review of three open source Java based PDF libraries which can be used to &lt;i&gt;view&lt;/i&gt; PDF documents in a Swing application.  While there are some very good PDF generation libraries (&lt;a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAoQFjAA&amp;url=http%3A%2F%2Fitextpdf.com%2F&amp;rct=j&amp;q=itext&amp;ei=TlbRS967M4_8tAPgnYWOAw&amp;usg=AFQjCNESiqk04gmXaZgB557ajaR9z90y2w&amp;sig2=c9xMOIY-9l-et0dxplYoLQ"&gt;iText&lt;/a&gt; and friends), there are fewer libraries which help render a PDF document into a type suitable for viewing in Swing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JPedal&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.jpedal.org/"&gt;http://www.jpedal.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've used JPedal in previous projects.  It seems to work decently, but &lt;a href="http://www.jpedal.org/download/lgpl/jpedal_lgpl_src.zip"&gt;looking at the source code&lt;/a&gt;, the project is very disorganized and likely prone to bugs.&lt;br /&gt;&lt;br /&gt;In my previous project, I had always exited my application by calling System.exit() or using the EXIT_ON_CLOSE parameter to the default close operation on a JFrame.  It wasn't until playing with JPedal in a new project that I realized JPedal is hanging my swing app and preventing it from shutting down if my frames are simply disposed of.  That is, if after having rendered a PDF document using JPedal, an application won't shutdown without having issued a System.exit().&lt;br /&gt;&lt;br /&gt;I couldn't even find a single JPedal example where they used anything but System.exit(), so it seems they're probably aware of the problem and possibly hiding it?  Don't know.  I tried every combination I could find to cleanly close and dispose the JPedal resources to no avail.  After looking at the source code, it doesn't necessarily surprise me.&lt;br /&gt;&lt;br /&gt;I gave up on JPedal and was forced to move onto other choices.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PDF Renderer&lt;/b&gt;&lt;br /&gt;&lt;a href="https://pdf-renderer.dev.java.net/"&gt;https://pdf-renderer.dev.java.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is/was a Sun sponsored open source project started by a few key Swing developers.  I have met Richard Bair in person and he's a real great guy.  So, this seemed like a logical next project to take a look at.&lt;br /&gt;&lt;br /&gt;The API is by far the easiest to use.  It's very simple to get a Swing based view of a PDF document up.  However, the library currently only supports older PDF document versions.  I have read that there is a patch available to allow rendering of new PDF.  *bah*  I was hoping for a solution that didn't require building the code myself.  And, it somewhat looks like the project has stalled, which shouldn't be surprising given Sun's push on JavaFX and now Oracle.&lt;br /&gt;&lt;br /&gt;Onto the next project.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apache PDFBox&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pdfbox.apache.org/"&gt;http://pdfbox.apache.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This turned out to be a good working solution.  The API is a bit more confusing than the other two, and I couldn't seem to find an existing Swing component to render a PDF.  But, the PDPage class of PDFBox has a convertToImage() method which returns a BufferedImage.  So, it was fairly easy to take the generated image and draw onto the canvas of a JComponent.&lt;br /&gt;&lt;br /&gt;My conversion code looks something like:&lt;br /&gt;&lt;pre&gt;PDDocument doc = null;&lt;br /&gt;try {&lt;br /&gt; doc = PDDocument.load(inputStream);&lt;br /&gt; final PDPage page = (PDPage) doc.getDocumentCatalog().getAllPages().get(0);&lt;br /&gt;&lt;br /&gt; PipedInputStream pis = new PipedInputStream();&lt;br /&gt; final PipedOutputStream pos = new PipedOutputStream(pis);&lt;br /&gt;   &lt;br /&gt; new Thread(new Runnable() {&lt;br /&gt;  @Override&lt;br /&gt;  public void run() {&lt;br /&gt;   try {&lt;br /&gt;    ImageIO.write(page.convertToImage(), "png", pos);&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }     &lt;br /&gt;  }&lt;br /&gt; }).start();&lt;br /&gt;&lt;br /&gt; // create image panel&lt;br /&gt; JPanel panel = new ImagePanel(pis);&lt;br /&gt;   &lt;br /&gt;} finally {&lt;br /&gt; if (doc != null) {&lt;br /&gt;  doc.close();    &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;My ImagePanel requires an InputStream (for reasons specific to the application), thus why the use of the I/O pipes.  I also wish I knew a better way to get just the first page of the PDF document (without a call to getAllPage()), since this is all I was interested in (the application is generating a preview of the first PDF page).&lt;br /&gt;&lt;br /&gt;PDFBox renders the newest PDF documents (from what I can tell), so this is good.  Like I said, the API is a bit more difficult to learn, though it's now seemingly straight forward (as can be seen from the above).  PDFBox is also in the Maven central repository, which is great for Maven development.  All in all, I'm pretty happy with PDFBox.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;jPodRenderer&lt;/b&gt;&lt;br /&gt;&lt;a href="http://opensource.intarsys.de/home/en/index.php?n=JPodRenderer.HomePage"&gt;http://opensource.intarsys.de/home/en/index.php?n=JPodRenderer.HomePage&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just found jPod tonight, having skipped over it a few times when searching.  It actually looks pretty promising, especially since they have a specific renderer which will render to both AWT and SWT.  So, that's cool.  Looks like they have dependency on quite a few jars, though, and they don't seem to be in the central Maven repository, which stinks because of the dependencies.  Anyway, if anyone has a review of jPod, send a link my way; I'd like to read about it.&lt;br /&gt;&lt;br /&gt;Updated May 28th, 2010.&lt;br /&gt;&lt;b&gt;ICEpdf&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.icepdf.org/"&gt;http://www.icepdf.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.jpedal.org"&gt;Mark Stephens at JPedal&lt;/a&gt; for providing this link.  I wasn't aware of the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-1780007073448424933?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/1780007073448424933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=1780007073448424933' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1780007073448424933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1780007073448424933'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2010/04/open-source-java-pdf-viewing-library.html' title='Open Source Java PDF Viewing Library Review'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-8526756713671906168</id><published>2010-04-16T12:35:00.004-06:00</published><updated>2010-04-16T12:39:13.887-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='direct'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='jpedal'/><category scheme='http://www.blogger.com/atom/ns#' term='LGPL'/><title type='text'>JPedal LGPL Direct Links</title><content type='html'>I get tired of the hoops some companies expect you to go through to download the Free Software versions of their products.  JPedal, a PDF viewing library for Java, is one such example.  They have an LGPL version of their library, but you must fill out a form asking for email and name in order to get it.  Big deal, right?  Just make something up, right?  Seems like they have someone manually processing these requests, which means delays in getting what you need.&lt;br /&gt;&lt;br /&gt;This is Free Software, isn't it?  So, here are the direct links to the JPedal LGPL licensed software:&lt;br /&gt;&lt;br /&gt;Binary:  &lt;a href="http://www.jpedal.org/download/lgpl/jpedal_lgpl.jar"&gt;http://www.jpedal.org/download/lgpl/jpedal_lgpl.jar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source:  &lt;a href="http://www.jpedal.org/download/lgpl/jpedal_lgpl_src.zip"&gt;http://www.jpedal.org/download/lgpl/jpedal_lgpl_src.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;p.s. According to the source, the latest version (as of this writing) is:  4.11b76&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-8526756713671906168?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/8526756713671906168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=8526756713671906168' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8526756713671906168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8526756713671906168'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2010/04/jpedal-lgpl-direct-links.html' title='JPedal LGPL Direct Links'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-7528858282259675335</id><published>2010-02-15T14:14:00.004-07:00</published><updated>2010-02-15T14:16:58.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eventbus'/><category scheme='http://www.blogger.com/atom/ns#' term='event bus'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><title type='text'>Simple Java Event Bus</title><content type='html'>I've just released some code that has come in handy for quite a few projects I've worked on.  It's called the Simple Java Event Bus and is released under the New BSD license.  You can download the code here: &lt;a href="http://code.google.com/p/simpleeventbus/"&gt;http://code.google.com/p/simpleeventbus/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An event bus is a useful pattern for decoupling the components of a highly meshed application.  Event bus is a substitute for the Observer pattern, useful when too many observers/observables exist to keep a clean design.  Components can couple directly to the EventBus instead of to each other, allowing events or messages to be published to the bus.  Listeners to the bus will then be notified about the event if they have interest in the event type.&lt;br /&gt;&lt;br /&gt;I have used other event bus implementations in live code.  However, I have found that the above library to be the most simple to use and to get started quickly with.  Hope you can benefit from the code as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-7528858282259675335?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/simpleeventbus/' title='Simple Java Event Bus'/><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/7528858282259675335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=7528858282259675335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7528858282259675335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7528858282259675335'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2010/02/simple-java-event-bus.html' title='Simple Java Event Bus'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-5982327618032322575</id><published>2009-12-14T11:52:00.002-07:00</published><updated>2009-12-14T11:53:29.028-07:00</updated><title type='text'>Credit Card Changes Driving Customers Away</title><content type='html'>Hooray!  We might be winning...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bizjournals.com/washington/stories/2009/12/14/daily15.html"&gt;Credit Card Changes Driving Customers Away&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-5982327618032322575?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/5982327618032322575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=5982327618032322575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/5982327618032322575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/5982327618032322575'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2009/12/credit-card-changes-driving-customers.html' title='Credit Card Changes Driving Customers Away'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-1507920268187983395</id><published>2009-11-03T10:18:00.005-07:00</published><updated>2009-12-14T12:00:26.313-07:00</updated><title type='text'>Economics in One Lesson</title><content type='html'>This is one of those links you tuck away and revisit when you need a fresh perspective or a reset of values when things are hazy...&lt;br /&gt;&lt;blockquote&gt;Economics is haunted by more fallacies than any other study known to man. This is no accident. The inherent difficulties of the subject would be great enough in any case, but they are multiplied a thousandfold by a factor that is insignificant in, say, physics, mathematics or medicine-the special pleading of selfish interests. While every group has certain economic interests identical with those of all groups, every group has also, as we shall see, interests antagonistic to those of all other groups. ...&lt;/blockquote&gt;&lt;a href="http://jim.com/econ/contents.html"&gt;Economics in One Lesson&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-1507920268187983395?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/1507920268187983395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=1507920268187983395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1507920268187983395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1507920268187983395'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2009/11/economics-in-one-lesson.html' title='Economics in One Lesson'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-8448604143694872499</id><published>2009-10-13T12:15:00.000-06:00</published><updated>2009-10-13T12:15:53.243-06:00</updated><title type='text'>So You Want to Learn Japanese</title><content type='html'>You’ve eaten at a few Japanese restaurants, seen some anime, hosted an exchange student, and had a Japanese girlfriend. And now, somewhere in the back of your tiny brain, you think that Japanese would be a good language to learn…&lt;br /&gt;&lt;br /&gt;&lt;a href=" http://pepper.idge.net/japanese/"&gt;http://pepper.idge.net/japanese/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-8448604143694872499?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/8448604143694872499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=8448604143694872499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8448604143694872499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8448604143694872499'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/12/so-you-want-to-learn-japanese.html' title='So You Want to Learn Japanese'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-4677327171392574283</id><published>2009-06-24T11:34:00.000-06:00</published><updated>2009-06-24T11:35:49.838-06:00</updated><title type='text'>How Much Student Loan Debt is Too Much?</title><content type='html'>&lt;a href="http://roomfordebate.blogs.nytimes.com/2009/06/14/how-much-student-debt-is-too-much/"&gt;How much student loan debt is too much?&lt;/a&gt;  Anything over $0.00 is too much.  It's that simple.  There is absolutely no reason (and no return on investment) for a student to go high into debt at an expensive school than to stay locally and pay in-state tuition at a state school.  The differentiation between the education at the "upper end" schools (which are exponentially more spendy) vs. the traditional state schools is insignificant.&lt;br /&gt;&lt;br /&gt;On average, tuition for in-state schools is around $6000 / year (two semesters).  That's literally $500 / month.  Who can't afford that?  Simple budgeting and cash flow affords that education.  For $12000 / year, or $1000 / month, a student can stay at the dorms with a meal plan.  What's exactly wrong with flipping a burger or delivering a pizza while attending school?  How hard exactly is it to earn $1000 / month??&lt;br /&gt;&lt;br /&gt;See, the "entitlement" mentality is infecting us, and debt has become the facilitator to these entitlements.  It's absolutely criminal that parents are setting up their children for a large debt obligation right at the start of their adult life.  Student loans are particularly nasty, since they don't disappear during bankruptcies, etc.  How many people do you know in their 30's and 40's still paying off student loan debts?  I actually knew this number at one point, but have forgotten, but it's exceptionally high.&lt;br /&gt;&lt;br /&gt;My children are going to earn their way through school.  I hope to have saved a little up for them, of course, and I hope they get scholarships.  But, ultimately I hope they learn the value of hard work, budgeting, and staying off the American crack which we call debt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-4677327171392574283?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/4677327171392574283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=4677327171392574283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/4677327171392574283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/4677327171392574283'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2009/06/how-much-student-loan-debt-is-too-much.html' title='How Much Student Loan Debt is Too Much?'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-8006048701359009292</id><published>2009-03-04T10:29:00.001-07:00</published><updated>2009-03-04T10:31:18.119-07:00</updated><title type='text'>The New Urkel</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lORD_iGjtsQ/Sa6612Z3cAI/AAAAAAAAAAw/FBka2hhztmE/s1600-h/urkel.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 310px; height: 320px;" src="http://3.bp.blogspot.com/_lORD_iGjtsQ/Sa6612Z3cAI/AAAAAAAAAAw/FBka2hhztmE/s320/urkel.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5309386445016231938" /&gt;&lt;/a&gt;&lt;br /&gt;Received this in my inbox...  Pretty funny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-8006048701359009292?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/8006048701359009292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=8006048701359009292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8006048701359009292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8006048701359009292'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2009/03/new-urkel.html' title='The New Urkel'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lORD_iGjtsQ/Sa6612Z3cAI/AAAAAAAAAAw/FBka2hhztmE/s72-c/urkel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-2702882835655284180</id><published>2009-02-17T15:37:00.003-07:00</published><updated>2009-02-17T15:43:51.871-07:00</updated><title type='text'>The Greatest Shortcoming of the Human Race</title><content type='html'>"The greatest shortcoming of the human race is our inability to understand the exponential function." -- Dr. Albert A. Bartlett&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=F-QA2rkpBSY"&gt;http://www.youtube.com/watch?v=F-QA2rkpBSY&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(this is the starting section of the whole video, part 1 of 8)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-2702882835655284180?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/2702882835655284180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=2702882835655284180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/2702882835655284180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/2702882835655284180'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2009/02/greatest-shortcoming-of-human-race.html' title='The Greatest Shortcoming of the Human Race'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-3455025742057288549</id><published>2009-01-15T14:53:00.005-07:00</published><updated>2009-01-15T15:30:49.006-07:00</updated><title type='text'>Ask a Ninja Identity Revealed</title><content type='html'>I've just revealed the secret identity of the famed ninja from &lt;a href="http://www.askaninja.com"&gt;Ask a Ninja&lt;/a&gt;...  The voice and mannerisms are too close to be coincidence.&lt;br /&gt;&lt;br /&gt;Start watching (and listening!) at around 2:13...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=e5Dvw51Rufk"&gt;Elmo Live Reveals the Ninja's Identity&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that the ninja in the opening intro sequence of all Ask a Ninja episodes has blue eyes, while the ninja in the actual episode has brown and is a little slimmer.  This fits because the lab tech in the Elmo Live video clearly has brown eyes.&lt;br /&gt;&lt;br /&gt;This will obviously be my last post, as I assume a painful and long drawn out death.  Perhaps simply even typing these words, the power of the ninja will reach through the internet, up into my computer, and {#`%${%&amp;`+'${`%&amp;NO CARRIER&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-3455025742057288549?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/3455025742057288549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=3455025742057288549' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3455025742057288549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3455025742057288549'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2009/01/ask-ninja-identify-revealed.html' title='Ask a Ninja Identity Revealed'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-6473237712352388420</id><published>2008-12-05T18:20:00.002-07:00</published><updated>2008-12-05T18:21:56.889-07:00</updated><title type='text'>Proof of Global Warming</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lORD_iGjtsQ/STnToYPNnvI/AAAAAAAAAAo/KPZZgKk1rHg/s1600-h/proof-of-global-warming.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 130px;" src="http://2.bp.blogspot.com/_lORD_iGjtsQ/STnToYPNnvI/AAAAAAAAAAo/KPZZgKk1rHg/s320/proof-of-global-warming.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276481129095732978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-6473237712352388420?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/6473237712352388420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=6473237712352388420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6473237712352388420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6473237712352388420'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/12/proof-of-global-warming.html' title='Proof of Global Warming'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lORD_iGjtsQ/STnToYPNnvI/AAAAAAAAAAo/KPZZgKk1rHg/s72-c/proof-of-global-warming.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-8009527651903467584</id><published>2008-12-05T17:51:00.002-07:00</published><updated>2008-12-05T18:06:59.835-07:00</updated><title type='text'>Daddy, is Santa Real?</title><content type='html'>What follows is from my archive (a previous blog) from 2006...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;I'm a proud father, though I'm frustrated too. What can you do about some things but to just shake your head and wonder.&lt;br /&gt;&lt;br /&gt;I'm a member of the &lt;a href="http://www.ogdenathletic.com/"&gt;Ogden Athletic Club&lt;/a&gt;. One of the biggest selling points for the club (in my mind) is the nursery care they provide for young children. My experience with their childcare has so far been mostly positive, but I have to write about an incident that happened a week or two ago.&lt;br /&gt;&lt;br /&gt;My daughter, 3 years old (almost 4), was in tears on the way home from the club. My wife had picked her up from the nursery and relayed to me what had happened that made my little princess so distraught.&lt;br /&gt;&lt;br /&gt;A fellow boy had apparently mentioned something about Santa Claus, probably about all the toys Santa was going to bring him. You know, something typical and innocent to say around Christmas time. My daughter, with a pure heart and only good intentions, promptly informed the boy that in fact Santa wasn't real, that he's just make believe and that Santa would not be bringing him any presents.&lt;br /&gt;&lt;br /&gt;What's a strong willed girl to do but to set the young man straight? It's my daughter's nature to try and help out when and where she can. She's very smart and understands things at a level most children her age don't. When someone says something she inherently knows is wrong, it's her duty in life to inform them the truth. What's a smart strong-willed 3 year old supposed to do?&lt;br /&gt;&lt;br /&gt;So my wife walks in after the situation had apparently cooled down some, but there was still tension in the air. Apparently, many of the kids were offended by my daughter's words, they were yelling at her and she was left to defend her position basically alone. "Well, who brings us the presents then?" asked the boy.&lt;br /&gt;&lt;br /&gt;"Our parents give us presents," was my daughter's reply.&lt;br /&gt;&lt;br /&gt;One nursery assistant, having her own child in nursery that day, promptly grabbed her daughter and dragged her away from the situation. She was so afraid of her daughter hearing that Santa wasn't real, to hear the truth. Why not take that opportunity to teach the child? Teach your child that some people have certain beliefs, and that others have other beliefs, and that it's all ok for each to have their own.&lt;br /&gt;&lt;br /&gt;I get the feeling that the nursery staff was a little peeved at my daughter's actions. My wife described the tension in the air, and I would believe it given that no teacher intervened in the verbal argument between my daughter and the rest of the class.&lt;br /&gt;&lt;br /&gt;I can't expect her to know all the nuances and dances we perform to keep the cultural Santa mythology going. She's not a politician yet, she just tells it like it is; 3 year old's don't have a sense of political correctness. Just as true as it was in my daughter's mind that Santa wasn't real, it was true in the boy's mind that Santa was real. It's black or white for this age, there is no understanding of gray issues, political correctness, or historic fictional characters.&lt;br /&gt;&lt;br /&gt;In my daughters mind, God is real and Santa is make believe, and I frankly like it that way. I can understand why the boy felt so offended and confused (my daughter contradicted the boy's parents). And I understand why my daugther was in tears over getting verbally ganged up on by her peers.&lt;br /&gt;&lt;br /&gt;What I don't understand is why we continue to lift up Santa, yet put down God. Why do we lie to our children and let them so wholeheartedly believe in something that in a few short years they will realize is not true. Wouldn't it be better telling our children that Santa is just a fictional figure head, someone who is fun to talk or pretend about, something to tickle our fancy and imaginations like any good story book? As opposed to setting them up for disappointment and breaking trust in their parents?&lt;br /&gt;&lt;br /&gt;I want my children to wholeheartedly trust me with everything. I will only ever tell my children the truth, because I want to model and teach them true faith, true trust and love. Setting our children up for disappointment by perpetuating a lie burns bridges and makes our children's hearts callus.&lt;br /&gt;&lt;br /&gt;My biggest disappointment is with the nursery workers. Their inaction speaks volumes. Their inability to act and deal with the situation really demonstrates how sacred the lie of the Santa Christmas has become. The original St. Nicholas advocated people sell their goods and give to the poor. Shouldn't that be what Santa is all about? Shouldn't that be what we're teaching our children?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-8009527651903467584?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/8009527651903467584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=8009527651903467584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8009527651903467584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/8009527651903467584'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/12/daddy-is-santa-real.html' title='Daddy, is Santa Real?'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-2275406369764710804</id><published>2008-12-05T17:08:00.002-07:00</published><updated>2008-12-05T17:13:27.747-07:00</updated><title type='text'>MPF File Extractor</title><content type='html'>I always thought that the .mpf file extension was a proprietary file format used with Microsoft's Clip Organizer product or via their online clipart gallery. In fact, it's not very exciting or difficult to extract clip art (or I assume other media) from the package file, since it's only an xml file with the clipart files encoded as Base64 inside.&lt;br /&gt;&lt;br /&gt;I have a legal copy of the Clip Organizer product. However, I don't necessarily install it (nor want to) on every computer. But, I do make extensive use of Microsoft's online clipart gallery which means I get a lot of ClipArt.mpf files lying around.&lt;br /&gt;&lt;br /&gt;Searching, I found a PERL script to extract mpf files. But, I don't use Perl regularly, so getting the right perl modules installed wasn't exciting. I decided it would just be easier to write a parser / extractor in Java. If you're interested, here is the &lt;a href="http://www.adamtaft.com/code/mpf-extractor.html"&gt;(free) java source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The class requires the &lt;a href="http://commons.apache.org/codec/"&gt;Apache Commons Codec&lt;/a&gt; library to be in the classpath.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-2275406369764710804?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/2275406369764710804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=2275406369764710804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/2275406369764710804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/2275406369764710804'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/12/mpf-file-extractor.html' title='MPF File Extractor'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-2293427945582031671</id><published>2008-10-24T12:47:00.001-06:00</published><updated>2008-10-24T12:49:29.869-06:00</updated><title type='text'>Halloween Politics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lORD_iGjtsQ/SQIYjnfbSsI/AAAAAAAAAAg/uCeGB4ZtY-0/s1600-h/halloween.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 169px;" src="http://2.bp.blogspot.com/_lORD_iGjtsQ/SQIYjnfbSsI/AAAAAAAAAAg/uCeGB4ZtY-0/s200/halloween.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5260794314897443522" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-2293427945582031671?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/2293427945582031671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=2293427945582031671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/2293427945582031671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/2293427945582031671'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/10/halloween-politics.html' title='Halloween Politics'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lORD_iGjtsQ/SQIYjnfbSsI/AAAAAAAAAAg/uCeGB4ZtY-0/s72-c/halloween.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-6961784642340971302</id><published>2008-10-14T18:22:00.002-06:00</published><updated>2008-10-14T18:26:03.044-06:00</updated><title type='text'>Layman's Guide to Credit Default Swaps</title><content type='html'>This is a good video and introduction to the problem of credit default swaps, which is one of the primary causes in our current financial meltdown.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/1915392"&gt;http://vimeo.com/1915392&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-6961784642340971302?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/6961784642340971302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=6961784642340971302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6961784642340971302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6961784642340971302'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/10/laymans-guide-to-credit-default-swaps.html' title='Layman&apos;s Guide to Credit Default Swaps'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-1640450122472643775</id><published>2008-10-13T13:31:00.003-06:00</published><updated>2008-10-23T10:30:25.672-06:00</updated><title type='text'>Once a Month</title><content type='html'>Seems I'm on the once-a-month blog posting.  Not bad really, but improvements could be made.&lt;br /&gt;&lt;br /&gt;Well, lacking anything really insightful to post, here is a useful chart:&lt;br /&gt;&lt;a href="http://images.huffingtonpost.com/gen/41792/original.jpg"&gt;The Sarah Palin Debate Flow Chart&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-1640450122472643775?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/1640450122472643775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=1640450122472643775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1640450122472643775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1640450122472643775'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/10/once-month.html' title='Once a Month'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-5924981692322267775</id><published>2008-09-29T15:19:00.003-06:00</published><updated>2009-03-06T16:22:19.227-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>Another quote, this time from my very good friend and teacher, Ron H.  &lt;br /&gt;&lt;br /&gt;We were talking about the market and such.  Especially after today's 7% drop in the DOW, I thought what he said was timely:&lt;br /&gt;&lt;blockquote&gt;Doesn't much matter what the stock market, etc. does; the rivers still run and the leaves still change colors.  Somebody else is in charge of that, so it still works.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;He always makes me smile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-5924981692322267775?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/5924981692322267775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=5924981692322267775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/5924981692322267775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/5924981692322267775'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/09/quote-of-day.html' title='Quote of the Day'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-3263298474652269899</id><published>2008-08-13T20:45:00.004-06:00</published><updated>2008-08-13T21:17:19.297-06:00</updated><title type='text'>Quote of the Day</title><content type='html'>I've been reading a bit about &lt;a href="http://en.wikipedia.org/wiki/Patrick_M._Byrne"&gt;Patrick M. Byrne&lt;/a&gt; (CEO of Overstock), in particular his campaign against naked short selling.  This quote (from March 8th) comes as a &lt;a href="http://www.deepcapture.com/tim-mullaney-and-patrick-byrne-discuss-20-businessweek/"&gt;response to a Business Week reporter&lt;/a&gt;.  It made me laugh:&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;Since I think "EBITDA" is the stupidest thing I ever heard emanate from Wall Street (no small feat), I … don’t begin to know how to answer. I suppose I could go and recast all my numbers into EBITDA (or for that matter, "pro forma") but I think I’ll do something more valuable with my time, like alphabetize my CD’s by, "Name of drummer."&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;And, if you don't know anything about naked short selling, or of Mr. Bryne's "campaign" against it, try &lt;a href="http://www.businessjive.com/"&gt;www.businessjive.com&lt;/a&gt; (a site of Byrne's).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-3263298474652269899?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/3263298474652269899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=3263298474652269899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3263298474652269899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3263298474652269899'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/08/quote-of-day.html' title='Quote of the Day'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-457030798579639861</id><published>2008-07-29T13:06:00.001-06:00</published><updated>2008-07-29T13:08:22.412-06:00</updated><title type='text'>Subprime Primer</title><content type='html'>Do you understand the subprime mortgage financial crisis which we're currently enjoying?  I didn't until I read this:&lt;br /&gt;&lt;br /&gt;(Note:  potty word alert)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/TeamPresent?docid=ddp4zq7n_0cdjsr4fn&amp;skipauth=true"&gt;The Subprime Primer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-457030798579639861?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/457030798579639861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=457030798579639861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/457030798579639861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/457030798579639861'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/07/subprime-primer.html' title='Subprime Primer'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-3408384007699551683</id><published>2008-06-13T18:37:00.006-06:00</published><updated>2011-06-04T19:02:43.581-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='greylisting'/><category scheme='http://www.blogger.com/atom/ns#' term='greylist'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='spf'/><title type='text'>Greylisting Whitelist for Gmail via SPF</title><content type='html'>[update: 10/14/2009]&lt;br /&gt;I just noticed that Google provides this same technique on a Google Apps help page.  Here is the link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/support/a/bin/answer.py?hl=en&amp;answer=60764"&gt;http://www.google.com/support/a/bin/answer.py?hl=en&amp;answer=60764&lt;/a&gt;&lt;br /&gt;--------&lt;br /&gt;&lt;br /&gt;In the ever escalating arms race between spammers and hosting providers, the technique of &lt;a href="http://en.wikipedia.org/wiki/Greylisting"&gt;greylisting&lt;/a&gt; was, at one a point, an extremely effective weapon against spam.  These days, greylisting is not as effective, because spamming hosts now correctly handle the temporary error condition used by a greylisting server.  But it still is a good tool and first line of defense when used correctly.&lt;br /&gt;&lt;br /&gt;Of course, one of the biggest problems with greylisting comes from large email hosting providers, like Gmail, Yahoo, Hotmail, etc.  These services use multiple servers to deliver their mail (they have to), and as such, when a message is returned as a temporary failure, it's not guaranteed that the same sending server will attempt to deliver the message a second time.&lt;br /&gt;&lt;br /&gt;As such, the only thing to do is whitelist the servers used by these large hosting providers.  Due to, I'm sure, Google's ever growing infrastructure, Gmail is particularly difficult to keep up on which servers belong to the Gmail cloud.&lt;br /&gt;&lt;br /&gt;I just stumbled upon a pretty decent way, however, to easily learn all of Gmail's outgoing mail server IP addresses.  This information is readily available in their &lt;a href="http://en.wikipedia.org/wiki/Sender_Policy_Framework"&gt;SPF&lt;/a&gt; records for their service.&lt;br /&gt;&lt;br /&gt;Here is a link which describes which type of SPF record should be added to a domain which has email routed through Google Apps:  &lt;a href="http://www.google.com/support/a/bin/answer.py?hl=en&amp;answer=33786"&gt;http://www.google.com/support/a/bin/answer.py?hl=en&amp;answer=33786&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can see that Google specifies an "include" directive which is aspmx.googlemail.com.  So, now we can do a TXT query on this domain, which gives us:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;]$ host -t txt aspmx.googlemail.com&lt;br /&gt;aspmx.googlemail.com descriptive text "v=spf1 redirect=_spf.google.com"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The same query against googlemail.com and gmail.com returns the same information, too.  So, following the redirect:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;]$ host -t txt _spf.google.com&lt;br /&gt;_spf.google.com descriptive text "v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ?all"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Obviously we can infer from this the following ip address ranges:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;216.239.32.0/19&lt;br /&gt;64.233.160.0/19&lt;br /&gt;66.249.80.0/20&lt;br /&gt;72.14.192.0/18&lt;br /&gt;209.85.128.0/17&lt;br /&gt;66.102.0.0/20&lt;br /&gt;74.125.0.0/16&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I don't know if Google has officially published all their mail servers to help us who use greylisting.  However, the above technique seemed to be a pretty slick way to determine which IP address ranges should be considered for whitelisting Gmail.&lt;br /&gt;&lt;br /&gt;Well anyway, it was one of those "oh duh" type moments for me.  Hopefully this helps someone else too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-3408384007699551683?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/3408384007699551683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=3408384007699551683' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3408384007699551683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3408384007699551683'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/06/greylisting-whitelist-gmail-with-spf.html' title='Greylisting Whitelist for Gmail via SPF'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-7450222035115280931</id><published>2008-05-22T00:00:00.008-06:00</published><updated>2008-05-22T01:08:40.876-06:00</updated><title type='text'>From the Horse's Mouth...</title><content type='html'>I figured my &lt;a href="http://adamtaft.blogspot.com/2008/03/super-dell-for-utah-governor.html"&gt;last blog about him&lt;/a&gt; would bring out the best.  Sure enough.  Here's what Dell Schanze, Libertarian candidate for governor of Utah, left as a comment to my blog post about him:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;Ok Adams Daft, who are you going to vote for?? EXACTLY!!! ME!!! No matter how much crap you want to talk about totally false media stories I am the only hope you have as I am the only American on the ballot. I have tons of support as I helped hundreds of thousands of people with the businesses I owned and people know I did what I said I would and went out of my way to take care of them if any issue arrose. I am by far the best candidate and the only one of the ballot worth voting for. Even those that don't like me will still vote for me even if for the mere reason of NOT voting for the other guys. Your ridiculous story is what makes the party look stupid and ununified. The homos in the tootoos rejecting me at the convention are what make the party look stupid. I built the 4th largest system builder in the western US and won the World System Builder Award by over 30%. You should pull your head out and start supporting candidates on the issues and not attacking them because of your personal issues. I am your only hope and it doesn't matter if you like that or not. I'm it. Now quit being an idiot and attacking the only person that WILL stick up for your rights. Dumb Ass!!&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;No rebuttal needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-7450222035115280931?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/7450222035115280931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=7450222035115280931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7450222035115280931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7450222035115280931'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/05/from-horses-mouth.html' title='From the Horse&apos;s Mouth...'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-1810013325769451450</id><published>2008-04-13T18:15:00.005-06:00</published><updated>2008-04-13T21:37:04.204-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='competition'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>Competition is Good, even for Java</title><content type='html'>For about the last decade, a flame-war has existed in the Java camps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Swing vs. SWT&lt;/li&gt;&lt;li&gt;Netbeans vs. Eclipse&lt;/li&gt;&lt;li&gt;Sun vs. IBM&lt;/li&gt;&lt;/ul&gt;You seldom read about the advantages of a diverse development ecosystem, and instead, the generalized perception is that competing Java libraries hurts the Java platform as a whole.  I tend to take an opposite view; that the inter-Java component competition is a much needed and healthy aspect of the platform and will be the critical element for success in the future.&lt;br /&gt;&lt;br /&gt;The following is mostly my own guess as to how things have gone down with the Java platform.  I'm guessing that most of what I've written here is seemingly accurate, though undoubtedly there are some mistakes in the timeline and/or motivations of the interested parties.  I believe this is close enough to the truth to be acceptable for the point I'm attempting to make.&lt;br /&gt;&lt;br /&gt;From a likely naive read of Java history, it seems obvious to me that the competition between companies like IBM and Sun over the Java platform has strengthened the platform as a whole, created new options, more mature APIs, and has eventually lead to the opening of the Java source code by Sun in 2007.&lt;br /&gt;&lt;br /&gt;For example, when IBM started to look at Java's AWT (Abstract Window Toolkit) graphic framework, improvements needed to be made to provide better fidelity with the native operating system underneath.  AWT was basically judged as unacceptable by IBM for use in the development of its Visual Age IDE.  AWT was clunky and lacked many features, and as such, IBM chose to develop its own windowing toolkit which did not rely on AWT and provided for better native OS integration.  IBM came out with SWT (Standard Widget Toolkit) which, unlike AWT, had native renderings for the various graphic interface windowing components.  SWT was fast and looked native.&lt;br /&gt;&lt;br /&gt;Meanwhile, Sun pushed forward on the development of AWT by creating Swing, a light-weight layer sitting atop the AWT framework.  With Swing, Java developers would have a very consistent API to developing moderately decent looking graphic user interfaces.  Even with Swing though, IBM was not satisfied and was instead seeing great strides being made in its SWT platform, both in terms of functionality and performance.  IBM stuck with SWT and Swing development slowed, mostly due to legitimate and fundamental criticisms over Swing (slow, kludgey, non-native rendering).  IBM had picked the right horse to bet on, at least for the time being.&lt;br /&gt;&lt;br /&gt;Today however, that perspective of the "right horse" is changing.  A comparison is being made between the Eclipse and Netbeans IDEs (Integrated Development Environment) developed by IBM and Sun respectively.  Netbeans, being based on Swing, has largely suffered from the original criticisms leveled against Swing, while Eclipse has been left rolling on highs as the king of Java development environments.&lt;br /&gt;&lt;br /&gt;But recently, Netbeans (mostly because of the strong improvements to Swing) has made extrodinarily amazing gains in performance and functionality and is garnering attention from multiple technology critics, fairing well in comparison to Eclipse.  Netbeans is now a viable competitor to Eclipse, possibly about even in developer mindshare.  Eclipse vs. Netbeans is now the next Java holy war.  Swing, once all but considered dead, is now extremely healthy and alive.&lt;br /&gt;&lt;br /&gt;I have recently read a few forum postings and blog postings which say something to the effect that "Sun was right" to stick with Swing and that "IBM was wrong" to keep pushing on SWT.  The comparison has primarily come from recent perceived performance problems in the latest versions of Eclipse, as well as the inability for Eclipse to run on all platforms as well as Netbeans.  Swing has made significant improvements in the last two major Java versions; at this point, for most applications, it's as good as native applications.&lt;br /&gt;&lt;br /&gt;In all this, what seems to be easily forgotten is that IBM was "right" to make the decisions that they did.  At the time, AWT/Swing was just not viable.  If Sun had been more cooperative with IBM, then perhaps SWT wouldn't exist.  SWT has created good competition that Swing has been forced to mature quickly.  And, fundamentally this is a good thing!&lt;br /&gt;&lt;br /&gt;The competition between IBM and Sun has only pushed Java forward in a positive direction.  Another example is the recent open source release of the Java framework.  Previously, the Java source code was only available under a fairly restrictive license, but again due to pressure from other competitive sources (IBM, Redhat, Microsoft, Oracle), Sun has gotten all the parties to the table in order to open source Java in a GPL derivative license.  The healthy Inter-platform Java competition has again benefited the Java ecosystem as a whole.&lt;br /&gt;&lt;br /&gt;Ultimately, my hat goes off to the good folks at both IBM and Sun.  I believe it's because of both their efforts (among many countless other organizations not even mentioned here) that Java is truly a fantastic environment to create a whole host of applications.  I hope that the lesson learned is that free market values and the competitive spirit does indeed work to create better products.  The gift of Java is a great example of this competitive and innovative spirit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-1810013325769451450?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/1810013325769451450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=1810013325769451450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1810013325769451450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1810013325769451450'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/04/competition-is-good-even-for-java.html' title='Competition is Good, even for Java'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-9172126793997998687</id><published>2008-04-08T20:56:00.005-06:00</published><updated>2008-04-14T13:26:33.031-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web application'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google apps'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Python Wins</title><content type='html'>It's official...  Python is now the official web application language of the future.  For many many years, we've had an intense battle for the hearts of the multitudes of web application developers.  While the battle is still being fought, and likely many on the battlefield will disagree, the winner is now decisively clear.&lt;br /&gt;&lt;br /&gt;Recently, Google announced the creation of an "&lt;a href="http://code.google.com/appengine/"&gt;App Engine&lt;/a&gt;," which is a highly scalable web application framework.  The App Engine allows developers to plug into Google's infrastructure to provide highly scalable and reliable hosting for the application environment.&lt;br /&gt;&lt;br /&gt;Amazon should probably be considered the first mover in this field of usable and scalable developer infrastructure resources, with such services as EC2, S3, etc.  Google too has had a strong role in offering APIs and other remote interfaces into their environment.&lt;br /&gt;&lt;br /&gt;But, now it's game over.  The writing is on the wall.  Web hosting providers should know their time has come to an end.&lt;br /&gt;&lt;br /&gt;As an extremely small web host and web application programmer, I've enjoyed a steady flow of income hosting websites and small web applications for various businesses.  I've hosted on my own dedicated (leased) servers mostly out of necessity.  It is much easier to provide custom services on my own platform than trying to use someone else's nickel-and-dime hosting provider.  I install the tools I need, get the database running, essentially everything I need is available to do what I need to do quickly.&lt;br /&gt;&lt;br /&gt;Awhile ago (a few years?), Google announced their "Google Apps" service (of which the App Engine will be a part), which is a broad set of useful services for businesses, including email hosting (through GMail), documents, calendars, etc.  Google Apps allows the use of custom domains, so for example, my adamtaft.com email is routed through Google Apps / GMail.  (Works great by the way, which is another future blog posting).&lt;br /&gt;&lt;br /&gt;Included in Google Apps is a quite lame web page hosting service, called Google Pages.  I checked out the service when it first arrived, and basically came to the realization that it was just a toy for the tweens, not really ready or equipped for a full service website or web application.  It reminded me of other free hosting providers, like geocities or the like.&lt;br /&gt;&lt;br /&gt;I knew it would happen though...  I knew eventually Google would offer a total and complete web application environment such that would be useful under the Google Apps umbrella and provide the missing server side programming traditional of web hosting provides.  The App Engine offers 500 MB of storage for free, and apparently 5 million page views per month (how that translates into actual bandwidth, I don't know).  The data storage resides on Google's cloud (GFS / BigTable), so you can expect the same scalability and reliability as Google search has itself.&lt;br /&gt;&lt;br /&gt;What does all this mean?  It means the end is near and that Google will now begin to take a lion's share of web hosting away from small web hosting services.  And, because of the fact that the App Engine supports Python (at least for now, likely other languages on the way), it makes a strong case towards knowing and developing future projects in the various Python environments.  In fact, Google ships a version of Django (a Python based web application environment) with their App Engine SDK.  (note, all python libraries are not available, but most of those which are useful for web application development are)&lt;br /&gt;&lt;br /&gt;I've known for a long time I want to be out of the business of actually maintaining the hosting servers; it's a pain for a small guy like myself.  So, from my point of view, this is fantastic news.  Now I can concentrate on providing actual value added services to my clients (i.e. actual billable hours) instead of constantly needing to work on the maintenance of the infrastructure itself.&lt;br /&gt;&lt;br /&gt;Ruby on Rails, Java, .NET, PHP, Perl...  These are all great web application environments.  I know quite a bit about a few of them (I'm obviously a Java fan boy).  But clearly, I have neglected Python for too long now.  The wake up call is here.  I'm just glad I hear the alarm going off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-9172126793997998687?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/9172126793997998687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=9172126793997998687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/9172126793997998687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/9172126793997998687'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/04/python-wins.html' title='Python Wins'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-4263989403860135249</id><published>2008-03-30T11:22:00.003-06:00</published><updated>2008-03-30T12:57:31.570-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='ogden'/><category scheme='http://www.blogger.com/atom/ns#' term='fire'/><title type='text'>Ogden Fire on Jefferson St.</title><content type='html'>Early Friday morning at about 5:00am, my wife and I were awakened to a hoard of sirens, both police cars and fire engines.  It's not unusual for a police chase to occur in our neighborhood; in fact, we have come to expect the semi-regular sirens and various events as living in Ogden seems to come with certain "privileges."  However, this was different; there was much more noticeable emergency response traffic.  My wife and I were like "what is going on?"&lt;br /&gt;&lt;br /&gt;I get up and look out the front window and notice a few police cars up at the corner.  Next I look out the kitchen window on the side of the house, and note that the amount of ambient light is greater than normal for the dark hour.  My neighbor's house was lit up differently than it normally would be.  "That's weird," I thought to myself.  I thought maybe they had installed a new outdoor light.&lt;br /&gt;&lt;br /&gt;I follow the light source to see a ridiculously huge blaze, flames reaching a good 3-4 stories in the air, and immediately knew someone's house was on fire.  I didn't have my contacts in, so I couldn't make out exactly whose house, but it was close, less than 50 yards.  I assumed a close neighbor's house, off the back of our property, that was currently unoccupied.&lt;br /&gt;&lt;br /&gt;I hollered at my wife to come and look, then scrambled to put my contacts in, and shoes and coat on.  I grabbed the video camera and headed outside.  The house in question was not the abandoned one that is closer to our property on the back.  It was, instead, one house further up the street.&lt;br /&gt;&lt;br /&gt;Tragically, this home was occupied by an elder lady, age 74.  We hadn't seen her for awhile, so Jess and I both hoped that the house was empty and that the woman might be living with a relative or in a nursing care facility.  With the size of the blaze, there was no chance that anyone could have survived if they hadn't gotten out immediately.&lt;br /&gt;&lt;br /&gt;Indeed, after the fire was put out, the fire fighters found the body of the elderly woman living in the house.  From the looks of it, apparently she was very close to getting to the front door.  She was in a wheel chair, however, and so I assume this likely slowed her exit.  The amount of smoke, or so I can imagine, would have been been extremely difficult to deal with if constrained to a wheel chair.&lt;br /&gt;&lt;br /&gt;The home is a complete loss.  The family of the woman obviously very shocked.  Overall, it was a very tragic and unfortunate event that you could only pray to never have happen to you or your loved ones.&lt;br /&gt;&lt;br /&gt;So, that's the story.  But I have another reason for writing today...&lt;br /&gt;&lt;br /&gt;I mentioned that I grabbed my video camera and started filming the blaze from our back yard.  I did this originally just of interest to me; I've been trying to video record various novel events just as some sort of family diary.  Only after the day had broke and all the news crews arrived that I thought the video might bring value to the news community as whole.&lt;br /&gt;&lt;br /&gt;For class, I've been reading the book &lt;a href="http://www.amazon.com/World-Flat-3-0-History-Twenty-first/dp/0312425074/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1206902478&amp;amp;sr=1-1&amp;amp;tag=t0a979f-20"&gt;The World is Flat&lt;/a&gt; by Thomas L. Friedman.  The short summary of the book is in basically how the walls of global economic barriers are being broken by technologies like the internet.  How the world is being "flattened" by various forces allowing a level of human equality, particularly in the competitive global marketplace, to exist that the world has never known.&lt;br /&gt;&lt;br /&gt;A good example of the flat world is with regards to the media and the sources of our news.  The blogosphere has become an extremely important aspect to our news, enabling any Joe Schmoe to be a self-contained media company and trustworthy news source.&lt;br /&gt;&lt;br /&gt;I strongly believe that news in the future will, in fact, have a stronger active community tone to it.  Originally, I'm sure the Associated Press was more accepting of independent news journalists.  I know independents can still get published, but it's much harder today, and really there has been a lock down in the news distribution channels such that the community feel of local news has more or less gone away.  The local news organizations, newspapers and TV, still portray a "local" feel, and I believe they honestly try to represent and serve the community.  But, I also believe these local news organizations have seen the writing on the wall and know their time is coming to an end.  The new flat world reporters, local bloggers, podcasters and video bloggers, are ultimately going to drive the news of the future.&lt;br /&gt;&lt;br /&gt;The only hope I can see is for the traditional news organizations to partner with local bloggers, basically lending their name and distribution networks to the small independent voices.  With the potential of so many voices, it becomes as important a role to sort the wheat from the chaff, so to speak.  In the future, this will be the role that media companies are relegated to.  They are already adept at making these kinds of content decisions, but in the future, the sources of news will originate from the independent blogosphere and not dominantly from their own resource pool.&lt;br /&gt;&lt;br /&gt;I thought it would be interesting to see which news stations would use my video in their reports, particularly under my explicit requirement that they give attribution for the video's source.  I spoke with the reporters from Fox 13, KSL 5, and KUTV 2, all of them were interested in possibly using the video in their spots.  I got their email addresses and sent a link to the video which I had already uploaded to my hosting server.  I gave the exact requirement that they must include a small attribution "Courtesy Adam Taft" on or under the video if they decided to use it.&lt;br /&gt;&lt;br /&gt;The video was honestly not worth any money.  It's not like I could have marketed it in any way.  It was just a typical local camcorder recording, shaky and jittery, bad lighting, poorly framed, etc.  But, even if it was perfect and I could have sold it, I wouldn't because of my somewhat utopian belief that we should all be responsible for contributing to the local news and that we should never give up the independent voice or leave all our news content in the hands of a select few corporations.&lt;br /&gt;&lt;br /&gt;Out of the three news organizations that I sent the video to, only one of them used it in their report.  Fox 13 news (our local Fox news affiliate) used a good portion of the video, probably a good 4-5 seconds of it.  You can view the report, made by reporter Kirk Yuhnke, here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.myfoxutah.com/myfox/pages/ContentDetail?contentId=6156896"&gt;http://www.myfoxutah.com/myfox/pages/ContentDetail?contentId=6156896&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was very happy with the outcome of my experiment.  It's hard to say why the other two news stations decided not to use the video.  Perhaps, since it was shot from the back of the house, it's hard to authenticate that the burning house in the video is the same as the one in the story.  Or perhaps, there was concern over the footage being perceived as too violent given the tragedy of the situation.  Of course the quality was poor too.&lt;br /&gt;&lt;br /&gt;I tend to think, however, that the notion of the flat world might have something to do with it.  Fox News in general seems to be more on the "edge" and possibly more accepting of the changing world, while the other two organizations definitely feel more conservative and traditional.  Maybe they just don't "get" it.&lt;br /&gt;&lt;br /&gt;I wonder if the requirement to give attribution for the video put them off.  I hope it did...&lt;br /&gt;&lt;br /&gt;I hope it gives them a wake up call that their world is going to quickly change, and that local independent voices are rising up.  Either they join us, or we leave them behind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-4263989403860135249?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/4263989403860135249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=4263989403860135249' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/4263989403860135249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/4263989403860135249'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/03/ogden-fire-on-jefferson-st.html' title='Ogden Fire on Jefferson St.'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-1113881618101065658</id><published>2008-03-19T20:12:00.009-06:00</published><updated>2008-03-19T22:36:30.866-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='schanze'/><category scheme='http://www.blogger.com/atom/ns#' term='utah'/><category scheme='http://www.blogger.com/atom/ns#' term='super dell'/><category scheme='http://www.blogger.com/atom/ns#' term='superdell'/><category scheme='http://www.blogger.com/atom/ns#' term='governor'/><title type='text'>Super Dell for Utah Governor?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://extras.mnginteractive.com/live/media/site297/2006/0503/20060503__ut_schanze_0503%7E1_200.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 100px;" src="http://extras.mnginteractive.com/live/media/site297/2006/0503/20060503__ut_schanze_0503%7E1_200.jpg" alt="" border="0" /&gt;&lt;/a&gt;I just got a phone call from &lt;a href="http://www.djasurvey.com/"&gt;Dan Jones&lt;/a&gt; polling operation (a very reputable survey firm here in Utah).  They were primarily focusing on the upcoming elections and politics in general.  I was surprised to hear that &lt;a href="http://en.wikipedia.org/wiki/Dell_Schanze"&gt;Super Dell Schanze&lt;/a&gt; was running for governor on the Libertarian ticket.&lt;br /&gt;&lt;br /&gt;For several years now (8 or 10 I think), I have been convinced that the &lt;a href="http://en.wikipedia.org/wiki/Libertarian_Party_%28United_States%29"&gt;Libertarian party&lt;/a&gt; is the "one true party."  If a Libertarian candidate is on the roll, I vote for him or her, which usually means my vote doesn't count for much (but whose does?).&lt;br /&gt;&lt;br /&gt;I don't know who is running the Libertarian party in Utah, but whomever it is must be on crack and should be fired for letting Super Dell on the 2008 ticket for Utah governor.  We must be awful hard up for Libertarian candidates here in Utah if Dell Schanze is the best we can dredge out of the pool.&lt;br /&gt;&lt;br /&gt;The Libertarians have a difficult enough time not coming across as kooks (much too much mis-information abounds), but now we've got Mr. Kooky himself leading the charge?  This is a serious and significant setback for the party; obviously whomever approved him doesn't have even a slightest clue how stupid and misguided people think he is.  In all likely-hood, this is a 10-20 year setback for the Libertarians in Utah!&lt;br /&gt;&lt;br /&gt;Dell Schanze and I might have similar political points of view; I don't know, never met the guy.  But, I do know that he has completely, totally and irrevocably ruined his reputation in the various stunts and dealings with the media.  The &lt;a href="http://deseretnews.com/dn/view/0,1249,600139534,00.html"&gt;media has made him look like an ass&lt;/a&gt;, exposed him for the clown that he his, and there is no way that he's going to do anything but harm to the overall objectives of the Libertarian party.&lt;br /&gt;&lt;br /&gt;It doesn't matter if Schanze was "right" or "wrong."  When it comes to politics, it's all about image and Super Dell has forever lost his in this state.  What a bad bad move by the Libertarian leadership.&lt;br /&gt;&lt;br /&gt;Prediction:  Schanze will get only one vote this November...  His own.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://dellschanze.blogspot.com/"&gt;(FYI: Super Dell Schanze's blog.)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-1113881618101065658?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/1113881618101065658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=1113881618101065658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1113881618101065658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1113881618101065658'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/03/super-dell-for-utah-governor.html' title='Super Dell for Utah Governor?'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-3309136886039941427</id><published>2008-03-12T00:00:00.000-06:00</published><updated>2008-03-12T00:07:54.643-06:00</updated><title type='text'>Useless Fact #1</title><content type='html'>I once drove alone from Fairbanks, AK to Monroe, UT, a distance of approximately 3200 miles, in 2 days 22 hours.  I likely consumed at least &lt;a href="http://www.google.com/search?num=50&amp;amp;hl=en&amp;amp;suggon=0&amp;amp;q=+320+oz+in+gallons"&gt;320 oz&lt;/a&gt;. of Mountain Dew in the process, roughly calculated by stopping for gas 8 times and drinking 40 oz of the stuff each fill-up.  I only stopped once to sleep for approximately 8 hours (early on, before the serious caffeine high hit).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-3309136886039941427?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/3309136886039941427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=3309136886039941427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3309136886039941427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/3309136886039941427'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/03/useless-fact-1.html' title='Useless Fact #1'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-1246987741103784760</id><published>2008-02-21T19:55:00.000-07:00</published><updated>2008-02-21T20:32:10.386-07:00</updated><title type='text'>xkcd == tasty</title><content type='html'>Just cleaning up my bookmarks.  These from &lt;a href="http://xkcd.com/207/"&gt;xkcd&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/323/"&gt;Ballmer Peak&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/327/"&gt;Exploits of a Mom&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/168/"&gt;Reverse Euphemisms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/178/"&gt;Not Really Into Pokemon&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/200/"&gt;Bill Nye&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/217/"&gt;E to the Pi Minus Pi&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/221/"&gt;Random Number&lt;/a&gt; - Actually wrote one of these once.&lt;br /&gt;&lt;a href="http://xkcd.com/224/"&gt;Lisp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/231/"&gt;Cat Proximity&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/245/"&gt;Floor Tiles&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/249/"&gt;Chess Photo&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/269/"&gt;TCMP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/275/"&gt;Thoughts&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/292/"&gt;Goto&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/297/"&gt;Lisp Cycles&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/307/"&gt;Excessive Quotation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/314/"&gt;Dating Pools&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-1246987741103784760?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/1246987741103784760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=1246987741103784760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1246987741103784760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/1246987741103784760'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/02/xkcd-tasty.html' title='xkcd == tasty'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-7377517807178299936</id><published>2008-02-20T20:16:00.001-07:00</published><updated>2008-02-20T20:21:46.211-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ha ha ha'/><category scheme='http://www.blogger.com/atom/ns#' term='msft'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='action figures'/><title type='text'>To All Those Who Purchase Software from Microsoft</title><content type='html'>If you've bought software from Microsoft (who hasn't?), I just thought I'd show you what your hard earned dollars have created.  That's right, it's the MSDN Source Force!  ? ? ? ?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/events/hero/"&gt;http://msdn.microsoft.com/events/hero/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/events/hero/sfbio/"&gt;http://msdn.microsoft.com/events/hero/sfbio/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you know where your money has gone.  How many millions do you think M$FT spent on this one?  I can't even fathom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-7377517807178299936?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/7377517807178299936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=7377517807178299936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7377517807178299936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7377517807178299936'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/02/to-all-those-who-purchase-software-from.html' title='To All Those Who Purchase Software from Microsoft'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-7347441406982818102</id><published>2008-02-17T13:12:00.000-07:00</published><updated>2008-02-17T13:20:10.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free'/><title type='text'>Better Than Free</title><content type='html'>Given that in the digital age, copying data of all types has become "free", there leaves very little competitive or economic reason for a content producer to "hoard" or lock up their works.  Kevin Kelly shows 6 attributes which are "better than free" for products in the new age.  These attributes, or "generatives" as he calls them, are the only means of creating value (and thus profit) for a media producer going forward.  In essence, the value of a work must (and will) be given to intangibles which cannot be copied.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kk.org/thetechnium/archives/2008/01/better_than_fre.php"&gt;http://www.kk.org/thetechnium/archives/2008/01/better_than_fre.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not only is Kevin's piece particularly insightful (at least to myself), the comments made in the blog post are also very interesting as well.  The comments are as informative and interesting as the original blog posting itself.  A very eye-opening and inspiring blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-7347441406982818102?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/7347441406982818102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=7347441406982818102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7347441406982818102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/7347441406982818102'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/02/better-than-free.html' title='Better Than Free'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-6876860750841061015</id><published>2008-02-17T11:53:00.000-07:00</published><updated>2008-02-17T12:11:45.692-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='printer'/><category scheme='http://www.blogger.com/atom/ns#' term='ink'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><title type='text'>Secret Code in Color Printers</title><content type='html'>This is a relatively old article, something I was already aware of.  But, the article is a good reminder about how the government has influenced common goods manufacturers such that our privacy is yet again compromised and eroded.&lt;br /&gt;&lt;br /&gt;In essence, printer manufacturers have been adding secret codes to every printed page on their color laser models.  This is, supposedly, to help track counterfeiters who use the laser printers to produce fake currency.  The codes are made up of tiny (millimeter or less diameter) yellow dots which in some cases even reveal the serial number of the printer unit.  It takes a blue light and a magnifying glass to even see the dots.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eff.org/press/archives/2005/10/16"&gt;http://www.eff.org/press/archives/2005/10/16&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you haven't heard of the Electronic Frontier Foundation (EFF), it's an organization that is one of the few advocates for privacy issues as it relates to new technology.  The EFF, in this case, were the ones that called out the printer manufacturers and the government agencies (the US Secret Service) responsible for this coverup.&lt;br /&gt;&lt;br /&gt;I can somewhat see why the Secret Service asked (pressured?) manufacturers into including the hidden dots (to help foil counterfeiting circles).  However, the biggest frustration would be the coverup and non-disclosure about the product feature.  Quoting EFF Senior Staff Attorney Lee Tien, "Even worse, it shows how the government and private industry make backroom deals to weaken our privacy by compromising everyday equipment like printers."  In my mind, that's the real concern here.&lt;br /&gt;&lt;br /&gt;Besides, real counterfeit operations are no doubt already aware of the problem and likely are using techniques that produce their wares without a common off-the-shelf laser printer.  It's likely only the first timer counterfeiters, not the larger more organized ones, that would be caught by the technique.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-6876860750841061015?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/6876860750841061015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=6876860750841061015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6876860750841061015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6876860750841061015'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/02/secret-code-in-color-printers.html' title='Secret Code in Color Printers'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8369819750228323578.post-6733023385766949239</id><published>2008-01-12T11:26:00.000-07:00</published><updated>2008-01-12T12:39:40.036-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='interviewing'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='programmer'/><title type='text'>How to Recognize a Good Programmer</title><content type='html'>I just recently interviewed for two jobs.  I did this mostly for "practice," just to somewhat test how my resume stands up, what interview questions are common, etc.  I'm sorry to say (actually, not very sorry at all) that I was not offered a position at either of the two jobs.  Actually, I am a little disappointed that I didn't get an offer, because I tend to believe that I have a decent resume and background experience that would likely benefit most any technology hiring company.&lt;br /&gt;&lt;br /&gt;Before I continue my posting (below), I'm including a link to an inspired article I just read called "&lt;a href="http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer"&gt;How to Recognise a Good Programmer&lt;/a&gt;" (note the UK English spelling of recognise).  This is, in my opinion, a must read for hiring a programmer.&lt;br /&gt;&lt;br /&gt;It seemed in my two interviews, the basic deficiency I had was that the language I touted to be strong at (Java), I was not able to quickly identify common coding errors in printed source code, or not able to describe an ideal algorithm to solve grossly complex unrealistic problems.&lt;br /&gt;&lt;br /&gt;In the first interview, I got the typical "gang up" group interview by fellows who would be my peers, but also from a couple of supervisors.  The group of four basically groped me for the typical interview questions about my background, etc.  They even got to asking some very specific technology questions (like Oracle specific questions), which was OK but a little overboard.&lt;br /&gt;&lt;br /&gt;Of course, after the group grope, they left me with the staff "Java guru" who would "grill" me on Java for a "couple of hours."  He gave me a test to fill out and said he'd be back in 20 minutes.  The test was very long, more like a 2 hour test, and he returned in 10 minutes instead of 20.  Needless to say, I didn't have very much of the test done.&lt;br /&gt;&lt;br /&gt;The first questions were meant to "trick" me.  You know, like with obscure syntax, or places where an array would be indexed out of bounds.  For example:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;String s[][] = new String[2][2];&lt;br /&gt;...&lt;br /&gt;s[1][2] = "foo";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Of course, the problem here is that index 2 is not valid for the array.  But, if you're looking at tons of code and the question is asking you generically "what will the output be," you might very easily overlook this problem.  The brain doesn't immediately recognize that I'm trying to access something outside of the defined parameters.&lt;br /&gt;&lt;br /&gt;A good programmer would go out of his way to ensure that this scenario never occurs.  If I explicitly define an array, I'm quite consciously going to remember not to exceed the array's limitations.  Or, if I knew that an array out of bounds problem was likely, I would choose a different data structure entirely.&lt;br /&gt;&lt;br /&gt;The fact that I "missed" this question (and others like it) tells me two things:  a) I obviously rely too much on good coding practices and/or good IDEs (like Eclipse) to help avoid these types of problems, such that I don't intrinsictly recognize the problem just simply by looking at some printed code; b) I obviously need to practice a little more in reading through other people's poorly written code, as I likely have too little experience fixing other people's code.&lt;br /&gt;&lt;br /&gt;The second interview was a bit more classy, though I still came away with the same thoughts.  The first question was "write code to take a string and remove the vowels from it."  We were using a whiteboard (not a traditional development environment).&lt;br /&gt;&lt;br /&gt;My gut reaction to this is, you've got to be kidding me.  Of course, there are likely 1000 different approaches to this problem and the interviewer is looking for the "right" solution.&lt;br /&gt;&lt;br /&gt;Maybe thinking too "low level", I simply create an array out of the string, iterated through the array and pushed the non-vowels into a new string.  A perfect solution in C, for example.  No no, in Java we have many other ways to do this, including regular expressions, substring matching, using collection comparisons, etc.  Fundamentally, however, at the "low level" these higher level methods do exactly what my solution did.  I'm half tempted to benchmark my low level solution, just to give me some satisfaction that it would have potentially beat the "high level" (fewer lines of code) solution the interviewer had in mind as "correct."&lt;br /&gt;&lt;br /&gt;Short simple elegant code is great.  KISS is my motto.  His preferred solution (using regular expressions) was of course fine, simple, easy to use, elegant.  However, that doesn't mean that the one I came up with, without any help of an appropriate Javadoc, isn't as good in certain contexts as his.&lt;br /&gt;&lt;br /&gt;Apparently for question 2, I "nailed" it.  In his second scenario, I was to write (on the white-board) a number generator that randomly dispersed integers with a minimum, maximum and average, such that at the end of a variable number of iterations, the actual average of the numbers returned matched closely with the supplied desired average.&lt;br /&gt;&lt;br /&gt;I honestly didn't think this was too hard of a problem, but apparently everyone else he interviewed struggled with it.  I simply generated a random number either above or below the desired average depending on the current running average.  If my current running average was below the targeted average, I would return a random number between the target and the max.  Over a lot of iterations, this algorithm obviously produces numbers that will come very close to the target average.&lt;br /&gt;&lt;br /&gt;Ya, so like I said, I "nailed" this solution.  He said he was confused because he couldn't understand how I had flubbed the first question so bad and answered the second one so good.  I was confused as to what he was confused about, as both my solutions (to me) seemed fine and appropriate given the lack of any more context.&lt;br /&gt;&lt;br /&gt;So, given that I was now 1 for 2, he wanted to ask one more final question.  Basically the scenario is that you have 100 million records each on four machines.  You must sort the records and distribute them so that the A-F records land on machine 1, G-M goes to machine 2, etc.  The original records are unsorted in a text file.&lt;br /&gt;&lt;br /&gt;I honestly didn't come up with a very good solution; not especially happy with my answers here.  But, in general, I guess my feeling is that for a problem like this, I would likely be writing the code multiple times isolating the bottlenecks along the way instead of trying to over optimize a certain potential problem without having the statistics to back whether it's a problem or not.&lt;br /&gt;&lt;br /&gt;I suggested that I would like to create some temporary files on the local machines, such that all the A records were in a temporary file.  Every machine would end up with A-Z temporary record sets, which would then be transferred over to the other machines (using traditional file transfer protocols (as opposed to Java based sockets)).&lt;br /&gt;&lt;br /&gt;No no, that's no good (apparently) because we are using the hard drives and not using the network in the first phase, and only using the network in the second stage.  How can we saturate both the network and the disks at the same time?  Well of course, my answer, we break these temp files into smaller chunks and spin off additional units of work.  Thus, we can optimize how big the temporary files are versus the network latency.&lt;br /&gt;&lt;br /&gt;No, this is still no good (apparently).  What he's really wanting is to not write temporary files at all and just parse the main 100MM records and send the individual record on to each machine directly.&lt;br /&gt;&lt;br /&gt;I about fell over.  Wha??  You're kidding, right?&lt;br /&gt;&lt;br /&gt;The most positive thing I could say to that was "my gut reaction tells me that sending a single record at a time over the network is not as robust or performing as sending a larger set, say 10,000 at a time).  I'm feeling much more comfortable in sending a smaller amount of larger data than a larger amount of smaller data.  He's suggesting to send 100,000,000 x 4 machines individual TCP records across the network.&lt;br /&gt;&lt;br /&gt;Just the simple TCP overhead of this seems pretty silly in my mind.  In this scenario, I would much rather completely stuff full a TCP packet payload than to send a small packet through.  I just don't "get" what he thinks is ideal.&lt;br /&gt;&lt;br /&gt;Further, I apparently didn't address any of the nuances of reading from the disk, and sending the packet on the network.  That is, I didn't specify that I would "buffer" the disk reads in any way, and so my "architecture" wasn't the best.  For example, maybe the network is slower than the disk, and as such, now my disk read is blocking on the network call.&lt;br /&gt;&lt;br /&gt;Well, first of all, I half assumed that using a BufferedReader would be appropriate, and yes I didn't specify that.  But secondly, it doesn't really matter if the network is slower than the disk and the disk has to block, because fundamentally the network card is serializing outbound packets at the hardware level.  It's not like the network card is going to send any faster than it can just because we have buffered our disk reads.&lt;br /&gt;&lt;br /&gt;I think ultimately he wanted me to read a record from disk, evaluate which machine to send it to, put the record in a temporary buffer, and have multiple threads pulling from the buffer to send out to the appropriate machines.  I.e. a straight producer/consumer type pattern.  I can agree with this, seems like a logical thing to do.&lt;br /&gt;&lt;br /&gt;But, I guess it's just the approach that I take issue with.  It's not like I can argue with him about the fact that sending smaller packets has more overhead than sending larger packets.  In his mind, there was no additional overhead associated with this.  What he really wanted was for me to talk about what happens between the disk read and the sending of the network packet.  How about just stating that's what you're wanting to talk about instead of leaving me out focusing on other areas?&lt;br /&gt;&lt;br /&gt;Again, this is just a stupid question in general, because I can pretty much guarantee that some bottleneck would be found that wasn't even discussed or perceived during this little "exercise."&lt;br /&gt;&lt;br /&gt;A long blog posting, I know.  Sorry.  I guess the point is simply that &lt;a href="http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer"&gt;the above article&lt;/a&gt; got me reflecting on my recent job interviews and how I believe I am a "good programmer" by definition of the article.  The challenge for me, as I refine and add to my resume and experience, is to be able to portray that I'm am indeed a "good programmer."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369819750228323578-6733023385766949239?l=adamtaft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamtaft.blogspot.com/feeds/6733023385766949239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8369819750228323578&amp;postID=6733023385766949239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6733023385766949239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8369819750228323578/posts/default/6733023385766949239'/><link rel='alternate' type='text/html' href='http://adamtaft.blogspot.com/2008/01/how-to-recognize-good-programmer.html' title='How to Recognize a Good Programmer'/><author><name>Adam Taft</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
