Saturday, February 28, 2015

RadioShack Store Closures

Our local RadioShack closed, along with many other RadioShacks across the country in a massive Chapter 11 bankruptcy protection move.

Although RadioShack is significantly more expensive than buying parts online, they have saved my bacon more than once on various weekend electronic projects, when shipping time would have ruined my weekend.


Sunday, February 8, 2015

Installing Ubuntu Server on Mac Xserve Server

Apple Xserve Server

I had an old Xserve server laying around and wanted to put it to good use. My current Plex server is going away, so this will serve as the replacement. The Xserve line has long since been discontinued by apple and is no longer supported. What is the best solution to bring any old server back to life? Install Linux on it, of course!


Model: Intel Xserve3,1 (2009)
Processor: 2.26 GHz Quad-Core Intel Xeon
Memory: 12 GB 1066 MHz RAM
Network: 2x Intel 82574L Gigabit Network
Storage: (3 high speed SAS drives,
    but not important as controller is not supported)
Graphics: NVIDIA GeForce GT 120 with 256 MB of GDDR3 SDRAM
* 2x PCIe 2.0 ×16
* 3x USB 2.0
* 2x Firewire 800
* 1x RS-232 serial

additional details

Display Port

Unless you are a Apple enthusiast, you probably don't have a Mini DisplayPort adapter laying around. I picked up a Mini DisplayPort to DVI adapter on amazon for about $10.

Ubuntu Server ISO

For this particular installation, I have chosen to go with the latest Ubuntu Server LTS.

After downloading the Ubunut Server 14.04.1 LTS ISO (ubuntu-14.04.1-server-amd64.iso), I burned it to a CD-ROm with ImgBurn.

Install to USB Drive

One issue I ran into is I could not find a Linux driver for the Xserve RAID controller, so I ended up installing Linux onto a attached USB drive.  I had found articles online that talked about swapping out the back-plane with a standard SATA controller, but that is more effort than I wanted to put in for this project.

To keep the server from booting from the local hard drives, I pulled them slightly out.

The server only has USB 2.0 ports (could always install a USB 3.0 controller into one of the two free PCIe slots), but as USB 3.0 drives are pretty much all you can find now I used a USB 3.0 flash drive. I would recommend a SanDisk drive, but I am completely biased. :-)

Installing Ubuntu

To boot from the install CD, hold down the "Alt" key as the system boots.

You will see a white screen ("White Screen of WaitingTM"), and it won't seem like anything is happening for a long time (60+ seconds), but continue to hold down the alt key until the boot menu comes up.

Select the CD labeled "EFI Boot" (Xserver only supports UEFI supported installs), and the installer will continue to load.

After what seems like a really long time, an error will appear.  Ignore it and wait some more time, and the Ubuntu installer GRUB menu will appear.

Finally the "purple" Ubuntu installer will appear. The default options on the installer will be sufficient, but you can make any desired changes as well.

Luckily the Intel 82574L Gigabit Network is well supported by Linux.  The two connections are labeled on the back of the server.

Eventually you will be asked to choose a storage location for the install. If your USB drive has existing partitions, you will get a warning about unmounting partitions on /dev/sda, do so.

For the partitioning scheme, I am not a fan of LVM (had to many bad experiences trying to recover from issues), so I chose the "Guided - use entire disk" option.

Eventually the installation will complete, and the system will reboot.

Expect another 60 seconds of waiting at the "White Screen of Waiting", before the system actually boots and you get your expected login prompt.

Congratulations on completing the installation.

Saturday, February 7, 2015

The Zen of Python

The Zen of Python, by Tim Peters, is guiding principles for Python's design.

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

This list can also be generated within python by executing:
>>> import this

The Mozilla Manifesto

The Mozilla Manifesto are the principles that guide Mozilla's mission to promote openness, innovation & opportunity on the Web.

  1. The Internet is an integral part of modern life—a key component in education, communication, collaboration, business, entertainment and society as a whole.
  2. The Internet is a global public resource that must remain open and accessible.
  3. The Internet must enrich the lives of individual human beings.
  4. Individuals’ security and privacy on the Internet are fundamental and must not be treated as optional.
  5. Individuals must have the ability to shape the Internet and their own experiences on the Internet.
  6. The effectiveness of the Internet as a public resource depends upon interoperability (protocols, data formats, content), innovation and decentralized participation worldwide.
  7. Free and open source software promotes the development of the Internet as a public resource.
  8. Transparent community-based processes promote participation, accountability and trust.
  9. Commercial involvement in the development of the Internet brings many benefits; a balance between commercial profit and public benefit is critical.
  10. Magnifying the public benefit aspects of the Internet is an important goal, worthy of time, attention and commitment.