Building a custom CentOS 7 kickstart disc, part 1

Note: this series of articles applies to CentOS 7; for CentOS 6, see this series.

CentOS (and of course, it’s upstream distro, Red Hat Enterprise Linux) has an extremely powerful, but somewhat poorly documented, tool for rapidly deploying machines and managing their configuration: kickstart. Kickstart lets you build a custom installation that can run hands-free. So not only is the installation quick and easy for you, you can be confident that your machines are configured exactly the way you want them to be.

Continue reading Building a custom CentOS 7 kickstart disc, part 1

A review of “site tour” Javascript libraries

I recently had a need to display a “site tour” to point out important features to our users. I was happy to discover that there are some very easy-to-use libraries out there for this purpose. However, I found that each library was ultimately lacking at least one vital feature. I wish these authors would put their heads together and build the ultimate site tour.

Until they do, I present my review of a few of the leading candidates

Continue reading A review of “site tour” Javascript libraries

XBMC: hardware selection

I recently put together an XBMC system to replace an aging Apple TV (first gen). It was my interest in the Raspberry Pi that brought me to the idea of using XBMC, although ultimately, I did not end up going with a Raspberry Pi based system (I use one for other things around the house, but not the home theater).

I thought I’d share some of the decisions I made so others could benefit.

Continue reading XBMC: hardware selection

Saving and restoring qooxdoo table column sizes, visibility, and order

I was working on a music library management application built on qooxdoo, and I’ve always liked the way iTunes manages columns in its tables. You can hide and show columns, rearrange them, and resize them, and iTunes will remember your settings when you launch it next.

With a little work, you can do the same with a qooxdoo table. You just need to gather the column state, serialize it, and write it to a cookie whenever the user changes column state.

Then you need to load the state when the table appears:

You run this code at specific events in the table lifecycle:

Try it in the playground, or see a basic class implementation below:

Removing the Reveton Trojan from Windows

Recently, a friend of mine asked me for some help with her Windows PC. Her son got bitten by a nasty bit of ransomware. A giant screen came up saying “YOUR COMPUTER HAS BEEN LOCKED”, claiming that the NSA’s PRISM program had detected illegal content on the machine. Only by paying $300 to the “NSA” could the computer be unlocked. The screen is insidiuos; there’s no way to get around this splash screen. You can launch other apps, but they’re instantly covered up by the screen.

I don’t do a lot with Windows these days (and this incident reminded me why I don’t have a Windows machine at home for my kids to use), but I figured I could help out. I thought it would be much like other malware I’d encountered in the past.

Apparently, this ransomware has been around in one form or another for a few years. The message changes (kudos to the bastards who write this for changing the graphics to take advantage of all the recent PRISM publicity), but the app is the same. Much of the advice I found online was from web sites that are 100% focused on malware — for some reason, I am quite skeptical of these sites. I don’t know what their motivation is — are they just copying content from elsewhere on the web, are they just trying to sell their own software/services, or are they just publishing wrong information. I had hoped to find some individual guy’s blog article on the topic. Since I didn’t find much like this, I figured I would write an article to share my experience.

The malware in question is known as “W32/Reveton”. Here are a few links:

There was a lot of advice online about booting into safe mode. This doesn’t seem to help. The app still launches as soon as you log into your machine in safe mode. It blocks any attempt to interact with other software, so you can’t run any sort of anti spyware software.

Some sites advised botting from UBCD4Win. I didn’t pursue this, because I needed a windows machine to build a minimal windows image on the CD. This seemed like too much of a hassle.

Finally, I stumbled across Windows Defender Offline. You have to use another Windows machine to run the executable which builds the ISO, but it seems less complicated than building a UBCD image. I was able to build this ISO on a virtual machine on my Mac. Booting from this CD was exactly what I needed to do. The application found W32/Reveton right away and cleaned up the infection.

I hope this helps somebody out there!

BrightContext and Titanium Mobile: Simple real-time messaging

If you’re looking for a way to easily enable your client software to send and receive low latency messages with a server or other clients, BrightContext‘s service may be just the thing you’re looking for.

BrightContext provides you a shared message queue to which clients can submit messages and subscribe to receive all messages sent to the queue.

As of version 1.6.0, the BrightContext Javascript API supports Titanium Mobile out of the box, making it very easy to integrate into your application. All you need is the bcc library and the Ti websocket client library.

Continue reading BrightContext and Titanium Mobile: Simple real-time messaging