CategoryUncategorized

Things

Meteor on Windows – My Experience (So Far…)

I’ve had several conversations online and off with people using Windows, and the consensus is that the (vocal) Meteor-on-Windows community is small, and everyone has their own particular environment.  Many common issues arise, though, so I want to share some of my experiences should anyone else in Windowsland come across them.  It’s a little haphazard, and there might be better ways of doing things, but here it is.  Please comment with any tips or advice.

Meteor Development on Windows 7

I use Windows 7 at my job. I’ve never used Windows 8 or 10, so I don’t know how well they will work, but they should.  The official Windows installer from Meteor has worked just fine for me.

MongoDB

The only thing I change about the default Meteor setup is installing a persistent version of MongoDB (as a Windows service) so I can browse, dump, and restore data when Meteor is not running. To do this yourself, create an environment variable called MONGO_URL and set it to the URL of your running mongo instance.

I’m currently running Mongo 3.0.8 locally, and have not yet tried 3.2.

JetBrains

For my IDE, I use JetBrains products (WebStorm and IntelliJ IDEA).  The Meteor support is top-notch.  Project setup is a breeze, code highlighting is great, clicking on template items will bring you to your helper functions, etc…  The main benefit, though, is the debugger.  You can live-debug, trace, and place breakpoints on both client and server code – all in one handy interface. Webstorm is super cheap, and 100% worth it.

Building a Meteor App on Windows 7 (64-bit)

Running

meteor build

is where the pain begins. There are a few things that need to be done before successfully extracting a working bundle from Meteor in Windows.

An when I refer to meteor build, or bundle, I am referring to the output of the command:

meteor build --directory c:\mymeteorapp

More Environment Vars

You need to set ROOT_URL to http://localhost (or whatever you want) and PORT to a valid port number if you want something other than 3000. I use port 3030 so the bundled app doesn’t conflict with the development version running on port 3000.

If you are using Meteor settings, the entire json block needs to be stringified and pasted into the METEOR_SETTINGS environment variable.

The following Powershell 3.0 snippet will do this for you (assuming you run these commands from a directory with a file named settings.json):

$settings = Get-Content settings.json -Raw
$settings = $settings -replace "`n","" -replace "`r","" -replace " ",""
[Environment]::SetEnvironmentVariable("METEOR_SETTINGS", $settings, "Machine")

Please note, I am no Powershell expert (or even a novice).  Use at your own risk.

Build Dependencies

Visual Studio.  In order to build the fibers module (and possibly other node extensions), you’ll need some build tools.  I currently have Visual Studio 2013 AND 2015 (free Express/Community editions) installed locally.  I’m pretty sure you only need 2015, but remember to check the c++ build tools options when installing.  You don’t actually have to open Visual Studio, just have it installed.

Python. Also, Python 2.7 is a requirement. So install Python 2.7.

Node.js. You probably have NodeJS installed, but Meteor expects 0.10 (32-bit).  I’m using 0.12 (64-bit), which has gone OK so far aside from the problems listed below.  I have no idea about 4.2, or 5+.  If you want to keep your precious bleeding-edge versions of Node, I highly recommend using this: https://github.com/coreybutler/nvm-windows.

Situational Build Dependencies

NPM3. If you have any Meteor packages that include a very deeply nested set of node_modules dependencies, then you are going to run into the 256 character limit for file directory paths in Windows (still a thing after all these years!).  Go ahead and install npm3 (and make sure it’s install directory is included in your PATH), and we’ll use it later. To install npm3, use npm!

npm -g install npm@"3.3"

or check the GitHub wiki.

64-bit bcrypt.  If you are using meteor-accounts, then the bcrypt module is required. Because the Meteor dev environment uses a 32-bit version of node, a 32-bit bcrypt module is included with the build. To get a 64-bit version of bcrypt, you need to install Win64OpenSSL. Then go to an empty directory and install bcrypt with npm like:

npm install bcrypt --openssl-root="C:\some\other\path\to\openssl"

then dig around in the node_modules folder until you find bcrypt_lib.node. Hang on to it for later. This GitHub issue has some nice background info.

Meteor Build

Take a deep breath and run

meteor build --directory "C:\yourbuilddir"

 This will do a bunch of things, and hopefully spit out a node application in C:\yourbuilddir.  You’re not out of the woods yet.  Go into

\bundle\programs\server

and run

npm install

.  More things will happen.  Hopefully without error (and only a handful of warnings).

If you are using bcrypt, enter the build directory and find: bundle\programs\server\npm\npm-bcrypt\node_modules\bcrypt\build\Release\ and overwrite the bcrypt_lib.node file there with the one you installed earlier.

To run the app, go into the \bundle directory and run

node main.js

from CMD. If you don’t get any ugly errors, try navigating to http://localhost:3000 (or whatever is specified in your env vars) and see if your app works.

Fixing the 256 character file-path limitation

Your Meteor app should run in place, even if you have some insanely long file paths.  However, copying, deleting, and pushing to a remote repo will cause problems.  The basic fix for this is to go into the offending package, delete the node_modules folder, and rebuild it with NPM3 so it uses a flat folder structure.  There are two ways (that I’ve found) to fix this problem…

If you are developing alone on a single PC, you can simply go to your global packages directory (e.g. C:\Users\<username>\AppData\Local.meteor\packages) and find the offending package with a long dependency chain.  Remove the node_modules folder, and run npm install to rebuild it with a flattened dependency tree.

This becomes problematic when updating modules or developing with a team.  Everyone will have to remember to do this every time the module is updated.  An alternative is to rebuild node_modules folders after meteor build has run.  Then it can be an automated part of your build script.

After running meteor build, go into c:\<yourbuilddir>\bundle\programs\server\npm\<package>\node_modules\<an-npm-module>\ and delete the node_modules folder.  Then run npm install from the same folder.  NPM3 should take over and install a flattened dependency tree.

Running the build

Go into C:\<yourbuildfolder>\bundle\ and run

node main.js

You should see a blinking cursor. This is good.  Open a browser and go to http://localhost:3030 (or whatever you specified in your environment vars) and hopefully see your app running.

Coming soon… Deploying this to Windows Server 2012 behind IIS. 

Nodevember 2014

In November of 2014 I was lucky enough to speak at the inaugural Nodevember conference in Nashville, TN. The conferenced focused on Javascript and Node.js development, and I gave a 45 minute presentation on Socket.IO. It was the first time I’d given a talk outside of Memphis, and the largest audience I’ve ever spoken to. I was pretty nervous, but I had plenty of time to prepare, and the conference was very well run and provided a comfortable speaking environment.

The conference organizers did an amazing job of pulling in attendees and speakers from the local community and around the coutry alike. I had a great time meeting new people and sharing ideas with such a diverse crowd of Javascript enthusiasts. I definitely will be attending next year.

The slides from my talk are online (above) and a video of the talk is available on YouTube (below). The first few minutes of the talk were cut off and some of the audio is missing. It’s unfortunate, as the intro to the talk is, in my opinion, the section I’m most proud of, but alas. Many more established conferences with much higher budgets don’t even bother to record all the talks, let alone post them online for free. Enjoy!

TechCamp Memphis 2014

TechCamp

A first-person view of my TechCamp 2014 experience. For a more comprehensive look at the day, check out the #TechCampMemphis tag on Twitter and the official TechCamp website.

Breakfast

This was my first year as a TechCamp volunteer, so I arrived bright and early on a frigid (for Memphis) morning to help set up. Lucky for me, Brittney’s Bites catored breakfast, and I got first dibs on the cinnamon rolls.

Key Takeaways:

  • Cinnamon Rolls are awesome
  • I still despise cold weather

The Keynote

Brian Swanson started off the day with a touching dedication to the late Dave Barger – originator of Tech Camp and champion of the Memphis Tech community – and a moment of silence to #RememberDave. We all hope to continue raising the the tech tide with the spirit of Dave at our side.

Following Brian was a keynote address by Chago Santiago – former VP of IT at AutoZone. Unbeknownst to most of the crowd, Chago spent a good portion of his career as an Air Force officer at NORAD protecting us from Soviet aggressors, rubbing elbows with Margaret Thatcher, and observing unidentified flying objects from outer space (which he will neither confirm nor deny).

Mr. Santiago had some very compelling anecdotes from his career and always made a point to relate them to his key points of building a successful career in tech:

  • Always keep learning
  • Take advantage of opportunity
  • Don’t be afraid to take risks

A few surprises from his talk stuck with me. He made an important distinction between programming and software engineering in that programming without a process is similar to creating a work of art – it takes a lot of personal creativity, but the result is often highly personal and cannot be deconstructed and changed for the future. A work of art is static, whereas and engineered solution is part of a process that allows for constant change.

Also, he mentioned that Memphis is fertile ground for tech talent, and that he had no trouble hiring capable employees at AutoZone. He gave a clear message to ‘stay put’ if you are looing for opportunities in tech.

Unfortunately the morning time slot was only 45 minutes total, with 30 dedicated to Chago’s talk. It seemed that just as he was hitting his stride, it was time to go. Hopefully this won’t be the last we hear from him.

Key Takeaways:

  • Dave Barger is sorely missed.
  • Wildly successful careers in tech are possible in Memphis.
  • Attitude is just as important as ability in shaping a career in technology. Unpleasant challenges should be viewed as opportunities for change and innovation.
  • Programming is only a small part of software engineering.
  • 30 minutes is not adequate for a keynote address.

###Dev 101

My morning was spent in the Developer 101 track acting as a mentor and facilitator. The session was intended to allow attendees to complete a set of self-directed tutorials prepared by Gerald Lovel with the guidance of several mentors. The tutorials are all available on Geriald’s website at develop.aaltsys.info. Gerald and I were able to round up a set of linux machines to provide a clean slate for students to utilize for the lessons as well.

The actual attendance was pretty low, however, and at one point there were more mentors than students. It turned out OK, as the attendees that did show up all got one-on-one attention.

I spent the marjority of the time working speaking with a young fellow looking to get started in a career in web development. After running through one of the prepared lessons, we chatted a bit about self-learning, the job market, and poked around with a little bit of code.

Despite the low turnout to the Dev 101 session, I still believe there is a demand for tech/dev related tutorials, workshops and educational events. Hopefully the newly formed Memphis Technology Foundation can shine a light on local programs that already exist, and help kickstart new initiatives for providing tech training in Memphis.

Key Takeaways:

  • Promote your event in advance to get people to show up.
  • People eager to learn make good students.
  • Self directed learning is hard, but finding (affordable) formal tech education is also a challenge.

Lunch

Three years ago at TechCamp I went through the buffet line and faced a not-uncommon problem for introverts around the world – take the safe route and sit alone, or swallow my anxiety and sit with strangers. I don’t actually remember what I did then, but this year I had a completely opposite conundrum…

Over the past two years, I’ve attended user groups, social events, tech events, and even started a new meetup group. In other words, I dove head first into the #memtech community and was repaid in kind with a great group of friends and acquaintances.

So this year after I worked my way through the BBQ buffet line I was greeted with a room full of familiar faces, and my challenge was to decide which of these great folks I should sit with. It was nice.

Key Takeaways:

  • The Memphis Tech Community is welcoming and friendly.
  • I have a real problem saying no to a third helping of pulled pork.

Brad’s Marketing Talk

The first session I was able to attend was given by Brad Montgomery entitled, “My Startup Failed and It’s All Marketing’s Fault.” It was a poignant account of the rise and fall (mostly fall) of his startup company Work For Pie and a cautionary tale for new and existing entrepreneurs to pay more attention to marketing.

Tales of personal suffering are always captivating, but aside from that, Brad has a knack for public speaking and definitely continued his tradition of excellent presentations. It takes guts to admit failure, and a special kind of person to not only learn from his own mistakes, but help others learn from them as well.

Key Takeaways:

  • Engineering as Marketing is a thing. Widgets, APIs and micro-sites are effective marketing tools.
  • Many (most?) hugely successful startups achieved massive growth through strategic partnerships. And nobody talks about it.
  • Making mistakes and failing at stuff sucks. But you learn and move on.

Daniel’s Funhouse

The second session of my afternoon was Daniel Pritchett’s Stupid Programming Tricks workshop. Daniel did his best to live code and demo some fun hardware/toys, but as anyone who has ever presented at a tech conference knows: live demos and code will never, ever work, no matter how many times it was successful at home.

Here’s the best part, though. As Daniel was presenting, members of the audience wouldn’t hesitate to troubleshoot and shout out suggestions. Not only that, a few people got up and jumped into the drivers seat to fix some Sphero code, or volunteer an API key, or help hook up some wires to apples and bananas, or present the latest greatest IRC bot script.

It was less of a presentation/workshop, and more like a bunch of pals hanging out in someone’s garage tinkering around with toys and code. I’m not sure if this as Daniel’s intent, but it was a lot of fun and I commend him for taking a risk on a more ‘interactive’ format for his session.

Key Takeaways:

  • Using fruit as a keyboard is generally a bad idea.
  • I need to spend less time working, and more time in IRC.
  • Twilio makes it way too easy to make prank calls.
  • I’m not the only one who has no idea what to do with Sphero.

Nathanael Talks About SVG

The third and final presentation I attended was given by one of my co-workers, Nathanael Smith. His presentation on using SVGs on the web was jam packed with useful information and practical tips on using vectors in a web project. And for someone relativley young and new to conference speaking, his delivery and content were pretty spot-on.

The only problem was hardly anyone was around to hear it :(

There were about three attendees in the audience that weren’t Nathanael’s co-workers. From what I gathered, most of the other sessions were just a sparsely populated. A good portion of the 80+ conference-goers for the day had decided they’d had enough, which was a shame. Lucklily Nathanael is a good sport, and we can probably provide a bigger, better audience at a Web Workers meetup sometime in the near future.

Key Takeaways:

  • You absolutely should be using SVG on your website.
  • Vector animation is neat, and no longer requires Flash.
  • We need to figure out a way to keep people from leaving TechCamp early.

The End

By the time the closing remarks rolled around, the crowd was mostly organizers, volunteers, and #memtech regulars. We congratulated ourselves on a job well done, and helped ourselves to leftover T-Shirts.

Overall I think the day was a success. A few hiccups are natural to an all-volunteer event. The mission of preserving the momentum started by Dave Barger and inducting a new generation of TechCamp organizers was accomplished. Until next year!

HACKmemphis 2014

hackmemphis

This year I attended HACKmemphis for the first time, and it did not dissappoint. Several of my coworkers were on the planning committe with Svpernova09 leading the charge. They did an amazing job putting on a weekend event for the Memphis tech community.

The hackathon kicked off Friday night, and I had two goals in mind:

  1. Make some progress on a ‘day-job’ related project.
  2. Polish up my upcoming talk for Nodevember.

Neither of these things happened.

The draw of the 3D Printers, Raspberry Pi’s, various doodads and thingamajigs, and the energy of the crowd in general was more than enough to pull me away from any ‘real’ work. During the brainstorming session, I came up with an idea that would allow me to play with as many things as possible in the shortest amount of time…

The Project

The result of my weekend hackery was an internet connected ‘meter’ that would indicate the intensity of Tweets with a given hashtag – a.k.a. the Tweet-O-Meter.

For the demo, I had the needle move forward (clockwise) every time someone tweeted ‘HACKmemphis’. The needle would recede every few minutes if a tweet didn’t appear.

tweetthing1

Above is an early prototype that barely functioned Saturday evening. The software worked, and the meter indicator was a high quality mix of cardboard, paper and tape.

Below is the “finished” product with a freshly printed needle and a tablet based dial (that also displayed the most recent tweet). Photo credit: George Spake.

tweetthing2

During Sunday morning’s show and tell session, the HACKmemphis Tweet-O-Meter demo went off without a hitch. Mission complete!

The Nuts & Bolts

Hands down, the best aspect of this (or any) hackathon is the collaboration. Event though I largely conceived of and built the Tweet-O-Meter myself, I couldn’t have pulled it off without input and assistance from the other attendeeds.

The Raspberry Pi and servo were graciously donated by the HACKmemphis sponsor SparkFun, and the representatives from GitHub (@jfryman and @james_s_white) lent a helping hand getting it wired up.

The software running the show was all open source. NodeJS provided the plumbing, and the Cylon.js library helped get the parts moving.

Claudio D. whipped up a custom 3D model for the meter in a frighteningly short amount of time. The Mid South Makers brought a phalanx of 3D printers and were gracious enough to print all the necessary bits and peices for the Tweet-O-Meter, including:

  • A custom stand / servo enclosure
  • A custom needle (inconspicuously shaped like a certain web angency logo)
  • A Raspberry Pi case

raspi

Also, for much of the weekend, I had a partner in crime (Jonathan L) building a mirror project with an Arduino instead of a R.Pi. Although we diverged quite a bit in our implementation, it was still very much a collaborative effort. There was plenty of back-and-forth and sharing of ideas.

Our code is up on GitHub for the curious:

Fellowship of the Nerds

Aside from smashing my fingers on keyboards, staring at glowing screens, and poking at Raspberry Pi pins, I did plenty of wandering around, eating, drinking, and carrying on with other attendees. There were plenty of familiar faces, but many new friendly folks to chat with as well. Thursday night’s GitHub sponsored drink-up was also super fun.

nerds

All-in-all, a great experience. The organizers did an amazing job, and I’ll be looking forward to next year.

Ghost: Just A Blogging Platform: Of the Future

Starting a blog is not difficult. Any Joe Schmoe can start plopping ideas into the public realm with just a few mouse clicks. There are many, many tools available to get a blog rolling: WordPress has dominated the self-hosted blogging landscape for years, Tumblr is ultra-popular with certain crowds, and for some reason people still use Blogger. The landscape is changing, though. Hosted blogging services like Tumblr and Posterous are traded like horses, with users left in the dust in some cases. Also, the WordPress feature set has vaulted beyond blogging tools, and is quickly becoming a full-blown content management system capable of building just about any type of website.

So what is the average blogger to do? Risk investing time and energy into a blogging service that may wind up as a minor acquisition of AOYahooSoft? Or dig through the complexity of WordPress’s ever expanding administration menus? How about neither? A new kid on the block just showed up with two fistfulls of awesome…

Ghost.

Ghost is a new open source blogging platform dedicated solely to dead-simple publishing. It’s goal it to let writers write, and have fun doing it. No crazy heirarchy of menus to wade through, no finicky wysiwyg editor mangling HTML, nothing to worry about except creating delightful posts. Every feature going into the initial release of Ghost will exist to support the prime directive of presenting a sensible, comfortable, and useful writing environment for the web.

The underlying technology powering Ghost will be an example of simplified elegance. NodeJS will act as the foundation, and the Express framework, JugglingDB ORM, and Handlebars template system will provide the scaffolding. This means that 100% of the Ghost platform will be written in a single language – Javascript.

The benefits of using one language for the full stack are obvious. I, personally, would love to focus my attention on one language when creating an application. But there are naysayers out there who would argue that NodeJS is just not the right tool for building a blogging platform, and Ghost would be better served by established frameworks like Rails, Django, or any number of PHP packages. This attitude is a bit short-sighted, in my opinion. If 37Signals thought like this, Basecampe would have been written in PHP, and Ruby might still be an esoteric language on the fringes of the web development world. It is projects like Ghost that will bring Node from marginal to mainstream.

We’ll have to wait a few months, though, as Ghost is still in its infancy. As of this writing, the Kickstarter campaign is reaching its end and is getting close to the stretch goal (after eclipsing the original goal 7 times over). Backers (including yours truly) will get early access this Summer, and the general public will get their hands on it in November. Not only will the code be open source, but a non-profit organization is being formed as we speak to provide reasonably priced blog hosting a-la WordPress.com. Because the service is formed under a non-profit, the risk of acquisition is minimal.

There is a good amount of promotional material available on the Kickstarter page, and the official website. I highly encourage taking a look, especially for anyone with even a passing interest in web publishing. Personally, I’m betting on Ghost as the next big thing, and in five years this post will be proof that I totally called it. Internet hipsters, eat your hearts out.

Triple Booting my PC with OSX Lion, Windows 7, and Lubuntu 12.04

My computer has three operating systems.

“Why do you need three operating systems?” one might ask.

First, because it’s cool, but mostly because it is quite practical for web and mobile development and playing games.  Linux and OSX are both great environments for trying out new-to-me technologies like node.js, Ruby on Rails, MongoDB, and all sorts of hackerish command line tools.  OSX has the added benefit of being able to deploy apps directly to my iPhone (as well as being the prettiest of the OSs).  And when it comes to playing the games, nothing beats Windows. OSX is starting to get some love from Steam, and quite a few interesting indie releases show up on Linux, but if you want a guaranteed awesome PC gaming experience, you need Windows.

Also, from a web-development standpoint, the ability to do cross-browser testing comes in very handy.  Plus, there are no development tools that are off-limits because the author decided to only release a Windows or OSX version.

So here is a basic rundown of my system, and how it was put together.  Rather than develop a detailed howto, I’ll leave it to the many talented bloggers out on the internets to provide the step-by-step.

Required Hardware

The most important element by far when installing OSX on a non-Mac is the motherboard.  It’s like the foundation on a house – it needs to be sturdy or everything comes crashing down.  Luckily, when I built my PC in early 2009, I purchased an Asus p6t, which just happens to be very compatible with OSX – as does the nVidia graphics card I picked up.  Apparently Gigabyte mobos are all the rage with the hackintosh crowd, so if you are in the market for a new build, or want to check your current hardware, see the following links when considering hardware:

And if you are wondering if your existing hardware works, take a look at the following:
As for Windows and Ubuntu, most mainstream motherboards are accepted, but check your manufacturers website for compatibility information.  Also, for discrete graphics in Ubuntu, go with nVidia, as they still support linux with proprietary drivers.

Installation Media

  • OSX: 8GB or larger USB thumb-drive
  • Windows 7: 8GB or larger USB thumb-drive or blank DVD
  • Lubuntu: 1GB thumb-drive, blank CD, or blank DVD
Preparing a bootable USB drive with OSX Lion is definitely the most inconvenient step of the whole process.  The ideal situation is to have a retail copy of OSX Lion, and an actual Mac available for temporary use. I actually cheated and had a friend at work create the OSX Lion installer for me (using his own hackintosh).  Luckily, there are scads of online tutorials for creating a Lion USB installer using a nifty tool called UniBeast.
Once the OSX USB drive is created, download MultiBeast and copy the file to the USB drive. This will be needed later.
Preparing  Windows and Ubuntu installation media is less of a task.  Because Windows 7 is a commercial operating system, you will need a licensed copy.  I purchased a copy when it was released, but others may have an OEM version baked into a manufacturers recovery disc.  If this is the case, you can get a clean Windows 7 ISO for re-installation from Microsoft.  There’s a great tutorial on how to re-install Windows at PC World.  Creating a disc or USB drive for Ubuntu couldn’t be easier.  Simply visit the Ubuntu download page and follow the instructions for your chosen medium.

Adjust BIOS Settings

Unplug any hardware that is not necessary for the installation of the operating systems (extra hard drives, USB hubs, printers, etc…).  Some BIOS settings may need adjusting as well.  If available, make sure the following settings are true:

  • Quickboot is disabled
  • SATA is set to AHCI rather than IDE
  • The primary hard drive has priority and is the first boot device (or 2nd behind the optical drive)

Prepare Hard Drive

Once all the installation media is ready to go, the targeted hard drive needs to be properly formatted.  Because OSX is very finicky about drives and partitions, you must use the OSX disc utility to format your drive.  In my case, I created five partitions on my 1.5TB hard drive.

  1. Insert the OSX Usb stick, power on, and tap the key for the alternative boot menu (F8 on my system)
  2. Boot the USB Disk containing OSX Lion and wait for the installer to load
  3. Open Disk Utility from the Applications menu
  4. Select your hard drive in the left-hand column
  5. Under Volume Scheme: separate the drive into at least 3 partitions.  I use 4 partitions (one for each OS, plus a shared FAT32 drive for file storage).
  6. Click Options… choose GUID Partition Table, then click OK.
  7. Click the first partition (Untitled 1). Type LION for the Name. Choose Mac OS Extended (Journaled) for the Format.
  8. Click the next partition (Untitled 2). Name = WINDOWS7, Format = MSDOS (FAT).
  9. If you have an extra partition for shared files, do the same for Untitiled 3. Name=FILES, Format=MSDOS (FAT)
  10. The last partition must be free space.  It is important that the last partition is free, as this is where linux partitions will go.  Leaving it at the end of the disk will make things go more smoothly during the linux installation.
  11. Click Apply and close Disk Utility
  12. Shut Down (do not proceed with the installer)
Again, check out TonyMacX86’s blog for a nice guide on setting up a hard drive for multiple OSs.  The article refers to Snow Leopard and dual booting, but many of the steps are identical to my setup.  The key is to set up the partitions first with Disk Utility, then instnall Windows and Ubuntu before OSX.

Install Windows 7

After setting up the hard drive partitions in the OSX Disk Utility, it’s best to set up Windows 7 next, as it has the most intrusive bootloader – which will get overwritten later.  Start this process with the PC shut down.

  1. Insert the Windows 7 installation media (USB or DVD).
  2. Power up and boot into the Windows Installer.
  3. Choose Custom (Advanced) for the installation type.
  4. When presented with a list of drives, select the ‘WINDOWS7’ partition.
  5. Click Drive Options (advanced)
  6. Click format.
  7. Click next.
  8. Windows 7 will now install itself.  You may need to remove the installation media if the PC is set up to auto-boot from the Windows 7 disk.
  9. When installation is complete, set up Windows, or Shut Down.

Install Ubuntu / Lubuntu

  1. Boot with the Linux installation USB or CD.
  2. Select ‘Install Ubuntu to the local hard drive’ option (or something similar)
  3. At the Allocate Drive Space screen, choose  Something Else.
  4. Under /dev/sda click free space. (If you have more than one hard drive, choose the free space on the appropriate drive).
  5. Click Add…
  6. Type for new partition: Logical
  7. New Partition Size in Megabytes: Set this to the amount of RAM in your machine (e.g. 4096)
  8. Location for new partition: End
  9. Use As: swap area and click OK.
  10. You should see the swap space appear in your drive list. Click free space again.
  11. Click Add… again.
  12. New Partition: Logical
  13. New partition size in megabytes: it should default to the maximum space available. If not click the up arrow until the number no longer changes.
  14. Location for new partition: End
  15. Use As: Pick Ext4 if you work with huge files or need extra fast performance.  Choose Ext3 if you want to access the linux file system from OSX (and possibly Windows with the right tools).
  16. Mount Point: Choose  the forward slash – 
  17. Click OK.
  18. Device for boot loader installation: Choose the large linux partition that you just created (e.g. /dev/sda4).
  19. Click Install Now
  20. Proceed through the Ubuntu installation
  21. Shut down
Here’s a nice guide with screenshots for installing Ubuntu. Just remember to use the end of the drive.

Install OSX Lion

  1. Remove the Ubuntu installation media, and insert the OSX USB drive.
  2. Boot the computer with the USB drive and enter the OSX Lion installer
  3. Proceed through the installation process.  Be sure to select the LION drive as the target for installation.
  4. When the installer ends, you will be at the Mac desktop.
  5. Copy the MultiBeast file from your USB drive to the desktop (or download it if you have internet access)
  6. Install and run MultiBeast.
  7. Here is where things get tricky.  Everyone has different hardware, so there is no magic bullet.  I selected EasyBeast to get the absolute necessities, and then chose specific options for audio and ethernet.  Check this guide for a great explaination of the MultiBeast options.
  8. Reboot.

Win!

© 2017 Eric Terpstra

Theme by Anders NorénUp ↑