EVE-Central.com in the age of EVE Ascension

After a week delay while the United States elected an authoritarian misogynist xenophobe (more on that in another post), CCP games will be releasing one of the most fundamental player-focused changes in EVE Online; free-to-play in the form of Alpha Clones. This is a critical inflection point in the history of the game I first picked up in 2003, as an alternative to Earth and Beyond MMO which was on its downward spiral.

Supermicro IPMI Remote KVM Annoyances

So, you have a Supermicro server somewhere remote. Thats cool, they have a nifty IPMI module (either bridged to the primary interface or on a separate port). One of the features is a remote IP-KVM over what is mostly VNC. Of course, you have a complete distrust of anything embedded, so your IPMI is on a separate LAN/VLAN. You also don’t have a VPN to this IPMI LAN, because thats a lot of work for something that you’ll never use, and everyone just uses ad-hoc SSH tunnels anyway, right?

EVE-Central API is now running on Spray, Akka, built with Scala

The EVE-Central API service was refactored on top of a new framework, both as an aid to scale (for performance reasons), and an exercise in using new tools for web development. Except for a few growing pains, the stack has been reliable and performant. The bits and pieces that made this possible: Scala - A static typed JVM-targeted language with a very good mix of functional programming. Often compared to OCaml and F#, where it shares a lot of similarity.

iOS - Set a pattern background image for a UIView

In iOS, there is no way to slug a background image into a UIView - making it slightly trickier to style your new iOS application background (and who doesn’t like the new iOS 5 linen?). However, you can apply a UIColor. Did you know UIColor can be a pattern? And the pattern can be defined by a UIImage? Well, it can, and here is a one-liner to do so: self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bgs/fileinbundle.

Semantic End-User Documentation: Docbook or Sphinx?

When you think of user documentation authoring systems, a couple of traditional tools often come to mind: FrameMaker, Microsoft Word, InDesign, RoboHelp, LyX, TeX files, MadCap Flare. Some are fully proprietary, while others embrace some standards. Some are semantic, while others are design driven. With the evolving output formats that are present today (and tomorrow, for the future predictors), there is honestly no excuse to have your primary authoring environment be non-semantic.

EVE-Central after EVE-Metrics

As you may have heard, EVE-Metrics is planning on moving to bigger and better things. This leaves (the older, more battle scared, and way less slick) EVE-Central as the only remaining EVE-Online market data aggregator. Despite not being an active EVE-Online player either, I am leaving EVE-Central up and running, but I need your help to keep the cobwebs from piling on too thick! First off, EVE-Central needs enhancements. Currently, even simple things like determining the buy and sell price in Jita are horribly flawed (due to gaming of the statistics).

About rle_unpack in libevecache

I have had several questions regarding the “rle_unpack” function in libevecache. In order to not repeat myself in e-mails, I decided to make a quick post describing the logic: The market rows are compressed with an odd variant of run-length-encoding. In this case, the extra “0” bytes are suppressed and encoded into one byte. The row starts with a opcode byte, which is split as follows (high bit to low bit).

Reverse Engineering the EVE-Online Cache Files

So, I’m doing it after all. Reverse engineering the cache files. The format is actually surprisingly simple once you determine the identifiers of all the data fields (and their lengths). No reverse compiling or digging into the EVE runtime was performed, simply educated guesses and a knowledge of CPython internals. Progress is good. Relevant data identified. More results to be posted, and then an open source code release. Update 1


Have you ever wanted to use the UNIX shell utility tee, but instead of simply dumping to a file, invoke a series of subcommands that would run inside the pipeline? If so, I give you ptee, now available in version 1.0. ptee extends the idea of tee by allowing not just filenames, but a whole shell expression (or command). For instance: ... | ptee "grep foo | zcat > outfile" | .

Big Monitors, Window Management Frustration, and finding StumpWM

You may be like me, and have a large (20”+, or especially 30” in this case) monitor attached to your computer. You’re also a avid computer user and have more than one program open at a time which you want to view simultaneously. You also use the keyboard much more than the mouse (except when lazily surfing the web). How often have you noticed spending large amounts of time moving your windows around, resizing, moving, rearranging, and all the normal window management jazz?

Using Facebook’s Thrift with Python and HBase

Today I’m going to show you how to interface Python to Apache HBase using Facebook’s Thrift package. Hbase is a documented oriented database which is very similar to Google’s BigTable (in fact its more or less a clone of BigTable as seen in the BigTable paper). HBase has two primary interfaces - a REST API which is relatively slow, and a Thrift interface, which is recommended for high speed communication.

About the EVE-Central.com Interface

I get the occasional question about someone’s browser being seemingly stuck in “IGB” mode. Usually, its not actually stuck, the user was simply expecting some more graphical pizzaz out of EVE-Central.com. So, why is the interface so bland? Maintainability is the primary reason. The EVE-Online in game browser is a rather buggy, slow, and temperamental beast. CSS support is worse than Netscape 4, and performance is akin to a Pentium 66 rendering a huge table - it just can’t do it without a week long crunch.

Tapestry 5: Rendering a Block in a page

This one took awhile to figure out. In Tapestry, if a component is passed to another component (such as your main page layout component), you need to pass it as a Block parameter. The problem with blocks, there is no quick way to render them. You can use the @AfterRenderBody rendering stage annotation, but this gives you very limited flexibility in where the object will end up (or you make kludgy hacks to put this together).