Gadgets Galore - The iPad would just be a small incemental add

The Apple iPad was announced yesterday and I do believe the hype was so insane leading up to the announcement that Steve Jobs could have introduced a semi-transparent 1/4 inch laser screen that ran for a month on full charge and people would still have made fun of the name. I kind of think the first generation of the iPad should just have been called the iPod Touch XL as it more like the Touch and less like the iPhone.

The day after led to all the news and I came across an interesting AP article that stated

… the average household owns about 24 electronic gadgets …

and this got me thinking about how many we own in our household of 3 people. I came up with the following list of over 40 items that are used on regular or semi-regular basis and are likely plugged-in sucking power.

The List

I’ll list the items in the home theater and summarize the others.

Home Theater: 10 Gadgets

  1. Sony Receiver & Bose Surround Sound Speakers (2001)
  2. Sony Plasma TV –Living Room (2003)
  3. Sony DVD player (2004)
  4. TiVo HD* (2007)
  5. Sony PS3* (2006)
  6. Apple AppleTV* (2007)
  7. Actiontec Cable/Moca Modem* (2007)
  8. Linksys Simultaneous Dual Band Router* (2009)
  9. Western Digital NAS* (2008)
  10. Logitech Universal Remote (2008)

Arguably, the receiver and speakers are 2 items, but the one is really not useful without the other in this case.

Audio Players: 4 Gadgets
We currently have 3 working iPods (Video, Mini, Shuffle) not counting the iPhone. The Mini and Shuffle aren’t used much anymore. The Video is hooked up to the screen in the car to provide hours of Handy Manny to my daughter on long car trips. We also have a Delphi Portable XM Satellite receiver that my wife uses at work.

Cameras: 5 Gadgets
We have 5MB and 8MB point and shoot digital cameras. I received a Canon 20D DSLR for Christmas in 2005 and added an eyeFi Wireless SD card (with CF adapter) a couple years later. We added an HDD Digital Camcorder before my daughter was born.

Kitchen: 4 Gadgets
In the kitchen is set top box hooked up to TV with a Mac Mini connected to network via a Netgear MOCA bridge.

Bedrooms: 7 Gadgets
We have 2 bedrooms but have kept to keep one of them free of television, and at some point will probably remove the television from the second one as well. But currently across the two bedrooms we have Desktop computer & printer, set top box, TV, and Slingbox. To have the computer and slingbox connected to the network I use Linksys Dual Band Ethernet Wireless Bridge and Slink Ethernet over Power bridge.

Other Entertainment: 4 Gadgets
I purchased an Amazon Kindle for my wife this past Christmas. The Kindle is amazingly better in functionality than the Sony eReader purchased 2 years ago. The eReader isn’t used anymore and isn’t in this list. The other items include 2 Apple Airport Expresses purchased about 3 years apart. One was for the home theater long before the AppleTV was added and the other was for bedroom and printer. Finally, we have a Brookstone wireless speaker that is more often hooked up to one of the Airports now.

Portable Game Stations: 2 Gadgets
A Sony PSP and Nintendo DS.

Phones: 3 Gadgets
We still have regular landlines and 2 smart phones, an Apple iPhone 3G and Samsung Blackjack II.

Work Related: 4 Gadgets
My wife and I each have a laptop provided by our employers and so maybe these not count towards the list. I also have a Linksys Travel Router and the all important iGo power adapter with 8 or so different tips; something has to be able to provide power to all the devices.

Cars: 2+ Gadgets
Add to this our two cars that both have built-in GPS and one that has a DVD player with back seat screen and XM satellite radio.

So based on this number, adding an iPad to the household is only a 2% increase in the number of gadgetry we have to deal with.

Connected Devices

Going through that list of gadgets and counting the number of items that can connect to the local network or Internet via Ethernet, MOCA, or 802.11 came to 19 devices. Having so many devices is part of why I have tried to upgrade and replace network devices more than anything else. The Ethernet over Powerline worked for the Slingbox in one bedroom but not the desktop in another room. The desktop got the Dual Band Ethernet Bridge and this performs pretty well. The Mac Mini was also using wireless and wanted to see if I could do better. I have Verizon FIOS and they use MOCA for the set top boxes to connect to the network and receive programming guide data as well as Video On Demand. I started looking at MOCA bridges and added a Netgear device for the Mac Mini to connect to the router. So I have pretty much tried every major consumer based physical medium for local area networks.

Replacing Gadgets

Most of the items in this list were purchased over the course of 10 years so it’s not like we went hog wild in a short period of time. I have generally been lucky with electronics and have had them run as long as needed. The only exception seems to be wireless routers, Logitech remotes, and of course mobile phones. Over the course of the 10 years I had a wired router, 1 wireless B, 3 wireless G, and 2 wireless N routers. The switch from B to G to N to N (simultaneous dual band) was more about speed increases than failure. The Logitech remotes on the other hand… I think I had 3 that hit the wood floor and failed. The mobile phone changes consisted of 9 phones over 12 years. 4 changes were due to service provider changes. 3 were due to failure or loss. Only 2 were explicitly for something new. Switching to AT&T to get the iPhone was for something new.

Unplugged, but Serviceable

I won’t get into the unplugged devices, mostly it is older gaming systems.

Wrapping It Up

So, do I think I will get an iPad. Maybe, but not soon after it is released. I really think it is no more than extra large iPod Touch in this first generation presented. However, it has potential to open floodgates of creativity in further development of apps. Additionally, Apple has yet to release features for iPhone OS 4.0 and I imagine it will provide more interesting features for the next iPhone and updates to the iPad.

Bookmark and Share

One Line Command - Print Directory Tree

While this blog is new, I want to ensure I keep content going lest it goes abandoned and six months from now I wonder what happened. Most of my original inspiration on putting content here is based on useful work I do. Not having anything interesting to share from current work, I’ll share a segment of things I find interesting and useful from time to time.

So this post is kicking off my category of “One Line Commands”. Over the years I have found myself finding, grepping, cutting and PERLing through directories and files to find some useful information to solve some issue. This first example is a PERL script that recurses through directory tree printing and adds indent based on the current level. Output can be sent to a file and imported into Excel. It is setup to ignore subversion files/directories because at the time I wanted to get a full directory tree from a checked out repository.


perl -e 'use File::Find; sub pl {my ($sc) = @_; print "\t" while ($sc--
> 0); } sub wanted { $f=$_; $fn=$File::Find::name; return if $fn =~ /.svn/; my
$sc=($fn =~tr/\///); if (-d $fn) {pl($sc); print "$f/\n";} else {pl($sc); print
 "$f"; pl(20-$sc); print "$fn\n";}};  find(\&wanted, ("."));'

Copy and pastes into one command line entry.

Bookmark and Share

MAMP & Imagick on Snow Leopard

Most web searches for adding the imagick extension to MAMP suggest using MacPorts to install ImageMagick and then use this compiled version as the library to running ‘pecl install imagick’.

As I was in the process of setting up a clean Mac Book Pro, I tried going through this process. I quickly ran into some problems getting the imagick extension running under MAMP. This is a tail of that adventure.

I started with the latest version of MAMP 1.8.4 and MacPorts 1.8.2 installed.
Then installed ImageMagick


$ sudo port install ImageMagick

This went off without a problem. Could then easily run the ‘convert’ program to see if is working. Next step felt like to install imagick extension.


$ cd /Applications/MAMP/bin/php5/bin

And just make sure the right version of PECL is executed via ‘./’ else may get Mac OS X installed or even MacPorts installed version.


$ ./pecl install imagick

The process doesn’t stop with error, but immediately it has gripes about missing header files.

The first problem encountered was simply getting ‘pecl’ to compile the imagick extension as the MAMP distribution does not include the php headers where pecl is expecting them.

There is probably a way to get pecl to pick them up properly, but in the interest of time, one can just create a link from

Time to re-run ‘pecl’


$ ./pecl install imagick
...
Please provide the prefix of Imagemagick installation [autodetect] : /opt/local
building in /var/tmp/pear-build-mleo/imagick-2.3.0
running: /private/tmp/pear/temp/imagick/configure --with-imagick=/opt/local
...

and provide ‘/opt/local’ when prompted for prefix of Imagemagick installation. Everthing seemed to go well. Finally, modified /Applications/MAMP/conf/php5/php.ini to add


extenstion=imagick.so

And modified /Applications/MAMP/Library/bin/envvars to add


DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:/opt/local/lib:$DYLD_LIBRARY_PATH"

Finally ran:


$ /Applications/MAMP/bin/php5/bin/php -i | less

to see if it was enabled. Unfortunately, the imagick module was not listed. After a little investigation, in the php error log was the following entry:


PHP Warning:  PHP Startup: Unable to load dynamic library '/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/imagick.so' - (null) in Unknown on line 0

After some various searching and other, checking what I did wrong, I finally considered the files:


$ file /Applications/MAMP/bin/php5/bin/php
/Applications/MAMP/bin/php5/bin/php: Mach-O universal binary with 2 architectures
/Applications/MAMP/bin/php5/bin/php (for architecture ppc):  Mach-O executable ppc
/Applications/MAMP/bin/php5/bin/php (for architecture i386):  Mach-O executable i386

$ file /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/imagick.so 
/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/imagick.so (for architecture x86_64):  Mach-O 64-bit x86_64

So discovered that MAMP is a Universal binary, just not an x86_64 universal binary. So, first, make sure to rebuild imagick.so with i386 binary support and just to be safe, add those settings for the php header files as well.

So, back to the php distribution and run configure setting some flags, although this may not be needed, it can’t hurt.


$ MACOSX_DEPLOYMENT_TARGET=10.6 CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"  ./configure --enable-shared

loading cache ./config.cache
checking for Cygwin environment... (cached) no
...

Copy the headers back to MAMP location. And re-run pecl to build universal binary.


$ ./pecl uninstall imagick

$ MACOSX_DEPLOYMENT_TARGET=10.6 CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"  ./pecl install imagick 

Run php printinfo and


$ /Applications/MAMP/bin/php5/bin/php -i | less

dyld: NSLinkModule() error
dyld: Library not loaded: /opt/local/lib/libMagickWand.2.dylib
  Referenced from: /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/imagick.so
  Reason: no suitable image found.  Did find:
        /opt/local/lib/libMagickWand.2.dylib: mach-o, but wrong architecture

And discover that MacPorts isn’t creating universal binaries.


$ file /opt/local/lib/libMagickCore.2.dylib 
/opt/local/lib/libMagickCore.2.dylib: Mach-O 64-bit dynamically linked shared library x86_64

Again, head to the favorite search engine and look at how MacPorts can work with Universal binaries. After some criteria changes came across this simple set of details.

MacPorts provides a variant +universal for all installs that use configure script to initialize build process that will build Universal binaries. The specific architecture has some defaults based on the OS and current hardware.

A bit of pain to add +universal to every port install command, so make +universal, uh, universal it can be added to the /opt/local/etc/macports/variants.conf file as last line:


# To specify global variants to use for all port builds,
# customize this file to list variant settings you want.
#
# Be sure to uncomment/define the variants_conf setting
# in the system wide ${prefix}/etc/macports/macports.conf
# file or in your personal ~/.macports/macports.conf to
# point to this file to enable this feature.
#
# Any variants specified here that are not supported by
# a port will just be ignored. Multiple variants can be
# specified per line, or one per line is also allowed.
#
# Example:
# +ipv6 +no_x11
+universal

And to force a rebuild of anything you have installed


sudo port upgrade --force installed

Finally, we try php again:


$ /Applications/MAMP/bin/php5/bin/php -i | less

...
imagick

imagick module => enabled
imagick module version => 2.3.0
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator
ImageMagick version => ImageMagick 6.5.8-0 2010-01-05 Q16 http://www.imagemagick.org
ImageMagick copyright => Copyright (C) 1999-2009 ImageMagick Studio LLC
ImageMagick release date => 2010-01-05
ImageMagick Number of supported formats:  => 194
ImageMagick Supported formats => 3FR, A, AI, ART, ARW, AVI, AVS, B, BGR, BMP, BMP2, BMP3, BRF, BRG, C, CAL, CALS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CRW, CUR, CUT, DCM, DCR, DCX, DDS, DFONT, DNG, DOT, DPX, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, FAX, FITS, FRACTAL, FTS, G, G3, GBR, GIF, GIF87, GRADIENT, GRAY, GRB, GROUP4, HALD, HISTOGRAM, HRZ, HTM, HTML, ICB, ICO, ICON, INFO, INLINE, IPL, ISOBRL, JNG, JPEG, JPG, K, K25, KDC, LABEL, M, M2V, M4V, MAP, MAT, MATTE, MIFF, MNG, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MSVG, MTV, MVG, NEF, NULL, O, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PFA, PFB, PFM, PGM, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RADIAL-GRADIENT, RAF, RAS, RBG, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, SR2, SRF, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMV, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, Y, YCbCr, YCbCrA, YUV

Directive => Local Value => Master Value
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0

...

Somewhere during this adventure I definitely considered dumping MAMP and using apache, php and mysql from MacPorts but MAMP does generally provide a simple package installation and a GUI for quickly starting and stopping the services.

Bookmark and Share

Nginx & Streaming Video, Beginning to End

About two years ago before my daughter was born I talked my wife into the value of having a video camera to record all those wonderful moments that kids are supposed to have. At the time I was a fan of Sony products and we ended up purchasing the Sony HDR-SR5 High Definition Camcorder. I have actually had no complaints with the operation of the camera itself and didn’t give much thought to the need to pull video off the camera and what I would do with it once I did pull it off.

My daughter came and we filmed various moments early on and my first attempt to pull the video off the camera did not go so well. I had a copy of Adobe Premiere Elements 4 or something. It was purchased along with Adobe Elements that I mainly use for organizing all the digital photos of my daughter. Much to my dismay, I quickly discovered that Premiere Elements did not support AVCHD, Sony’s format format for encoding video on their camcorders. While I liked Sony hardware and they offered some software for dealing with AVCHD, I don’t care for OEM software included with hardware as it is often feature limited with a horrible user experience and included purely to ensure there is some way to access the content the user has created. I don’t envy the developers who have to put those applications together as they are probably given next to no time to work on it and lack adequate numbers of competent developers to get it complete.

So eventually the disk on the camcorder was starting to get full and I needed to pull the video off of the drive. I had purchased a Mac Mini for use in the kitchen to play DVDs, iTunes Videos, and access recipes off the web. I finally discovered that iMovie ‘08 has support for AVCHD and could import the videos off the camera. Initially it was more about getting the videos off the camera and freeing the camera’s hard disk more than making them available in any sort of way to anyone.

On a recent client engagement for work we are working with a music company that is rebuilding their eCommerce platform from the ground up. Part of the solution we designed and built incorporated videos that are streamed using Akamai fronted by Flow Player. We ran into some of the oddest issues with missing files and integrating the Akamai streams.
As I was setting up nginx recently to get this site running, I revisited the details that nginx has built-in support for FLV HTTP Streaming. This doesn’t provide any real protection of the stream, but does provide an ability for users to quickly start watching the video and forward to any point in the video without needing to download everything up to that point. In thinking about the possibility of incorporating this, I finally found a reason to do something fun with the videos and make them available to family to view. The following is a list of the steps I did to get this enabled.

1. Importing the Video From Camera

This was a pretty simple process with iMovie. The only problem I ran into is that it seems iMovie needs to be up and running when the camera is set to computer mode otherwise iMovie doesn’t seem to recognize it as a camera. When not running, the camera would connect in MacOS X and appear as a hard drive that could be opened and have images pulled from, but when iMovie started, it does not see it. What tripped me up most before I realized this is that I tried it on a Mac Book Pro (with iMovie running) and it came right up for importing, but when I tried with my Mini (without iMovie running) it did not appear.

So step one was to connect the camera while iMovie was running and import the appropriate clips into an iMovie event.

2. Create the Movie

I won’t get into the details on how to create the project from the imported movie, but suffice it to say, iMovie makes it easy to select parts or all of the imported video and create titles and transitions and apply effects to the movie. Once the project is ready, go to Share>Export Movie… to open a dialog. I exported the movie as Medium and time yet will tell if that is too large for friends and family to view.

One additional point before leaving iMovie is the creation of still image to use as title slide before the movie starts. When the flash video player loads, it doesn’t start playing the movie unless the user actively clicks the play button. It can be configured to start automatically, but I personally find sites that do that annoying as I am sure many other people do as well. Since the player doesn’t start loading the video automatically, there is no way for the player to present a frame of the video as place holder. To provide a better experience to users, a still frame should be produced and provided to the flash player to use at startup. With it specified, the player will present the image with a play button in place.
To generate the a still image from iMovie is not the most obvious thing to do, though once the process is understood, it is not difficult to do. I eventually found the information on how to do this here. The short information on the process is to create a project with a small clip including the frame you want to capture and then use Share>Export using Quicktime.

This will bring up the “Save export file as…” dialog box with two drop downs. In the first, Export, choose “Movie to Image Sequence”

In the second drop down, make a choice on how the export should occur and image format used with the export.

Depending on how long the clip is and how many frames per second are set on export, a few images will be generated that need to be sifted through to find the right one.

3. Convert to Flash Video

Once the movie is exported, the next step is to convert it into flash video. In order to perform this transcoding I used ffmpegx that provides a graphical user interface to several utilities that perform the actual encoding. The download page has all the details on how to install and initially configure the application. There are specific notes on the page on how to enable the FLV encoding.

Once it was up and running it was nearly as dragging and dropping the source movie, choosing the output encoding, and clicking Encode. The only added effort was making changes to the output size and settings. Once set, click Encode and wait for the computer to do the dirty work.

ffmpegX is licensed as shareware. So far I have only encoded a small number of videos but could easily see doing more and paying the shareware fee.

4. Enable nginx Flash Streaming

The video is encoded as flash video and now it is time to ensure nginx is configured to stream the file over HTTP. In the server block for the given virtual host, just adding an additional location block is all that is needed.


    location ~ \.flv$ {
      root   /home/mleo/www/public/;
      flv;
    }

The flv directive ensure the necessary meta data is sent with an flv file response and incoming requests with file seek data are handled properly and the data is sent back as requested.

5. Embed the Flash Video in Page

I’ll skip over the step on copying the flv file from local computer to the server and move on to the final step of configuring a flash video player to consume the video, splash image, and stream via http. In my case I chose to use JW Player which offers a non-commercial license which can be used on sites with no advertising (like this one). Once the package is downloaded and installed on the server, minimally consisting of the swfobject.js, player.swf and some supporting files, one can use the setup wizard to initially configure the settings. Most of the defaults are fine, but the most immediate settings to change include:

  • height: The video dimension height
  • width: The video dimension width
  • file: The path to the flv file
  • image: The path to the splash image
  • provider: Set to “http” in order to enable http streaming

The following is the sample code for the video embedded below.

These few settings are all that is needed to embed the video player and have it function. JW Player offers all sorts of additional plugins and skins, but for simple video sharing that isn’t really needed.


<script type='text/javascript' src='/media/swfobject.js'></script>

<div id='mediaspace'>This text will be replaced</div>
 
<script type='text/javascript'>
  var so = new SWFObject('/media/player.swf','mpl','640','360','9');
  so.addParam('allowfullscreen','true');
  so.addParam('allowscriptaccess','always');
  so.addParam('wmode','opaque');
  so.addVariable('file','/media/SampleVideo.flv');
  so.addVariable('image','/media/SampleVideo.png');
  so.addVariable('provider','http');
  so.write('mediaspace');
</script>

Sit back and enjoy streaming video

The following video is of my daughter’s day care holiday show. It is the first of my videos to be imported, encoded, and streamed.

This text will be replaced

Bookmark and Share

Nginx, FastCGI, Wordpress Permalink & "No Input File Specified"

If you have spent any time recently look into the state of web servers then you know that nginx is getting recommended as the replacement for apache left, right and center.  Apache has a rich history, platform extensive, and highly extensible, and while these are great traits it’s 15 years of legacy code hasn’t seemed to keep pace with some of the modern design patterns such non-blocking i/o and simple configuration.  To apache developers’ credit it is built to support a wide array of architectures and operating systems.

There is definitely a fair amount of information out there on how to get nginx running with Wordpress via FastCGI.  Slicehost, my current hosting provider, offers a wealth of articles on setting up nginx along with a rails cluster. I followed several other articles in getting FastCGI working through spawn-fcgi with requisite init scripts to ensure everything starts up properly.  Everything was working great until I enabled pretty permalinks and then got the unfortunate error:

No input file specified.

I understood this to mean FastCGI could find the script attempting to be called, but couldn’t immediately see why that was the case.  In the end it was something simple and obvious.

My initial configuration server configuration looked something like:


server {
  listen   80;
...
  location / {
    # this serves static files that exist without running other rewrite tests
    if (-f $request_filename) {
      expires 30d;
      break;
    }

    # this sends all non-existing file or directory requests to index.php
    if (!-e $request_filename) {
      rewrite ^.+?(/.*\.php)$ $1 last;
      rewrite ^ /index.php last;
    }
  }

  location ~ .php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME /var/www/html/www/public$fastcgi_script_name;

    root /var/www/html/www/public;
  }
}

And searching there were other suggestions for the rewrite as:


    # this sends all non-existing file or directory requests to index.php
    if (!-e $request_filename) {
      rewrite ^(.+)$ /index.php?q=$1 last;
    }

Which made no difference in the error condition. As I said in the end, the problem was something obvious. In my configuration, the wordpress installation is not at the root of the web server, rather it is in a subdirectory called blog. Therefore, with the initial configuration when a path could not be found, rather than call the wordpress index.php script located at /blog/index.php, it was calling just /index.php which initially didn’t exist. Had it existed, I probably would have quickly see which file was getting called and how to address. The change was to set up the wordpress rewrite information in the correct location block. The updated configuration became:


  location /blog {
    # this serves static files that exist without running other rewrite tests
    if (-f $request_filename) {
      expires 30d;
      break;
    }

    # this sends all non-existing file or directory requests to index.php
    if (!-e $request_filename) {
      rewrite ^.+?(/.*\.php)$ $1 last;
      rewrite ^ /blog/index.php last;

    }
  }

I haven’t yet configured out the “No Input file specified” when a bad php url is used, but that will probably be done shortly.

Bookmark and Share

Getting Started with Slicehost

I looked into virtual hosting solutions about a year ago and found Slicehost.  The original impetus was to have a server in the cloud in order to host a code repository and test server for things I work on in spare time.  Some of the requirements I was looking for included root access, good management tools, and relatively cheap.  Slicehost fit the bill pretty well and seems there is a good amount of goodwill out there about their offering.

I have been pleased with the cost, performance and service they offer.   Through their great articles, I was quickly able to secure the server and set up and configure the right set of software and services to get things running.

I have started with a 256 slice running Ubuntu and haven’t yet had need to upgrade it to something new.  Initial software configuration includes:

  • nginx
  • ruby
  • php5
  • mysql
  • git

Since starting with just a server to host a code repository I have moved on to host some additional sites on the server including this blog.  Most of the sites are yet to be publicly available as they are things put together more to learn something than explicitly made available for public consumption.

In the end, this has been a great solution for my needs.

Bookmark and Share

Start of a new year, start of a new blog

It has occurred to me recently that I have spent the last 16 or so years using the Internet, 25 years learning various programming languages, and last 12 years working in a professional manner in consulting.  And while I early on used to put public comments and respond to questions on newsgroups and what not, I haven’t really put a public face on anything I do or problems I solve since becoming a paid professional.  I could argue that the job takes time away from the family and the time I do get to spend with the family is precious and I don’t feel the need to spend additional time writing long diatribes about the way I work on a day to day basis.  On the other hand, it could simply be that I really hate writing prose and just enjoy writing code.

So given the start of a new decade, I feel it is time to start something new and start sharing the information I come across on a day to day basis.   So let’s see how long I keep it up and how often I am willing to update this here blog.

Bookmark and Share