From TWAIN Device to Web Application

ScreenshotAt my place of employment we recently purchased a piece of software to design and print identification cards.  We were planning to use the software to make employee badges.  I did not have an opportunity to try out the software in advance because no trial version was offered.  However, the vendor made a good sales pitch, so I shelled out roughly a thousand dollars to purchase the software.

It turned out to be one of the most difficult-to-learn software packages I have ever attempted to use.  After laboring for  five hours, I still had not figured out how to print a single ID card.  I’m not the sharpest knife in the drawer, but I’m not the dullest, either.  There had to be a better solution.  Not wanting to spend more money, I decided to build the software myself.

Continue reading

DIY Network Attached Storage

Today I spent the afternoon building a NAS (network attached storage) appliance.  I have been looking for a better place to store virtual machine backups, and this seems like a good solution.

I started with a 2U rackmount case, the Norco RPC-230.  I like this particular case for several reasons: First, it has a shallow depth that allows it to be mounted without rails, and it is sturdy enough that it won’t sag.  Secondly, being 2U allows for a standard off-the-shelf power supply unit.  I do not like scrambling to hunt down an odd-ball power supply when my server goes down.

I went with a fan-less mini-itx motherboard from Asus that comes with a dual-core Intel Atom processor already integrated.  This is one of the few Atom boards that met my three qualifications:  four SATA ports, no fans, and a decent price.

For storage I selected two identical Seagate 1 Terabyte drives. The data on these will be mirrored (RAID 1).

I finished it by installing the fabulous and open-source FreeNAS version 8 on a 8 GB USB  thumb drive, freeing the entire RAID pair to be used for storage.

For reference, here is a list of all the hardware for the appliance, cleverly linked to my Amazon affiliate account:

My first Google Chrome application

Light BulbI am a recent convert to the Google Chrome web browser.  In my opinion, the speed and simplicity of this browser is unmatched by the other popular choices.  Although Internet Explorer 9 and Firefox 4 are fairly good as well, Chrome is still my favorite browser on both the Linux and Windows platforms.

I also recently discovered the Chrome Web Store and became interested in developing Chrome applications.  To get an idea of what is required, I ported an old web based tool for calculating electricity cost from a PHP application to a Javascript-based Chrome application.   Since it is a “packaged” Chrome application, once you have it installed you can use it even when you are not connected to the Internet.  The application is located here.

My favorite web browser becomes my favorite PDF viewer

For some time now I have been displeased with Adobe Reader.  First of all, it seems bloated and launches slower than other PDF viewers I have used.  To make up for the slow speed, recent versions also install a background process in Windows that presumably loads part of the application in advance.  Little displeases me more than a software application that includes a background process, with the obvious exception of  anti-virus programs that NEED to run in the background.

Lately I have been using the Google Chrome web browser more and more and my old favorite, Firefox, less and less.  Unlike other web browsers, Chrome has a built-in PDF viewer, eliminating the need for the Adobe Reader plug-in.   This makes viewing PDFs faster and more trouble-free than relying on the plug-in.  I have never encountered a PDF document that did not display correctly in Chrome.

A few days ago it struck me that Chrome could be used to view PDF documents on my computer as easily as those on the web.  All you have to do is set it as the default application for opening PDF documents.  To do this in Windows 7, RIGHT-click on any PDF file and select Open With > Choose default program.  A screen will appear with a list of programs.  Select Chrome from this list (you may have to browse for it), check the box beside “Always use this program to open this kind of file”, and then click OK.  In the future, Chrome will be your default PDF viewer.  These steps will be very similar in Windows XP or Vista.

Linked style sheet woes with Zend Framework

One of the first frustrations I ran into with Zend framework was with linking images and style sheets to a web site. In my pre-Zend days of web programming, I’d just use a relative link, such as the following:

<link rel='stylesheet' href='theme/style.css' type='text/css' media='all' />

This link works fine within the default controller and action. However, when a different controller and/or action is specified, the URL changes, and the relative link breaks.  In search for an answer, some programmers suggested that the solution is to simply add a slash at the beginning of the href to make the link absolute, like so:

<link rel='stylesheet' href='/theme/style.css' type='text/css' media='all' />

Although this may work, it still breaks if you ever store the website in a sub-directory as opposed to the root of the webserver’s public directory.  In my case, this solution was a non-starter, as my development site uses sub-directories for each project.  I use a symbolic link to link a particular sub-directory on my development site to each of the Zend projects “public” directories.

dev.mydomain.com/project1    (sym-linked to /zendapps/project1/public)
dev.mydomain.com/project2    (sym-linked to /zendapps/project2/public)
dev.mydomain.com/project3   (sym-linked to /zendapps/project3/public)

Using a non-changing absolute link would cause the code to break as soon as it is copied to my production server, where each project resides by itself in the webserver’s root directory.

The real solution to this problem is to use Zend’s built-in baseUrl() view helper.  Then your code will look like this:

<link rel='stylesheet' href='<?php echo $this->baseUrl(); ?>/theme/style.css' type='text/css' media='all' />

Doing it this way makes your code work without modification regardless of where your project ends up.  I use this anytime I’m linking to a resource (image, javascript file, or CSS file) in my Zend project’s public directory.

A green computer … and a matching font

Fanless Mini-ITX ComputerGone are the days when you could save a bundle of money building a computer from parts.  However, there are still a few situations when it can make sense to do so.

I recently had the privilege of building a computer at my place of employment, using the following parts:

http://www.mini-box.com/M350-enclosure-with-picoPSU-80-and-60W-adapter
http://www.mini-box.com/D510MO-mini-ITX-Intel
http://www.mini-box.com/2GB-DDR2-Memory
http://www.newegg.com/Product/Product.aspx?Item=N82E16822136387

The result is an inexpensive, fan-less computer that can be mounted on a wall or on the back of an LCD.   The power usage of this computer ranges from 15 to 21 watts depending on its load, so I stand to save $30-$40 a year in electricity when compared with a more typical computer that consumes 50 to 80 watts (I leave my computer running 24/7).

There are prebuilt computers that are similar in price, such as the Zotac MAG, but they use proprietary parts.  That means if something breaks outside of warranty, you may find it difficult or impossible to find replacement parts.   With a standard mini-itx system like this one, parts availability should not be a problem for several years.

Speaking of “green”: did you know that you can save money on ink simply by using a different font when composing documents for printing? According to this article on Yahoo! News,  a font with thin lines such as Century Gothic can use up to 30% less ink than popular fonts such as Arial.  If you’re using Linux instead of Windows, you may not find either one of these in the list of fonts available to you.  However, the concept still applies; just look for a font with thin lines.

Install and use a LAMP Server on Ubuntu

If you’ve been wishing that you could install a web server on your Ubuntu PC, you will be pleased to find out that you can install one very easily. All you will need is an Internet connection, and a bit of time. I hope this guide is helpful.

Here’s how to install: Open Synaptic Package Manager. Choose Edit > Mark Packages by Task. Scroll down and check the box beside “LAMP Server.” This will mark apache2, PHP, and MySQL for installation. Apply the changes. You will be prompted for some configuration information. That’s it! Punch http://localhost into your browser’s address box to test your installation.

Now I suppose you want to add some files. The server’s root directory is /var/www. If you navigate there with your file browser you will see the files, and even be able to open them with gedit, but you will not be able to edit them. This is because the directory is owned by root. There are multiple ways to work with this. You can run Nautilus from a terminal (sudo nautilus /var/www), or even create a launcher on your desktop (for this command: gksudo nautilus /var/www). However, you will probably find it more convenient to change the permissions of the /var/www folder. To do this, run Nautilus as root (sudo nautilus), navigate to the /var folder and right-click on the www folder. Give yourself access under the permissions tab. Now you can create and delete files without running your file browser as root.

Feedback welcome!

Oh by the way, you can access the server from another computer on the network as well, provided that your firewall allows incoming traffic on  port 80. Just enter http://your-ip, where your-ip is the ip address of the computer that hosts the server.

10 special-purpose Linux distributions

One of the strengths of Linux and open-source in general is that it is infinitely customizable, allowing it to be used to power anything from a phone to a mainframe.  In addition, there are a wide variety of distributions available, some of which are targeted at specific tasks.  Ken Hess has compiled a valuable list of 10 special-purpose Linux distributions. You can find his list at:

http://www.daniweb.com/news/story239006.html

Open Source Firewalls

I’ve been on the look-out for open source firewall software recently.  For your benefit, here’s a list of what I’ve found so far:

pfSense – http://www.pfsense.com/

m0n0wall – http://m0n0.ch/wall/

IPCop – http://sourceforge.net/apps/trac/ipcop/wiki

Untangle – http://www.untangle.com/

Zeroshell – http://www.zeroshell.net/eng/

I also ran across a very interesting web-based SSL VPN:

OpenVPN ALS (a.k.a as Adito) – http://sourceforge.net/projects/openvpn-als/