{"pages":[{"title":"About me","url":"/about/","slug":"about","parent":null,"body":"This about page was incredibly out-of-date, so I removed it. If you want to know who I am or what I'm up to, check out these links:\n\n* [Twitter](https://twitter.com/nickpegg)\n* [GitHub](https://github.com/nickpegg)"},{"title":"CPU Usage Meter","url":"/projects/cpu-usage-meter/","parent":"Projects","body":"Back in the day, there was a little obscure operating system called BeOS. The\ncompany which made the OS was brave enough to put it on their own hardware, too.\nThis was dubbed the [BeBox](https://en.wikipedia.org/wiki/Bebox). Among all the\nneat doohickies on the computer were two CPU load meters (one for each processor).\nNow, how cool would it be to have a computer with those?\n\n__Very.__\n\n### Download\nNote: Linux code makes use of libserial and libstatgrab. Both must be installed for\nprogram to work/compile. The UM245R device uses the ftdi_sio driver. It's in the\n2.6 kernel tree, so it should (hopefully) be detected when you plug the device in.\n\nUSB controller program:\n\n* [Linux code and executable](/media/projects/cpu_meter.tar.gz)\n* Windows code removed due to buginess\n\n### Updates\n\n#### Status Update - Nov 27 2007\n\nWow, it's been almost a year since I've put work on this. I decided to finally write\ncode to make it work under Linux. I ended up throwing out the notion of trying to\nuse libusb. After 4 hours of research and code hacking, it worked!\n\n#### Status Update - Dec 08 2006\n\nThe hardware works and the software works (kinda). Once I get around to cleaning up\nsome of the code and adding some documentation, I'll start uploading stuff. Stay tuned!\n\n#### Status Update - Dec 02 2006\n\nGot the hardware working on a breadboard. Using DLP's test program, various patterns\nwere able to be sent. Video coming soon!\n\n### Statistics:\n* Cost: $27.69\n* Lines of code (Linux): 83\n* Lines of code (Windows): 1503\n* Sleep lost: Unknown\n\n### Hardware Design\nThe hardware is pretty simple. Using an UM245R, most of the work is done for you. The\n[UM245R](https://www.ftdichip.com/Products/EvaluationKits/UM245R.htm) takes in USB data\nand outputs it on the 8 data pins, and those 8 pins directly drive the LEDs. It's not\nquite as simple as that, since there's all sorts of protocol with Ready-to-Read and\nReady-to-Write and Read and Write pins that go high and low. I just cheated and used\nat 555 timer to generate a clock signal on the RD pin to give me the data. I just\nlucked out and the UM245R outputs the last data if there's no new data available.\n\n[Circuit Design](/media/img/cpu_meter/circuit.png)\n\n[Testing the circuit](/media/img/cpu_meter/testing.jpg)\n\n### Software\nAs with any hardware, there needs to be software which controls it. For the Windows\ncode, I decided to use [LibUSB](https://libusb.sf.net/) to help me with this project. Programming with LibUSB\nis fairly straightforward, which helps since the documentation is rather spotty. Along\nwith LibUSB, I also took the Queue class from [nicklib](/projects/) and wrote a UsbDevice class to\nhelp handle failures better. This stuff can be found in the source package above.\n\nAfter wrangling with libusb on the Windows side of things, I decided to throw out\nthat idea on the Linux client. It turns out that FTDI makes a driver for the UM245R\ncalled ftdi_sio which creates a virtual serial interface. I used this along with\nlibserial and libstatgrab to get it working.\n\nThe Linux code is rather simple and only does CPU usage. I'm planning on extending\nit to do things such as music visualization. This of course means writing some sort\nof user interface and probably using threads.\n\n### Pictures\nSome pictures of the final product:\n\n \n\n \n\n"},{"title":"Kegerator","url":"/projects/kegerator/","parent":"Projects","body":"I've been homebrewing for a couple of years now, and my least favorite part of\nthe whole process is definitely the bottling. Each 5 gallon batch has\napproximately 55 bottles that you have to clean, santize, fill, cap, clean\nagain, and put in boxes. I've gotten sick and tired of doing that for every\nbatch of beer, so I decided to make the jump and build myself a kegerator.\n\n![Kegerator mostly finished][0]\n\nBuilding a kegerator is fairly simple, only requiring some plumbing and\nwoodworking. The only hard part is the cost. Below is the cost for a\nthree-keg setup similar to my current two-keg setup.\n\n### Updates\n\n#### Feb 20, 2011\nGot the kegerator built yesterday minus a temperature controller. I got a\nlittle drill-happy and accidentally made three faucet holes instead of two.\nOops, I guess I'll have to put in that third faucet.\n\n### Links\n* [Flickr set](https://www.flickr.com/photos/nickpegg/sets/72157625971333921/)\n\n### Bill of Materials\n\n
| Qty | \n\t\tCost Each | \n\t\tItem | \n\t
|---|---|---|
| 1\n\t\t | $198 | \n\t\tGE 7.0 cubic ft freezer | \n\t
| 1 | \n\t\t$90 | \n\t\t5 pound CO2 tank | \n\t
| 1 | \n\t\t$75 | \n\t\tDual gauge CO2 regulator | \n\t
| 1 | \n\t\t$47 | \n\t\t3-way CO2 distributor | \n\t
| 3 | \n\t\t$40 | \n\t\tUsed 5 gallon soda keg | \n\t
| 3 | \n\t\t$6.50 | \n\t\tBall lock gas disconnect - MFL | \n\t
| 3 | \n\t\t$6.50 | \n\t\tBall lock liquid disconnect - MFL | \n\t
| 7 | \n\t\t$1.30 | \n\t\t1/4\" barb-to-MFL connector | \n\t
| 7 | \n\t\t$0.25 | \n\t\tFlared nylon washers for MFL connections | \n\t
| 3 | \n\t\t$20 | \n\t\tStainless steel faucet shank | \n\t
| 3 | \n\t\t$2.25 | \n\t\t1/4\" barbed shank tail piece and hex nut | \n\t
| 3 | \n\t\t$0.10 | \n\t\tRubber shank washer | \n\t
| 3 | \n\t\t$31.50 | \n\t\tPerlick beer faucet | \n\t
| 3 | \n\t\t$2 | \n\t\tEconomy tap handle | \n\t
| 1 | \n\t\t$6.42 | \n\t\t12' 2x8 | \n\t
| 1 | \n\t\t$3.37 | \n\t\tRoll of weather stripping | \n\t
| 2 | \n\t\t$5.65 | \n\t\t25' roll of poly ice maker tubing | \n\t
| 14 | \n\t\t$0.65 | \n\t\t1/4\" to 1/2\" hose clamp | \n\t
| Total | \n\t\t$758.09 | \n\t\t\n\t |
(click for full-sized version, warning: LARGE image)
\n\nHere, the yellow boxes are center switches/routers, the green boxes are switches,\nand the peach-colored nodes are hosts. Also, red lines are switch-to-switch\nconnections and blue lines are switch-to-host connections.\n\nAnother somewhat off-topic thing about these graphs is that the manager of IT at\nNucor-Yamato is interested in open-sourcing the code that manages all of the data\nand generates these graphs, AND let me use company time to work on and manage the\nproject. If anyone knows of any open-source project (or software that doesn't cost\nan arm and a leg) that already does network discovery, data collection, and automated\nmapping then please let me know! If I'm not going to be re-inventing the wheel, then\nI'll probably be kicking the project off shortly after I start working full-time in\nJune 2010.\n"},{"date":"2009-12-05T00:00:00.000Z","tags":["programming","beertraq"],"title":"Beertraq Beta!","blurb":"I'm glad to announce that my recent pet project, Beertraq, is now in a\n(somewhat closed) beta stage! The basic idea is there and functioning,\nbut the extra functionality isn't done and it's far from polished.\nNonetheless, it's time to take her for a test drive!\n","body":"I'm glad to announce that my recent pet project, Beertraq, is now in a\n(somewhat closed) beta stage! The basic idea is there and functioning,\nbut the extra functionality isn't done and it's far from polished.\nNonetheless, it's time to take her for a test drive!\n\n\n> Note from future-Nick\n>\n> I got lazy and never finished Beertraq, and Untappd ended up releasing not long after. Though it took them _years_ to implement a barcode scanner in the app, which was going to be a core thing in Beertraq.\n\n\nSo what is Beertraq, you ask? It's a way for you to keep track of which\nbeers you've tasted, compare those with others, read beer reviews, and\nmost importantly discover new beers to try. I originally got the idea\nfrom The Flying Saucer's UFO Club, where members work toward a goal of\ndrinking 200 different beers. Once they complete the task, they get their\nname on a plate which gets put on the wall of the bar. The cool part about\nthe UFO Club is that it's all computerized, using a magstripe card to login\nat a kiosk in the bar. You can also log in to their website to check your\nprogress and read reviews on there. I figured that if The Flying Saucer can\nhave that system for their bar, I could do the same for the world.\n\nIf you're interested in becoming a BeerTraq beta user, send an email to\nbeertraq (at) beertraq (dot) com with the email address you want to use for\nyour account. All I ask is that you give feedback by filling out issue requests\nwith bugs you find or suggestions you might have.\n"},{"date":"2009-11-30T00:00:00.000Z","tags":["programming","networking"],"title":"Fun With Graphs","blurb":"I've always been utterly fascinated with graph theory, mostly with its\napplications to networks. As an added bonus, they can be represented with\npretty pictures!\n","body":"I've always been utterly fascinated with graph theory, mostly with its\napplications to networks. As an added bonus, they can be represented with\npretty pictures!\n\n[](/media/img/fun_with_graphs/nys-network.png)\n(click on image for full-sized version)\n\nThat graph represents the network behind Nucor-Yamato Steel and Nucor Castrip\nArkansas, sanitized of sensitive information of course. All of the nodes are\nCisco switches, the yellow boxes representing backbone switches (6500 series\nto be exact). This graph is part of the network information system that I've\nbeen working on during the majority of my internship at NYS and gets auto-generated\nevery day, along with more centralized graphs on a per-switch basis.\nThe way the system works is that a periodic Python script goes out to a list of\nknown switches and gathers CDP neighbor information as well as the MAC address\ntables. Then Nmap scans are ran every 6 hours to scan for hosts, gathering IP\naddresses, hostnames, and MAC addresses. These MAC addresses are correlated with\nthe MAC tables from the switches to determine which hosts are connected to which\nports on what switches. The CDP neighbor information also gives which switches\nare connected to each other, giving a full scope of how the network's connected.\nThe script which generates the graphs grabs all of that information out of the\ndatabase, uses NetworkX and pydot to create the graph, and then graphviz to render\nit into a PNG image. The graph is pretty plain, though. The real version shows\nswitch names and IP addresses. Since the time between graph generation is so long,\nany more useful information that I could throw onto the graph would quickly become\noutdated. My grand scheme is to make a quickly-updated graph showing live stats like\nswitch load, link load, link types (fiber, twisted pair, wireless), downed switches,\netc. That way, I (or the network supervisor, I guess...) could have a big-screen TV\ndisplaying the live health of the network.\n\nI've been asked what parameters I set to get that graph to look that way. I didn't set anything special in code, it's all in the command line:\n\n twopi -q -Ksfdp -Tpng -Goverlap=\"prism\" -Eoverlap=\"prism\" -Gsplines=\"true\" -Gratio=\"compress\" -oclean.png clean.dot\n\nReally, I'm just a data visualization nerd looking to get a fix.\n"},{"date":"2009-11-26T00:00:00.000Z","tags":["servers","linux"],"title":"Moving Servers and Doing It Right","blurb":"Well, I finally bit the bullet and got a Linode account. So far I'm pretty\nhappy with it. I figured that with the costs of power and bandwidth, I was\nalmost spending $20/month to run my old server on my own hardware.\nIncidentally, the lowest-grade Linode VM costs that much and is enough to\nsuit my needs.\n","body":"Well, I finally bit the bullet and got a Linode account. So far I'm pretty\nhappy with it. I figured that with the costs of power and bandwidth, I was\nalmost spending $20/month to run my old server on my own hardware.\nIncidentally, the lowest-grade Linode VM costs that much and is enough to\nsuit my needs.\n\nSo now that I've been setting up a webserver from scratch again, I'm doing\nit right this time. I'm setting up some monitoring software to notify me when\nthings go down, I'm no longer relying on myself for DNS (no more dynamic IPs!),\nand I'm also branching out and trying an alternative webserver.\n\nThe webserver in question is [Cherokee](http://cherokee-project.com/) which claims\nto use less memory and\nperform better than Apache. It sure does use less memory, but as a down side\nit doesn't have a native PHP module, so I'm required to use FastCGI for that\npurpose. Right now, there's five php-cgi processes running each using about\n25-30 MB. This wouldn't be a problem except that I've only got 360 MB of memory\nto play with. On the plus side its got a pretty sweet admin interface with wizards\nto help you set up things like WordPress, Drupal, Ruby on Rails, Django, etc. and\nyou can setup some pretty complex rules for what and how files should be hosted.\n\nOn the monitoring side of things, I'm using [Munin](http://munin.projects.linpro.no/) to monitor the various\n[stats on the server](http://terminalunix.com/munin/), [Piwik](http://piwik.org/) for website visit statistics, and I plan on getting [Monit](http://mmonit.com/monit/) going\nfor service monitoring. It's a bit more important now that I keep and eye on memory\nand data transfer now that I'm limited on that. Also, if some process goes wild and\nstarts using crazy amounts of CPU power and memory, I'll be able to catch it.\n\nUnfortunately when you move servers, you have to move everything that was running\non them. I'm still in that process, but it's been going pretty smoothly.\n"},{"date":"2009-08-18T00:00:00.000Z","tags":["linux"],"title":"Stupid Linux Trick #5245","blurb":"Want to share what you're doing with another person logged into the same system? All you need is a FIFO, cat, and script.\n\nOn your session:\n mkfifo foo\n script -f foo\n\nOn the viewer's session:\n\n cat foo\n\nThe viewer can then see everything that you're doing as if they're looking over your shoulder!\n\n","body":"Want to share what you're doing with another person logged into the same system? All you need is a FIFO, cat, and script.\n\nOn your session:\n mkfifo foo\n script -f foo\n\nOn the viewer's session:\n\n cat foo\n\nThe viewer can then see everything that you're doing as if they're looking over your shoulder!\n\n"},{"date":"2009-06-21T00:00:00.000Z","title":"Intelligent Drink Dispenser - Software Design","blurb":"The other major half of the Intelligent Drink Dispenser project was the software side\nof things. As with the hardware, there were some things we had to consider when\nbeginning the design of things.\n\n","body":"The other major half of the Intelligent Drink Dispenser project was the software side\nof things. As with the hardware, there were some things we had to consider when\nbeginning the design of things.\n\n\nWhat language should we use? Should this be a GUI\napplication or web application? If we go with a GUI application, what operating system\nshould we target?\n\nWe decided that since we only had a semester to get everything done, we needed a\nframework to take care of the more nitty-gritty stuff. We eventually decided to go\nwith the Django web framework, which uses the Python programming language. Python is\na language we all knew and Jon and I had used Django in the past. Also, since our\n'final product' would be highly based on a client-server model, it makes sense to\ngo with a web app since the server can be in a central location with many clients\nconnecting to it.\n\nThe most important thing to us was the fact that Django abstracts the database into models\nfor us. No having to mess around with raw SQL, we just run some queries and get our data\nfrom the models as if they're just plain ol' objects. After some thought, we came up with\nour models and their relationships:\n\n\n\nThe development of the application was fairly straight-forward. It was just a standard\nDjango app after all. The interesting part was interfacing with the hardware.\n\nIf you remember from my post talking about the hardware side, we used an FTDI UM232\nUSB-to-serial converter. Lucky for us, there's a Linux kernel module which represents this\ndevice as a virtual serial port, which made our jobs a whole lot easier since there's\nexisting serial libraries for Python (like pyserial). We ended up just writing a couple of\nfunctions, one to read the RFID tag from the serial port, and one that takes in a Drink id\nand then communicates to the microcontroller to pour it. The microcontroller's fairly dumb,\njust taking a number and turning that pin on, or turning all of the pins off if a non-valid\ncharacter is sent, as you can see in the pourDrink function:\n\n def pourDrink(id, serialPort=DEVICE):\n \"\"\"Pours the drink given by the specified ID\"\"\"\n\n # Seconds per mL of the motors, found experimentally\n # These should be in the database or a config file instead of hardcoded...\n secondsPerML = []\n secondsPerML.append(9.858/350.0) # Pump 0\n secondsPerML.append(9.858/350.0) # Pump 1\n secondsPerML.append(6.385/210.0) # Pump 2\n\n components = DrinkComponent.objects.filter(drink=id)\n\n for c in components:\n stock = IngredientStock.objects.filter(ingredient=c.ingredient)\n total = 0\n\n for s in stock:\n total += s.amount\n\n if total < c.amount:\n raise UnableToPour(\"Not enough \" + c.ingredient.name + \" to pour drink!\")\n\n port = serial.Serial(serialPort, 2400)\n if not port.isOpen():\n raise UnableToPour(\"Unable to open serial port!\")\n\n for c in components:\n stock = IngredientStock.objects.filter(ingredient=c.ingredient)\n leftToPour = c.amount\n\n startTime = time.time()\n\n for s in stock:\n port.write(str(s.slot))\n if leftToPour < s.amount:\n time.sleep(secondsPerML[s.slot]*leftToPour)\n s.amount = s.amount - leftToPour\n s.save()\n\n break\n else:\n time.sleep(secondsPerML[s.slot]*(s.amount - ))\n leftToPour = leftToPour - s.amount - 30\n\n s.amount = 0\n s.save()\n\n print \"Time to pour:\" + str(time.time() - startTime)\n port.write(\"\\n\")\n port.close()\n\nNot exactly the most precise in terms of pouring accuracy, but it gets the job\ndone as a prototype. As for the rest of the code, there's not too much else that's\nvery interesting. I may release the code at some point in the future.\n","tags":[]},{"date":"2009-06-21T00:00:00.000Z","title":"Intelligent Drink Dispenser Details","blurb":"I said that I'd post details on my Intelligent Drink Dispenser project \"soon\". That\nwas over a month ago. Whoops. I blame my [new internship](http://nucoryamato.com/) for that.\n\nFor those of you not in the know, the Intelligent Drink Dispenser was my senior design\nproject at Missouri University of Science and Technology (which will forever in my heart\nbe University of Missouri-Rolla). It's basically a smart drink dispenser that's capable\nof mixing, charging customers, telling the bar/restaurant owner when they need to refill\nthe machine, etc.\n","body":"I said that I'd post details on my Intelligent Drink Dispenser project \"soon\". That\nwas over a month ago. Whoops. I blame my [new internship](http://nucoryamato.com/) for that.\n\nFor those of you not in the know, the Intelligent Drink Dispenser was my senior design\nproject at Missouri University of Science and Technology (which will forever in my heart\nbe University of Missouri-Rolla). It's basically a smart drink dispenser that's capable\nof mixing, charging customers, telling the bar/restaurant owner when they need to refill\nthe machine, etc.\n\nIf you don't feel like reading the details and just want to look at the pretty pictures,\nyou can check out my [Picasa album](http://picasaweb.google.com/nick.pegg/IntelligentDrinkDispenser)\nor watch the [Youtube video](http://www.youtube.com/watch?v=79H5oAS_Y6k).\n\nThe theoretical process is that the customer would go to order a drink, and since they're\na new customer, they'd have to be entered into the system by the person running the machine\n(bartender, or waiting staff). They would have their name and credit card information taken,\nand would then be assigned a drinking vessel based on the first drink they were wanting to\norder. Multiple vessels could also be assigned to the same person. Once the customer is\nsetup and is ready to purchase their drink, they set the fluid vessel on the marked reader\narea on the dispenser. The system then recognizes the vessel, who it belongs to, asks the\ncustomer for the last four digits of their credit card, and then asks the customer which\ndrink they'd like to order. The customer then chooses what drink they'd like to have, the\nsystem double-checks that the vessel is the right size, and pours it.\n\nSecurity and privacy was one of the major goals of the project. The only information stored\nabout the user is their name, a secure hash of their credit card number, the last four digits\nof ther card, and their drink order history.\n\nThe project itself can pretty much be split into two major components: hardware and software.\nI would probably say the hardware is more interesting and posed more challenges for us. The\nfirst thing is how the heck do you pour the fluid? If you take into consideration that we only\nhad a $300 budget for the whole shebang, it's not an easy task. The way that the professionals\ndo it is with Carbon Dioxide-powered pumps, which are controlled by electronic valves and supplied\nby a tank and pressure regulator. Three pumps, valves, and the feed system would cost us well\nover $300. Our original idea was to use 24 VDC sprinkler valves, but that idea failed because the\nsprinkler valves by their nature require back-pressure to operate. We came up with the idea of using\nwindshield washer pumps made for cars. Since this was supposed to be a prototype, we didn't have to\nworry about our components being food-grade. That, coupled with the fact that the pumps operate on\n12V DC and are relatively inexpensive ($15-25 a pop), that's what we went with for our design.\n\nThe rest of the hardware design was fairly straightfoward. We used an 8051 microcontroller to control\neverything, an FTDI UM232 to handle the PC communications and a Parallax RFID reader to read the\ntags that are on the bottom of the drinking vessels. The serial communication is pretty interesting\nsince the USB-to-serial device has only one serial port but two devices to talk to (the RFID reader,\nand the PC). Our solution was to have the receive line go to the RFID reader (to the PC), and have\nthe transmit line go to the 8051 (from the PC). This meant that our 8051 couldn't talk back, so we\nhad to hope that things were working right. Additionally, Richard developed a simple serial language\nfor the 8051. If the 8051 received an ASCII 0 through 7, it would turn on that pin on the port we\nwere using. This could easily be modified to operate with all the ports on the 8051 to control 24\npumps, or even with some addressing logic to control a huge number of pumps.\n\nBelow is our hardware schematic, which should give you some idea of how it's all connected.\n\n\n\nIn my next post, I'll be talking about the software design. Stay tuned!\n","tags":[]},{"date":"2009-05-11T00:00:00.000Z","tags":["idd"],"title":"Intelligent Drink Dispenser in the news!","blurb":"So, I've been pretty quiet about my Intelligent Drink Dispenser project so far,\nmostly because there was going to be a competition between myself and\n[Clint Rutkas](http://betterthaneveryone.com/archive/2009/04/11/856.aspx) and\nI didn't want to give the enemy any details.\n","body":"So, I've been pretty quiet about my Intelligent Drink Dispenser project so far,\nmostly because there was going to be a competition between myself and\n[Clint Rutkas](http://betterthaneveryone.com/archive/2009/04/11/856.aspx) and\nI didn't want to give the enemy any details.\n\nWell, the cat's out of the bag: [http://news.mst.edu/2009/05/students_create_smart_way_to_m.html](http://news.mst.edu/2009/05/students_create_smart_way_to_m.html)\n\nThe communications department of my university, Missouri S&T (formerly UMR), gets\nalerts from Google News whenever someone mentions the university's name and since\nClint did just that, his post showed up in their email. After talking with the\ndirector of communications, he decided to run the story. I gotta say, it's a\npretty great way for my Senior Design class to wind down.\n\nFor those interested in the details of the Intelligent Drink Dispenser, stay\ntuned! I'll be posting more information about it soon.\n\nSide note: since the story got posted, my server's been chugging along to serve\nup my website, almost maxing out the upload on my poor cable internet connection.\nHere's the traffic graph from my router:\n\n\n"},{"date":"2009-04-18T00:00:00.000Z","tags":["servers","linux"],"title":"PXE boot with DD-WRT and Ubuntu","blurb":"After spending all afternoon fighting with my new server and my DD-WRT router,\nI finally figured out how to get my server to PXE boot and fire up an Ubuntu\ninstall. All it really involved was setting up TFTP on another box (my desktop,\nto be specific), adding a line to DD-WRT's DNSMasq options, and configuring the\ndamn server to boot from PXE, which was the hardest part. Luckily, for those of\nyou who are struggling with it, here's how I did it.\n","body":"After spending all afternoon fighting with my new server and my DD-WRT router,\nI finally figured out how to get my server to PXE boot and fire up an Ubuntu\ninstall. All it really involved was setting up TFTP on another box (my desktop,\nto be specific), adding a line to DD-WRT's DNSMasq options, and configuring the\ndamn server to boot from PXE, which was the hardest part. Luckily, for those of\nyou who are struggling with it, here's how I did it.\n\n### Setting up the PXE client\n\nI had to get my server to boot PXE in the first place. For most people, this just\nmeans poking around in the BIOS. Not for me though.\n\nAfter poking around the HP site, I've found out that my server is a first\ngeneration Proliant DL360. Since it's an older machine, this means that it doesn't\nhave a built-in BIOS config, but I had to actually download the old Compaq SmartStart\n5.5 CD. I had to hunt around the HP website, but to save you the trouble, you can snag it here:\n\n[http://ftp.hp.com/pub/products/servers/supportsoftware/ZIP/smartstart-5.50-0.zip](http://ftp.hp.com/pub/products/servers/supportsoftware/ZIP/smartstart-5.50-0.zip)\n\nOnce you boot from the CD, you'll want to go into the System Configuration\nUtility when prompted. From there, it's just like a giant BIOS. Just turn PXE\non for whatever ethernet port you're using and it's rarin' to go.\n\n### Setting up the TFTP server\n\nOnce my server was setup for PXE booting, I had to set up a tftp server for it\nto grab the boot image from. Since I was using my desktop, which runs Ubuntu, as\na host, setup was pretty easy. I just used tftpd-hpa per the Ubuntu wiki's recommendation.\n\n # sudo aptitude install tftpd-hpa\n\nI had to also edit the configuration file at /etc/default/tftpd-hpa. Mine looks like this:\n\n #Defaults for tftpd-hpa\n RUN_DAEMON=\"yes\"\n OPTIONS=\"-l -s /var/lib/tftpboot\"\n\nSince I was wanting to PXE boot into an Ubuntu install, I had to extract the\ninstall files into /var/lib/tftpboot as I put in the config file. For example, the\nnetboot image files for Ubuntu 9.04 can be found here:\n\n[http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/netboot.tar.gz](http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/netboot.tar.gz)\n\n### Setting up the the DHCP server\n\nDD-WRT uses dnsmasq for DHCP, so if you have a system which uses it too it shouldn't\nbe too much different to setup. Watch out, though! I initially screwed up my configuration\nwhich really messed with my router.\n\nAll you have to do is add a line to the Additional DNSMasq Options found under the Services\ntab. If you're running plain dnsmasq, just add the line to your dnsmasq.conf file. The line\ngoes a little something like this:\n\n dhcp-boot=pxelinux.0,mybox,10.0.0.100\n\nwhere pxelinux.0 is the file to boot, mybox is the hostname of the tftp server, and 10.0.0.100\nis the IP address of the tftp server. You could probably get away with only specifying the\nhostname or just leaving it blank and supplying the IP address. You can also get more fancy\nand send certain boot images to certain machines, etc. This way works just fine on a home\nnetwork like mine.\n\nOnce you get this all setup, any machines that try to PXE boot will receive the image and\nboot to it. If you used the Ubuntu install image like I did, you'll be able to install Ubuntu\non any PXE-capable machine or even boot into a rescue shell! Just remember that if you can't\nsetup a boot order (like my Proliant) make sure to disable the PXE boot in dnsmasq before rebooting.\n"},{"date":"2009-04-17T00:00:00.000Z","tags":["servers"],"title":"New Server","blurb":"Thanks to a generous donation from [Richard Allen](http://rsaxvc.net/), I now have a new server.\n","body":"Thanks to a generous donation from [Richard Allen](http://rsaxvc.net/), I now have a new server.\n\n\n\nIt's a Compaq Proliant DL360. From what I can tell of it's past, a place where another\nfriend of mine was working was getting rid of their old hardware and he snagged a bunch.\nRichard got some of the servers, had no use for this one, and then gave it to me a couple\nof days ago.\n\nIt's probably a first generation DL360, but that doesn't mean it sucks. It's got dual\nPentium IIIs running at 1.266 GHz each, 512 MB of RAM, and two 18.3 GB SCSI drives running\nin RAID1. It's quite an upgrade from my current server, which is dual P3 450 MHz with a\nlittle less than 512 MB of RAM. The best part of the whole thing, though, is the Remote\nInsight Lights-Out Edition II card that came with it. It's a PCI-X card that redirects\nvideo, keyboard, and mouse from the system and supplies it to a web interface. This means\nthat no matter where I am, I can get a physical terminal to my server. Plus, if I plug an\nexternal power supply to it, I can even turn on my server remotely!\n\nI'll probably be moving everything from my current server over to the new one. Since I'm\nmirroring and then cutting over, there shouldn't be any problems with any of the services\nthat my box supplies.\n"},{"date":"2009-04-15T00:00:00.000Z","tags":[],"title":"New Website","blurb":"So, I've decided to redo my website again. My old one was pretty bland and\nupdating stuff was a relatively a pain. Plus, I seem to be doing more interesting\nthings and having more interesting thoughts (hopefully) than I have in the past\ncouple of years. Of course, I am a Computer Engineer (aka nerd), so don't expect\nto see anything like me pondering the wonders of the cosmos here. I'll probably\nmostly post updates on projects I'm fiddling with, my struggles with technology,\nand what I've been up to.\n","body":"So, I've decided to redo my website again. My old one was pretty bland and\nupdating stuff was a relatively a pain. Plus, I seem to be doing more interesting\nthings and having more interesting thoughts (hopefully) than I have in the past\ncouple of years. Of course, I am a Computer Engineer (aka nerd), so don't expect\nto see anything like me pondering the wonders of the cosmos here. I'll probably\nmostly post updates on projects I'm fiddling with, my struggles with technology,\nand what I've been up to.\n\nAs you can see, I decided to go with WordPress. I used it a long time ago, but\nafter seeing my roommate [Ben Murrell](http://benmurrell.com/) use it on the [Missouri S&T ACM site](http://acm.mst.edu/)\nand seeing what it was capable of, I went for it. Probably the most important\nthing for me was the ability to have static pages and link to them in a reasonable\nfashion (as you can see along the top and right sidebar). It just does everything\nI want to do without too much fuss, and it looks pretty while it does it.\n\nI'm still moving stuff from my old website and updating information, but feel\nfree to poke around in the meantime.\n"}],"tags":["servers","linux","idd","programming","networking","cooking","beertraq","car","htpc","beer","git","games","ipv6","bike","touring"]}