It was a bad day. A lot of bad stuff happened. And I'd love to forget it all. But I don't. Not ever. Because this is what I do. Every time, every day, every second, this: On five, we're bringing down the government.

Wednesday, July 25


Mole Of Moles

Essential reading.

Posted by: Pixy Misa at 07:05 PM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 5 words, total size 1 kb.

Tuesday, July 24


I Can Hear My Wallet Deflating As I Type

Lord of the Rings Lego.

Posted by: Pixy Misa at 12:35 AM | Comments (1) | Add Comment | Trackbacks (Suck)
Post contains 14 words, total size 1 kb.

Wednesday, July 18


Warlock 1.2: Warlockier

When I reviewed Warlock: Master of the Arcane a few weeks ago, I noted that while technically sound, it lacked a lot of the features of the classic Master of Magic and ended up with gameplay that seemed somewhat shallow in comparison.

A couple of the features I missed most were heroes and artifacts - Warlock had no unique units or magic items, although with a bit of work you could buff up your elite troops to near-hero level.

I say had advisedly, because the free 1.2 update introduces both heroes and artifacts, as well as better diplomacy and a host of small added features, bugfixes, and tweaks.  I'll give it a try when I have some time and report back on how the game has progressed.

Posted by: Pixy Misa at 11:35 PM | Comments (1) | Add Comment | Trackbacks (Suck)
Post contains 130 words, total size 1 kb.

Friday, July 13


Say Hello, Hororo!

Ooh, sandwichies!

Um, Hororo?


Hororo is our new Sydney-based VPS, which I've just deployed to host the alpha test of Minx 1.2.  Or she will be, once I extract her from my lunch.

Anyone there?

Posted by: Pixy Misa at 06:10 PM | Comments (3) | Add Comment | Trackbacks (Suck)
Post contains 39 words, total size 1 kb.



I'm still looking at buying myself a Samsung Galaxy Note, but I want to see first if it's shipping here with Ice Cream Sandwich instead of Gingerbread.*

And I'm probably going to buy an iPad without a nameTM pretty soon; I wasn't that impressed by the earlier models but the new screen is very, very nice.

But I've started out cheap and simple, with a Nexus 7.

Oh, and an OUYA, which is basically a Nexus 7 without the screen, but with HDMI and a gamepad instead.

At $99, even if it never gets many games ported to it, it's still a tiny shiny quad-core Linux box with 1GB of RAM.

* Hmm.  Rumours have a new Jelly-Beaned four-cylinder Note due next month.  But then I have to wait for it to reach Australia again, which took several months last time.

Posted by: Pixy Misa at 04:45 PM | Comments (2) | Add Comment | Trackbacks (Suck)
Post contains 142 words, total size 1 kb.

Sunday, July 08


Speaking In Minx (1.2)

I mentioned in my previous post that Minx 1.2 has involved a major overhaul of the templating system, so that it now provides multiple methods for accessing your data.  You may have missed this, because that post was mostly user interface port, so here's how that works, using a single example: Show me the title and author of the last 20 posts published on my blog.


Meta is the template language you know and love, and so far has been the main interface for anything you wanted to do.  It's a good thing it makes this easy!

[posts count=20]
[post.title] | []<br/>

By default the [posts] method lists your posts in descending date order (i.e. most recent first), and hides anything unpublished, so you don't need to specify any options for that.


Lua is the scripting language and main template engine in Minx 1.2.  You can fall back to a 1.1-style interpreted template if you really need to (and there is one semantic difference between old and new templates that might make this necessary for perfect compatibility), but by default, templates are compiled from Meta into Lua when you create them, and from Lua to native machine code when they run.

This is what that template would look like* in Lua:

for post in api.posts{count=20} do
  print(post.title, ' | ',, '<br/>')

The one trick there is that the posts function is called with curly brackets {} to pass it a table, instead of round brackets () for a regular parameter list.  That's syntactic sugar in Lua; you could also write it as 

for post in api.posts({count=20}) do

From Lua you simply print or write your content, and it is directed to the user's web browser.  Even if you've never done much programming, it's pretty easy to get started.



In fact, you could leave out the fields list and it would give you everything, but this way there's less data to download and parse, which is good for everyone.

The second format displays the function of an API you're already using without being aware of it: URL selectors.  Your blog archives, where you specify to get posts from May 2012: That's an URL selector.  There's no actual archive folder; it's all handled dynamically.  URL selectors have been greatly extended in 1.2, with a couple of dozen new parameters for filtering, searching, and sorting content.

These calls will return the data in JSON format, rather than the exact layout produced by the various templates.  This will be addressed in a future release with plugin formatters, but for now, JSON rules.**


This is the way I code to the new API, and I plan to make this available on an experimental basis in 1.2.  

There are two ways to use the Python API: As a wrapper around the REST API, or as Python modules for inclusion in standalone Minx installs.  (You can't install your own Python modules in the core system, for obvious reasons, but I plan to offer virtual Minxes for those who'd like to develop applications in this way.)

The Python API is essentially identical either way, and very similar to Lua:

for post in api.posts(count=20):
  print(post.title, ' | ',, '<br/>')

Technically, Python doesn't require the brackets on print yet, but it will in the future, and they make the code more similar to Lua, so it's a good idea to include them.


This is under development; it seems to work, but I'm not sure yet whether it will be robust enough for release in 1.2.  As with Python, it will be available as a wrapper for the REST API, and also for direct modules using RubyPython.

Ruby code is a little different to Python or Lua, partly because it has a more thoroughly generalised object model.  But it's not hard once you get used to it.

api.posts.each({:count => 20}) | post |
  print(post.title, ' | ',, '<br/>')

As with Python, the brackets on print are optional.

The advantage of Ruby is that it allows Ruby programmers to work with a familiar language and familiar libraries while building on the Minx framework - and integrating with Ruby also allows Minx access to Ruby libraries that don't have direct Python equivalents.

Anyway, that's a very quick rundown on the new APIs in 1.2; the full API reference, when it lands, will run to several thousand pages.  I'm not typing all of that, though! It's automatically generated using Sphinx from the data model and its documentation, so that every method is documented for every version of the API, and every example is equivalent on each API as well.

The tutorials and user guide will be mostly hand-crafted*** but the new reference will automatically document absolutely everything.

* Right now, what the compiler produces is this:

for post in api.posts{count=20} do
  write(" | ")

Which is correct (and neatly indented) but a bit mechanical.  But most users won't ever look at that code, so for now I'm happy with correctness; idiomaticness can follow.

Update: Ta-da! Added support for merged writes:

for post in api.posts{count=20} do
  write(post.title, " | ",, "<br/>\n")

I need to add some more intelligence there to keep long sections of text readable, but it certainly works nicely for short examples.

** I'm so glad that XML APIs are a dying breed.  They were an improvement on some of the binary APIs I had to work with in the bad old days, but still horrible in their own way.

*** And illustrated.

Posted by: Pixy Misa at 03:40 PM | Comments (2) | Add Comment | Trackbacks (Suck)
Post contains 931 words, total size 9 kb.

Friday, July 06


What's Pixy Up To?

I'm preparing for the release of Minx 1.2. There will be a big post up on closer to the launch date, but for my faithful followers, here's a quicky:
  • The database is moving from MySQL to MongoDB plus ElasticSearch. This means we'll be switching from a conventional fixed-column database to a partially free-form document model for both the database and the search engine.

  • The core Minx engine is being rewritten in an API-centric model. The API will be available via RESTful HTTP, via URL selection strings, from Lua for user code, and from Python and Ruby for development code.

  • Non-core functions are being moved from Python code to user-accessible Lua scripts using LuaJIT. Custom scripts can be triggered by both template tags and BBCode tags.

  • Templates can be interpreted (as present) or compiled down to a sequence of equivalent Lua API calls. This is then compiled down to machine code at runtime. In other words, we're moving from an interpreted language on top of an interpeted language (the Meta template language written in Python) to pure native code.

  • Layout is moving to Twitter Bootstrap. It doesn't make CSS go away, but it does a good job of beating it into submission.

  • The primary editor is being upgraded to Innova Live Editor. I have a source code license for the editor, plus the plugins for photo insert, photo retouch, video insert, drawing, and CSS buttons.


  • As an alternate editor I've licensed Redactor, which is lighter-weight than Innova but still very capable.


  • If you prefer working directly with markup, Minx 1.2 supports not just HTML and BBCode, but also Textile and Markdown, and I'm integrating the markItUp! editor to make it all easy.


  • For programming in the Minx environment, you can use Ace, which provides you with neat Lua syntax highlighting.


  • The dashboard will be getting a significant upgrade. I'm testing a very powerful Bootstrap-compatible admin theme called Utopia, and adapting it to work with the Minx API.


  • It will have lots of new features for managing your content.


  • You'll be able to use all those features on your blogs as well. It also comes with a fifth option for your editing needs, CLEditor. I prefer Innova or Redactor, but it's already been integrated with the rest of the dashboard, so including it is less effort than removing it.

  • For all your graphing and charting needs (within the admin panel, and on your site if you're into that sort of thing), I've licensed Highcharts.


  • And JWPlayer is available for embedded video.


  • Over a thousand new banner images and hundreds of new fonts to make your site semi-unique.

  • Support for other protocols (SMTP, POP, IMAP, NNTP, XMPP, FTP, SFTP) is under development, but will likely ship in a subsequent point release.

  • Experimental support for d3.js and Processing.js.

  • Image processing templates - apply Python Imaging Library and ImageMagick filters on your images on demand.

  • Pull in content from Twitter, Facebook, Google+, Delicious, Stumbleupon, Pinterest, Youtube, Vimeo, Flickr,, Deviantart, and Tumblr to fill up that dusty sidebar.

  • And... Tired. Here's some pics. More later.


  • Oh, and, for when you really need to turn your text into a swarm of blue neon bees:


  • Plus: BBCode Editor and Pure Editor Lite, Rama and Before-After sliders,  Social Media Tabs, Showbiz Carousel, Showcase, Hoverall, and Neon Text Effects.

Posted by: Pixy Misa at 11:30 PM | Comments (9) | Add Comment | Trackbacks (Suck)
Post contains 679 words, total size 8 kb.

Thursday, July 05


By Night, They Fight Crime

So I have this idea for a TV drama series about a group of techies - possibly network engineers, but I'm thinking in terms of compiler writers - who come together at night to fight crime.  Or supernatural horrors from another dimension, same thing.

They would, of course, be called the Token Angels.

Because this would be the best theme song ever.*

Start it at about 0:20 and finish at 1:45 and you have just about the length for an anime opening (typically 90 seconds).

* After** the themes from Problem Child and Linden Hill by the Electric Ant Orchestra, available on their album Winter Collection from Cinnamon Tree Records.
** Okay, before.

Posted by: Pixy Misa at 04:30 PM | Comments (2) | Add Comment | Trackbacks (Suck)
Post contains 118 words, total size 1 kb.

Tuesday, July 03


Peppered And Salted

Two more NASes arrived at Pixy Labs today - Pepper v2 and Salt v2, a couple of LaCie 5Big v2 units like Sugar but minus the marbles-in-a-tumble-dryer Hitachi drives.  Minus any drives at all, in fact, which makes them a heck of a lot cheaper, $399 each vs. about $1700 for the 10TB Sugar back in 2010.

Once they're loaded up with disks (and I have 8 1TB disks lying around, and 12 2TB disks waiting to be built into PCs), they're replace Pepper and Salt v1, my old Acer Easystores.  These will be - depending on what disks I decide to put into them - 5, 10, or 15TB each, replacing the 4TB Salt and 2.5TB Pepper.

Once I've built Shana and Lina as well, I'll have, hmm, 40 to 48TB of available disk, all of it RAID-5.  That'll do, I think.

Posted by: Pixy Misa at 10:57 AM | Comments (1) | Add Comment | Trackbacks (Suck)
Post contains 146 words, total size 1 kb.

Monday, July 02


Good Good Good Splat Good...

MySQL, good.  Redis, good.  MongoDB, good (since 1.8, anyway).  Riak, good.  CouchDB, good.  ElasticSearch, very nice.  Neo4j...  If I want the ability to run backups, costs as much as my entire operating budget.  So, no Neo4j for you! 

Kyoto Tycoon, good....

Posted by: Pixy Misa at 05:21 PM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 46 words, total size 1 kb.

<< Page 1 of 2 >>
86kb generated in CPU 0.0215, elapsed 0.1524 seconds.
58 queries taking 0.1368 seconds, 368 records returned.
Powered by Minx 1.1.6c-pink.
Using https / / 366