Found some old screenshots…

When I first came to Penn, the website for the Nominations & Elections Committee looked like this:

Old NEC site circa 2011
No, this wasn’t the year 1999… this was in 2011.

NEC website redesign

I set out to redevelop and redesign this, upgrading it from a static HTML site edited over SFTP to a WordPress CMS on Canvas. More importantly, the website redesign in 2012 needed to fit the rebranding that Penn underwent that academic year. In other words, I wanted it to look more like the university’s design. (An email to the Communications office responsible for web assets clarified that we could, in fact, do this.)

Continue reading “Found some old screenshots…”

Installing Fedora 20 as a paravirtualized guest in XenServer with kickstart

Anaconda beginning installation of Fedora 20 in XenServer

Updated 2014-07-13 with corrected links to develop-branch version and GitHub’s new user content domain name.

Updated 2014-07-17: see this newer blog post for instructions, kickstart scripts, and prebuilt images for CentOS 7 and Ubuntu 14.04.

Backstory

Earlier this year, I installed Xen Cloud Platform (XCP) 1.6 on an off-lease Dell CS24-TY with two quad-core Intel Xeon CPUs and 72 GB of RAM. (Those machines are sold by Dell Financial Services and on eBay for unbelievably low prices, for previous generation servers of such capability.) When Citrix open-sourced XenServer, I decided to upgrade XCP 1.6 to the full-featured XenServer 6.2.0 SP1, which added a few formerly-proprietary features for larger pools (which I do not have) and improved guest support for various OSes including Windows 8/Server 2012 among other changes.

At the same time, I started looking at switching domUs from Ubuntu—which worked great, by the way—to Fedora. This was purely due to personal preference, given my penchant for keeping software up-to-date even at the risk of instability, not any failings of Ubuntu.

The issue, of course, is that Fedora isn’t supported out of the box by XenServer or its management console XenCenter, and the wealth of knowledge out there typically pertains to older versions of Fedora and XenServer. Some IT firm even posted a tip to use the “Other install media” option for installing Fedora 20, which practically defeats the point of using Xen virtualization, since that creates a fully-virtualized guest (HVM) rather than a paravirtualized domU.

So I set out to update the existing methods of installing older versions of Fedora as a paravirtualized guest to the new release, Fedora 20 “Heisenbug”.

Credit where credit is due

I’m a sucker for giving credit to everyone and anyone, but in this case a few sources really formed the basis for what I’ve done:

Needless to say, both of these sources are super helpful, although none of them really work out of the box for what I’m doing.

The modified kickstart file

If you’re already experienced and you’re just looking for the kickstart, here it is. For installation instructions, see below.

I’ve created a GitHub repository for these, and I might add files for RHEL/CentOS 6.5 in the future, too.

Here’s the master-branch version: (if you’re adventurous, try the develop-branch version)

[github file=”/frederickding/xenserver-kickstart/blob/master/fedora-20/f20-server.ks”]

The master-branch files are typically tested, while the develop-branch files may introduce new features that are not yet fully vetted. (As the MIT License describes, everything is provided with no guarantees.)

The basic idea behind the post-installation script here is to create a legacy GRUB menu.lst file, which pygrub on XenServer can interpret to boot into a paravirtualized guest.

Update: now, the post-installation script doesn’t bother with a fake menu.lst at all, and instead makes GRUB2 configuration files. Based on reports that making slight alterations to the autogenerated GRUB2 grub.cfg file to make it compatible works, and based on the changes made to pygrub in upstream Xen (which have not yet been integrated into XenServer 6.2.0 SP1), I made the script tweak GRUB2 files and regenerate a grub.cfg with grub2-mkconfig. This should be robust enough to support future kernel updates!

How to use this kickstart (with screenshots!)

This procedure assumes that you’re familiar with XenCenter and have it running already. Continue reading “Installing Fedora 20 as a paravirtualized guest in XenServer with kickstart”

When NOT to use Flash

I’m calling out The Daily Pennsylvanian for worst uses of Flashever. Flash animations make sense when interactivity is demanded, and only then, in rare cases.

A couple of months ago, this happened: a post lauding the university for winning the 2012 CIO 100 Award for mobile-friendly sites, using Flash as the only content on the page:

The irony.
The irony.

To top it off, guess what the mobile site shows on a phone?

Mobile friendly, my ass.
Mobile friendly, my ass.

Yeah, that’s right. A blank article.

I wouldn’t be so mad if it were a one-time thing. But then this illustration of our commencement speakers was published this week:

You can't think of a way to present this well with a table?
You can’t think of a way to present this well with a table?

Again, a blank article shows on mobile. And it’s not just my phone that does this: development of Flash for mobile was halted nearly 2 years ago, and iOS has clearly not had Flash since the start.

But my gripe isn’t with Flash itself, or even with mobile compatibility — I’m just upset that people are using a medium that doesn’t make sense for things that shouldn’t even be interactive. I get it; college kids like to play around with software, or whatever. But you guys gotta stop this.

Day 1: Browsing Wuxi

I have neglected this blog for so long that I owe it to myself to post some more stuff here. Since I’m in China for about two and half weeks, I might as well blog about it — complete with photos*.

* I apologize in advance: most of the pictures are low quality photos from my cell phone.

Purchasing Power Parity and Prices

From what I saw yesterday (let’s call it Day 0), items that are cheap in Canada and/or the United States can be insanely expensive here, while others that are reasonably expensive in Canada are dirt cheap here.

There’s a supermarket / department store chain called Carrefour that has everything imaginable, from imported milk to cell phones to oranges to suitcases. Asian ice cream bars can cost as little as $2 CAD for a package of multiple bars, while I saw a knife priced over ¥1500 and woks up to ¥809.

Expensive wok in China -- ¥809
Really expensive wok in China -- ¥809. I guess some Westerners might be willing to pay the equivalent amount in USD for their pans, but this is still really high.

Aside: there’s an abundance of Engrish products, like “Woman Honey” and “Cuboid Sausage”.

Yet cab rides in Wuxi are dirt cheap. ¥15 brought four people from one side of town to the other — and I would probably estimate a bill of $15-20 USD (+tip) for the equivalent ride in Philadelphia. (I sometimes wonder how that money can possibly be enough to cover the insurance needed for such risky driving.) I’m told that public transit is even cheaper — something like ¥1 fares, not to mention seniors ride free.

The problem with the high prices here (inconsistent with purchasing power parity, which suggests that the price of a good here should be roughly the price of a good in Canada, for example, times the exchange rate) is that incomes are also lower in comparison. When nominal wages are low and prices are high, we come to the uncomfortable conclusion that real wages remain incredibly depressed for most citizens, and the inevitable result that the ordinary standard of living here still falls behind Canada and the US.

But food can be cheap

A bowl of wontons for breakfast

Restaurants can be pretty cheap. For breakfast today on Day 1, I went somewhere that is held in high regard for this particular type of breakfast/dim sum. ¥8 for a bowl of wonton, or for four meat buns (小笼包).

Steamed meat buns from Wuxi
Delicious meat buns, with a unique Wuxi recipe.

Aside: to eat 小笼包:

  1. Pick up carefully with chopsticks from the tray seen above.
  2. Bite a small piece, preferably in the lower half, on the side.
  3. Without letting go, suck out the juices inside. (Caution: may be hot!) There’s a lot of it, and it tastes so good — it would be wasted if you ate the bun normally and let it leak out.
  4. Bite and chew rest of the bun as you might ordinarily do.

Aside: I thought this was tea — but it’s actually vinegar.

In essence, a delicious breakfast meal can be had for $3-4 USD — under the price of a Starbucks mocha in North America.

Road rage is normal

I’m a little afraid to be on the road here.

  • As a pedestrian accustomed to drivers yielding the way, I’m likely to get injured, because here, people have to yield to cars, for the simple reason that the cars drive aggressively.
  • As a rider in cabs, I’m afraid every time the taxi makes a turn, because it always feels like we’ll hit a bike or a pedestrian. Every lane change is practically cutting someone off. And on at least one occasion, the driver has gone onto the opposite side of the road to bypass really slow cars.
  • There is no f’ing way I would drive here, or even survive trying.

Also, there are mopeds everywhere.

Mopeds parked

Some people on a moped

China’s learning the good and the bad from American capitalism

On the bright side, Chinese people seem to have learned that there’s money to be made from taking risks and launching small businesses. There are lots of little shops of all kinds, many of them fashion or textile shops (people love to browse them but not buy from them). Some of these stores occupy the first floor of an otherwise decrepit building — but the shops themselves are nicely renovated and decorated.

A textile and fabrics store in Wuxi
A textile and fabrics store in Wuxi

On the opposite side, the income disparity seems to be increasing rapidly. Some alleys have people labouring to survive (e.g. cleaning shoes, fixing bike tires) while nearby streets boast Louis Vuitton stores and Häagen-Dazs ice cream.

Louis Vuitton store in Wuxi
Luxury stores are all around

Interestingly, rich and poor seem to coexist in the same spaces in Wuxi. Unlike the sharp divisions between good and bad neighbourhoods in some American cities (*cough* Philadelphia), it’s hard to find lower-income citizens in a place of their own.

Alleyway of labourers in Wuxi
Alleyway of labourers

I walked by an alleyway where construction workers probably lived. There was a cluster of people around something that resembled an outdoor food cart, but it wasn’t open to the general public — it was set up so that the community of laborers could eat affordably.

Labourers getting food for brunch in Wuxi
Labourers getting food for brunch

Historic gardens (preview)

I’m going to post more photos from this venue in Part 2 of Day 1. We took somewhere between 250 and 300 photos of this historic site, where ancient architecture and estates from earlier eras, trees hundreds of years old, and an intricate system of stone wells that collect mountain water, have been preserved. I’m going to need some time to sort through the photos.

(My uncle, who teaches martial arts, served as a tour guide and explained the historical/cultural significance of many of the sights.)

Scene from preserved building

I also saw beautiful slabs of stone with engraved calligraphy, from different eras hundreds of years past. Even hundreds of years ago, the basis for the modern written Chinese language had already been set.

Slabs of engraved calligraphy
Slabs of engraved calligraphy

Anyways, all that and more will come — in Part 2.

Windows Live Essentials Wave 4 — Messenger

Office 2010 Technical Preview: Part 2