They are my oldest and deadliest enemy. You cannot trust them.
If Hitler invaded Hell, I would give a favourable reference to the Devil.

Friday, July 13

Geek

Androided

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

Geek

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

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] | [post.author.name]<br/>
[/posts]

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

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, ' | ', post.author.name, '<br/>')
end

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.


REST

Either
http://myblog.mee.nu/api/posts?count=20&fields=title,author.name
or
http://myblog.mee.nu/api/posts/count/20/fields/title,author.name

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 http://mysite.mee.nu/archive/2012/5 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.**


Python

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 mee.nu 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, ' | ', post.author.name, '<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.


Ruby

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, ' | ', post.author.name, '<br/>')
end

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(post.title)
  write(" | ")
  write(post.author.name)
  write("<br/>\n")
end

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, " | ", post.author.name, "<br/>\n")
end

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.

Saturday, July 07

Cool

Now Is The Time At The Not-Flea When We Dance


(Found in Ace's sidebar.  I recommend that you select 1080p and watch it full screen with the sound up.  This little widget doesn't do it justice.)

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

Friday, July 06

Geek

What's Pixy Up To?

I'm preparing for the release of Minx 1.2. There will be a big post up on mee.nu 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.

    /Images/1.2.InnovaLive.jpg

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

    /Images/1.2.Redactor.jpg

  • 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.

    /Images/1.2.markItUp.jpg

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

    /Images/1.2.Ace.jpg

  • 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.

    /Images/1.2.Dashboard.jpg

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

    /Images/1.2.DashboardGallery.jpg
    /Images/1.2.DashboardForms.jpg
    /Images/1.2.DashboardCharts.jpg
    /Images/1.2.DashboardMessages.jpg
    /Images/1.2.DashboardTables.jpg
    /Images/1.2.DashboardCalendar.jpg

  • 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.

    /Images/1.2.Highcharts.jpg
    /Images/1.2.Highcharts2.jpg

  • And JWPlayer is available for embedded video.

    /Images/1.2.JWPlayer.jpg

  • 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, last.fm, Deviantart, and Tumblr to fill up that dusty sidebar.

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

    /Images/1.2.Effects1.jpg
    /Images/1.2.Effects2.jpg/Images/1.2.SocialStream.jpg/Images/1.2.Accordionza.jpg/Images/1.2.GalleryJack.jpg
    /Images/1.2.Multimedia.jpg
    /Images/1.2.Folio.jpg
    /Images/1.2.Revolution.jpg/Images/1.2.KenBurner.jpg/Images/1.2.Paradigm.jpg

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

    /Images/1.2.NuvuType.jpg

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

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

Cool

Not With A Whimper

If you have to go, you might as well - 

Wait.  No one was hurt, right?  Okay, good.

- might as well go out with a bang.


Admit it, you've all wanted to see that happen.

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

Thursday, July 05

Geek

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.

Cool

Turn The Radio Up


Because, that's why.

Posted by: Pixy Misa at 02:00 AM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 7 words, total size 1 kb.

Wednesday, July 04

Anime

The Nargun And The Pop Stars

For a rock, that thing has a wicked sense of humour.

Natsuiro Kiseki.

(THAT, which has a talent for this, titled the show Magical Rock Trolls Four Girls.)

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

Tuesday, July 03

Geek

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

Geek

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 2 of 3 >>
80kb generated in CPU 0.07, elapsed 0.3887 seconds.
57 queries taking 0.3393 seconds, 317 records returned.
Powered by Minx 1.1.6c-pink.
Using https / https://ai.mee.nu / 315