Blog

  • MakerBot Thing-o-Matic 3D Printer Assembly Photographs

    Hello, Slashdot. 🙂 After 12 hours of punishment, everything seems to be back up and responsive. Enjoy the pictures!

    [Skip to the HD slideshow on Flickr.]

    After an estimated 16 man-hour assembly effort, my brand new MakerBot Thing-o-Matic is fully assembled. The extruder motor is bad so I can’t print quite yet, but assembly is complete and the MakerBot support folks have been cool about shipping the replacement part. The new motor should arrive early next week.

    The Thing-o-Matic is an Open Source 3D printer very similar to MakerBot’s earlier models (such as the Cupcake) as well as the RepRap, though MakerBot’s designs clearly depart from their RepRap origins. This is an extremely abbreviated set of high-level assembly pictures for those curious about the process. Assuming you already have a healthy assortment of common hand tools, the Thing-o-Matic “kit” version will set you back about $1,300 (USD).

    The assembly process is intense, to put it lightly. Instructions are generally correct and straightforward 90% of the time, but given the intimidating complexity of the project, insane number of parts and dexterity required for some of the assemblies, simply locating the correct widget can sometimes be challenging. As the online assembly guide progresses, the instructions increasingly rely on your prior knowledge of repetitious concepts. We’re talking sanding, soldering, cutting, punching, scrubbing, gluing, and screwing hundreds of bolt/nut combinations. Only attempt this project if you’re the type of person that wakes up with ideas on the order of, “I think I’ll build an air conditioner this weekend.”, and actually completes the task. Like I said: intense.

    [See the high-res slideshow version on Flickr instead.]

    [slickr-flickr search=”makerbot” sort=”date” type=”slideshow” flickr_link=”on”]

    [slickr-flickr search=”makerbot” sort=”date” items=”50″]

  • AmericanExpress.com: Tip On Configuring Your Web App

    For all you web application developers, I’d like to briefly note the following stack trace I received from the American Express website while clicking around:

    And here is the same trace in plain-text format:

    JSPG0036E: Failed to find resource /cardcenter/common/interstitial.jsp

    Root Cause:

    java.io.FileNotFoundException: JSPG0036E: Failed to find resource /cardcenter/common/interstitial.jsp
    	at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:322)
    	at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.handleRequest(AbstractJSPExtensionProcessor.java:284)
    	at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3548)
    	at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
    	at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:818)
    	at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478)
    	at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:126)
    	at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
    	at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
    	at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
    	at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
    	at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    	at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    	at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
    	at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
    	at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
    	at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
    	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)

    Most developers might say, “So what? You just clicked on a broken link somewhere. Go back and go about your business.”

    And that’s exactly what I did, since I just wanted to pay a credit card bill. But what if “my business” had been to gather forensic information about potential American Express website vulnerabilities? A stack trace may look innocuous, but we can be almost certain that this HTTP request was handled by a Java servlet. It uses Java Server Pages (JSPs) for view templating, and the application appears to be running on IBM WebSphere. Not only this, but we have line numbers for each stack frame, and the CSS appears to be some form of default styling.

    Large institutions such as AmEx tend to not upgrade to the latest versions of development libraries until a future interal release cycle where the new version(s) can be internally vetted, tested, QA’d and put through a due diligence process. (Or for older apps, dependencies might not be upgraded at all.) This makes stack traces extremely valuable to an attacker. Why? Because I can obtain all historical versions of technologies such as WebSphere, and map every specific call in the stack trace back to the code until I find the software versions where the line numbers match up. The attacker should at least be able to narrow down the software version numbers to a range, if not the specific release version. After gathering this information, the attacker may choose to fixate on the older packages, and consult databases of vulnerabilities in legacy software until a vulnerability is discovered.

    Long story short: turn off the rendering of stack traces in public-facing production applications. They’re convenient for validation of production errors, yes, but you don’t know what they may reveal.

  • Introducing RailRoady: The Rails 3 UML Diagram Generator

    I just released the first production version of the RailRoady gem about 5 minutes ago. If you’re a developer on Rail 3, you’ll definitely want to check it out. No more Vizio class diagrams! (RubyFlow announcement.)

  • LaTeX Broken On MacPort “texlive” Update

    I spent about 4 hours today troubleshooting a stupid, stupid issue with the “texlive +full” package as provided by MacPorts, which is required to run certain GUI LaTeX editors such as TeXShop. Several days ago I ran an innocuous-looking…

    preston$ sudo port sync
    preston$ sudo port upgrade outdated

    …and amongst many things that updated, texlive was one of them. Unfortunately, running tools such as the command-line “latex” command or GUIs such as TeXShop started giving me the following error:

    This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010/MacPorts 2010_0)
    restricted \write18 enabled.
    —! /opt/local/var/db/texmf/web2c/pdftex/pdflatex.fmt doesn’t match pdftex.pool
    (Fatal format file error; I’m stymied)

    After much fruitless searching and hair pulling, I stumbled upon this ticket that notes the solution as:

    preston$ sudo fmtutil-sys –all

    After running this, LaTeX seems to work properly again. Sheesh.

    (Note to product developers: I would personally pay at least $50 for a simple, clean, stand-alone OS X app that does LaTeX really well. TeXShop and TextMate both do a good job, but I’d really like a 5-star “just works” editor that doesn’t install a bunch of system-level stuff like MacTeX. Just sayin’. 🙂 )

  • Kindle 3G Upgrade: Mini Review, Recommendations

    The "Home", "Menu" and "Back" buttons are now to the right of the keyboard.

    I’ve previously expressed my love for the Kindle family of devices, and on a whim decided to upgrade from the Kindle 2 to the new Kindle 3G with 3G and wifi. For others contemplating the upgrade, here’s what you need to know:

    Pros

    • The new button layout is way better. Next/Previous button are on both sides of the screen, and Home and Menu buttons have been moved to the keyboard area, along with a new direction pad (“d-pad”) design that is easier to use, albeit different.
    • Smaller device footprint. Kindle 3 feels more compact and portable than Kindle 2.
    • The screen update time is noticibly better, but only slightly so. It’s definitely noticable and a welcome improvement, but don’t expect LCD-level performance here. It’s still e-ink.
    • Wifi! Not that on the more expensive model, you have both wifi support as well as the free 3G access.

    Cons

    "Next" and "Previous" buttons are now on BOTH sides of the device. A welcome change!
    • $189 for a bunch of marginal upgrades is a tough sell.
    • Keyboard is still ghetto. It feels like typing on a 1990’s scientific calculator.
    • The Next/Previous buttons depress easier than before, but they’re also smaller and don’t have any nubs to identify the button by touch. This seems stupid.
    • Sharper screen. It’s a subtle improvement, but definitely feels crisper.

    Recommendations

    • New users should go for it, and light readers should be perfectly fine with the Wifi-only $139 model.
    • Existing users with heavy usage patterns (at least an hour a day on average) should go for it. You’ll love the small speed improvements when highlighting and flipping pages.
    • Existing Kindle 2 owners with light usage patterns should skip this revision. Future models will certainly see further improvements and lower costs.
  • Spring 2011 ASU Webapp Course

    In Spring 2011, the College of Technology and Innovation at the ASU Polytechnic campus will again be offering CST 533/494: Database-Centric Enterprise Application Development. The calendar is not yet out, but should soon be listed as a Thursday evening class: one night per week for the Spring semester. The course will be available at both undergraduate and graduate levels for 3 credit hours.
    The course essentially teaches dynamic web application architecture concepts and development processes using Ruby (w/Rails), Java (w/Spring, Eclipse, and Tomcat), SQLite, MySQL, and other industry favorite technologies as a means to the learning process.
    • New technologists: If you’re looking for training and experience in this area, definitely check out the ASU Polytechnic campus.
    • Old hats: If you are an “old hat” software engineer just looking for the credit hours, this may provide a fun, project-oriented opportunity towards working on your degree.
    • Companies: I am always on the lookout for opportunities to expose students to industry perspectives. If you’re interested in any sort of corporate sponsorship or collaboration, please contact me directly.
  • Amazon Kindle Customer Service Experience

    Kindle 2 with M-Edge Leather Platform Jacket and optional e-Luminator 2 book light.

    About a month ago I noticed the top of my Kindle 2’s e-ink display starting to go out. Starting from the top of the screen, row-by-row slowly ceased to display “ink” until I could no longer see the battery indicator area. I could surely have lived with this, but given that the device is less than a year old I gave the Kindle support number a call.

    I purchase a lot from Amazon and have used pretty much every service they offer, including long-time Prime delivery service membership and I’m fairly certain that my Amazon book purchases would put me in their 99th percentile of perfered consumers–so perhaps the call handler knew to treat me better than the average Joe–but regardless, the process was a true 5-star experience. Abbreviated transscript of the call:

    Me: The screen on my Kindle 2 is going out.

    Rep: I’m very sorry to hear that. <additional scripted apologies designed to make me feel better> How about we overnight you a replacement?

    Me: Srsly?

    Rep: Sure. It’ll be delivered tomorrow morning.

    Me: Sweet!

    And that was it. The replacement arrived the next morning as stated. It took me less than 5 minutes total to deal with the issue. For a unit of anything under warrantee this is the level of service I would hope for. Bravo, Amazon!

  • TOMS Shoes

    I recently won one of a thousand pairs of TOMS shoes courtesy of a joint promotion in conjunction with Gowalla and AT&T to celebrate TOMS 1 millionth “shoe drop”. (It’s basically like the “One Laptop Per Child” program, but for shoes.)

    From the TOMS website:

    “TOMS Shoes was founded on a simple premise: With every pair you purchase, TOMS will give a pair of new shoes to a child in need. One for One. Using the purchasing power of individuals to benefit the greater good is what we’re all about. The TOMS mission transforms our customers into benefactors, which allows us to grow a truly sustainable business rather than depending on fundraising for support.”

    Thanks to TOMS, AT&T and Gowalla for the free shoes and I wish you the best of luck in the program!

  • MakerBot Thing-o-Matic Pre-Order

    I’m super excited to have just pre-ordered a Thing-o-Matic from MakerBot Industries. It’s a fully automatic 3D printer (aka CNC rapid prototyper) that can also be outfitted with different material nosels (aka extruders) to draw in 2D, print designs for circuit board, and even dispense frosting and peanut butter. (Not joking.) Here’s a great example of what you can do with it. (Skip to 3:00 for the cool stuff.)

    Here’s another video of the machine printing parts for copies of RepRap Mendel, another F/OSS CNC RP machine design:

    This is a new model that won’t ship won’t ship until November 2010, unfortunately, but I’m sure it’ll take a while to get some cool designs done, anyway. The idea here is that if anyone else would like their own desktop 3D printer (RepRap, CupCake, Thing-o-Matic or other F/OSS design), you’ll be able to print about 50% of the parts for it on this original “parent” machine and order your own electronics and other assembly hardware online.  🙂

    *Giddy with excitement.*

  • Upgrading From Ruby 1.9.1 to Ruby 1.9.2

    I’ve spent half the day so far inbeded in the furious stressful upgrade process of a handful of Ubuntu Linux 10.04 and Mac OS X Snow Leopard systems from Ruby 1.9.1 to Ruby 1.9.2. I haven’t even gotten to the Rails 3.0.0 stuff yet: just the baseline Ruby installation. I’ve gone through the upgrade process on both types of systems so far and the base issues have been the same. Here’s a common issue that many people are running into:

    preston$ gem1.9

    /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems/source_index.rb:68:in `installed_spec_directories’: undefined method `path’ for Gem:Module (NoMethodError)
    from /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems/source_index.rb:58:in `from_installed_gems’
    from /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems.rb:883:in `source_index’
    from /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems/gem_path_searcher.rb:81:in `init_gemspecs’
    from /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems/gem_path_searcher.rb:13:in `initialize’
    from /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems.rb:841:in `new’
    from /opt/local/lib/ruby1.9/site_ruby/1.9.1/rubygems.rb:841:in `block in searcher’
    from <internal:prelude>:10:in `synchronize’
    <…and so on…>

    Assuming you’re upgrading from a previous Ruby installation, note that the “site_ruby” directories are no longer used, and will eff up your 1.9.2 installation if you fail to delete them after the install. On OS X, run:

    sudo rm -rf /opt/local/lib/ruby1.9/site_ruby/

    On Ubuntu Linux 10.04, run:

    rm -rf /usr/local/lib/ruby/site_ruby/

    …to correct this issue. All note that you may see errors such as this:

    root@li92-132:~# rake –version

    /usr/local/lib/ruby/1.9.1/rubygems.rb:340:in `bin_path’: can’t find executable rake for rake-0.8.7 (Gem::Exception)

    from /usr/local/bin/rake:19:in `<main>’

    …despite have a rake gem installed. Apparently 1.9.2 comes with a version of rake internally, but is unable to find it for some reason relating to the rake.gemspec file. Remove the file to fix this issue. On Ubuntu Linux 10.04, run:
    rm /usr/local/lib/ruby/gems/1.9.1/specifications/rake.gemspec
    Notice the “1.9.1” path of the PATH. Yeah.. it’s weird. But for compatibility reasons your 1.9.2 installation will continue to use a path with 1.9.1. To quote the Ruby 1.9.2 FAQ page:
    The standard library is installed in /usr/local/lib/ruby/1.9.1
    This version number is “library compatibility version”. Ruby 1.9.2 is mostly compatible with the 1.9.1, so its library is installed in the directory.
    I’m sure there’s a wonderful technical reason for this, but it’s still misleading and confusing as hell. I ended up manually deleting a bunch of stuff I shouldn’t have because I thought I was innocently “cleaning up” after the old version. Whatever. Additional suggestions:
    • Just to keep things clean, you may also want to remove your old Ruby 1.8.x builds. (I recommend doing so unless you have older apps that haven’t moved to 1.9.x yet.)
    • Phusion Passenger seems to work fine on Ubuntu 10.04 with the latest version of Apache 2 as of this writing, though don’t forget to recompile, reinstall, reconfigure and restart apache2 when you do so.
    • Check if you still need rack v1.0.1 installed (for older Rails app) before nuking everything. 🙁
    I need a beer!