May 12, 2012

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. The JVM platform gives a lot of run time performance and a huge software library, but the Java language is hobbled by years of mismanagement (see C# for something not hobbled by Sun). Enter Scala - fast, type safe, expressive, and generally fun to work in. (I still love Python too, for those of you keeping score). Read more

June 22, 2011

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: (This code depends on ARC in XCode 4.2+ - apply reference counting as appropriate for other versions) Please note that you have to set all the items which are in front of the background view to clearColor such that they will not cover the background image. Read more

June 22, 2011

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. For the uninformed, semantic implies meaning - instead of making text large, you mark it as a section, or instead of indenting and changing the color of text, you denote that the text is a call-out or note. Read more

December 9, 2010

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). Uploads are accepted with very minimal validation work, leading to very obvious fakes and outdated data purging new good data. We’re still using a creaky old CSV exporter which has been known broken for the past 6 months or so (a phantom non-column is being exported). Our Contribtastic client has GUI elements which are basically unimplemented and confuse just about everyone (yes, I know, you can’t login). We’re still using the SMTP push service (it made sense when data volumes were lower, now it just breaks other people’s SMTP servers). What am I planning on doing? Read more

December 28, 2009

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). You can find this broken out in the struct packer_opcap. Read more

July 31, 2009

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 Read more

January 14, 2009

ptee


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" | ... The expression in quotes is passed to a new instance of the active shell (expressed by $SHELL), and the standard input to ptee is duplicated, both to normal standard output and to this new sub-shell (and any number of commands given to ptee). In effect, the sub-shell is running in parallel with the normal shell pipeline. The simplest case of running ptee is with no arguments, where it acts as an expensive version of the “|” operator. Read more

August 7, 2008

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? How often do you find yourself switching among windows with alt-tab, just to refer to some information which is currently obscured by the window you’re currently in? Read more

July 19, 2008

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. For speed and other reasons, we’re going to be using the Thrift API. Note that I am going to be touching on some Hbase jargon (such as column families). Its not essential to understand what those are if you are just trying to build a Python Thrift client. But if you’re trying to use HBase, I would consider that knowledge essential. Read more

May 7, 2007

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. Hence all of the market information is limited (only 10 entries or so per table, etc) and no stylesheets or other fun stuff is used. So why is the main, non-IGB interface so bland too? Primarily for not having to maintain two sets of templates and remembering to update both to fix something or enhance something. Read more

© 2025 Yann Ramin