Then, if you'll excuse me, but I'm in the middle of 15 things, all of them annoying.
Sunday, February 28
Essence Of Cool
The closing credits of
Hanamaru Kindergarten might win the nod for the best anime of the season.
Posted by: Pixy Misa at
11:53 PM
| No Comments
| Add Comment
| Trackbacks (Suck)
Post contains 20 words, total size 1 kb.
Saturday, February 27
I Hate Sauerkraut!
Also crazed starving weasels.
Posted by: Pixy Misa at
04:24 PM
| Comments (2)
| Add Comment
| Trackbacks (Suck)
Post contains 7 words, total size 1 kb.
1
Feed the sauerkraut to the crazed starving weasels. The sauerkraut goes away, the crazed weasels are no longer starving, problem solved.
Alternatively, cook the weasels with sauerkraut in the pan, then eat the cooked weasels and throw away everything else. I'd suggest putting them on a hot dog bun, and use lots of mustard.
Posted by: Wonderduck at Sunday, February 28 2010 06:48 AM (mfPs/)
2
Well, his mom did force feed him nothing but sauerkraut until he was 26 and a half years old.
Though the dozen crazed starving weasels (from a donut shop, if I remember) weren't good in the short term, he did meet the girl of his dreams while those weasels were latched to his face...
Too bad she wanted to join the Columbia Record Club. He was just not ready for that kind of commitment. Just the way things go, you know?
Posted by: nick at Monday, March 01 2010 11:25 AM (ZrgA+)
Hide Comments
| Add Comment
Friday, February 26
Move Over Mendeleev
Now with added mouseoverness.



























Posted by: Pixy Misa at
02:00 AM
| Comments (5)
| Add Comment
| Trackbacks (Suck)
Post contains 7 words, total size 2 kb.
1
"PITA" can be read two ways. It's a kind of unleavened bread used for certain yummy sandwiches.
But it's also an acronym for "pain in the ass". You really sure you want your program to be called that?
Posted by: Steven Den Beste at Friday, February 26 2010 03:01 AM (+rSRq)
2
Where can I read about any of them? In particular, any whitepapers or API specs for Moca if I were to compare it with Hail? I'm afraid you just code all the time and never document any of it.
Posted by: Pete Zaitcev at Friday, February 26 2010 03:31 AM (/ppBw)
3
Moca is just in the planning stages at the moment. But you're absolutely right that I need to do more documentation.
Steven - yeah, it's called Pita for two reasons. The other slogan is "Pita - databases without the pain".
Posted by: Pixy Misa at Friday, February 26 2010 10:10 AM (PiXy!)
4
I automatically think about any application for or intersection with
Hail whenever I see something cloudy. In Hail I'm responsible for implementing the S3-compatible, redunand and replicated data store.
Posted by: Pete Zaitcev at Saturday, February 27 2010 06:30 PM (/ppBw)
5
Ah, interesting.
Well, as soon as my day job actually gives me a weekend off, I'll update you on my lack of progress.
Posted by: Pixy Misa at Saturday, February 27 2010 11:09 PM (PiXy!)
Hide Comments
| Add Comment
Thursday, February 25
Periodicity

The Grand Unified Minx Theory

The mee.nu User Domains

The Minx Components
Posted by: Pixy Misa at
05:40 PM
| No Comments
| Add Comment
| Trackbacks (Suck)
Post contains 13 words, total size 1 kb.
Wednesday, February 24
Gamma Lama
Naturally I had to try this...
100%

50%

Oops!
Now, that's a deliberately constructed corner case, but there is a problem there.
Posted by: Pixy Misa at
12:40 PM
| No Comments
| Add Comment
| Trackbacks (Suck)
Post contains 24 words, total size 1 kb.
Monday, February 22
Sunday, February 21
Where's Pixy?
I'm in here:
(Click for full screenshot. Thanks go to Steam and GOG's insane holiday sales.)Actually, I'm not; I'm doing work for my day job, making some progress with Pita, reorganising Meta, and have finally come to a design decision on Miko (all parts of the Minx project for those who haven't been paying attention), redoing the documentation in
Sphinx - which will itself be supported in an upcoming version of Meta - and planning for this year's server upgrade.* I did play a bit of Dragon Age over the holidays, but games are taking a back seat for a while.** Despite the fact that I have 224 of them currently installed.
* If things go right we'll be moving from a lowly 8-processor (16-thread) 2.26GHz server with 24GB of RAM to a spiffy new 12-processor (24-thread) 2.66GHz server with 48GB of RAM. That's at least partly to prepare for the move to Pita, which loves to store stuff in memory. Because I can just copy the OpenVZ virtual machines across, the move should be quick and painless.** Apart from Billy vs. SNAKEMAN!
Posted by: Pixy Misa at
02:16 PM
| Comments (6)
| Add Comment
| Trackbacks (Suck)
Post contains 188 words, total size 1 kb.
1
Whatcha gonna do about r00t?
Posted by: Avatar_exADV at Thursday, February 25 2010 10:25 AM (pWQz4)
2
Turtle not have r00t. Me no do r00t. Me go make own baby village. Baby village not have
anything, r00t no longer issue.
Posted by: Pixy Misa at Thursday, February 25 2010 11:26 AM (PiXy!)
3
Well, you shouldn't have any problem getting Brick or Duck or myself to come with. One more and the village is big enough to start getting wandering genin. Not that a few more wouldn't hurt...
Posted by: Avatar_exADV at Friday, February 26 2010 10:26 AM (pWQz4)
4
While I'd hate to abandon Turtle, if Papa Pixy builds it, I will come. Maybe I'll make an alt to fill in at the Shell.
Posted by: Wonderduck at Friday, February 26 2010 01:56 PM (mfPs/)
5
I've got a character in Turtle to play with you guys in the first place. It doesn't have a great appeal other than that. ('course, my main's in an IR and should loop to S10 tomorrow...)
Posted by: Avatar_exADV at Saturday, February 27 2010 09:00 AM (pWQz4)
6
Turtle has been accumulating upgrades pretty rapidly of late. I have an alt in one of the big villages, but it's nice to see your village grow.
Posted by: Pixy Misa at Saturday, February 27 2010 10:22 AM (PiXy!)
Hide Comments
| Add Comment
Hoshimittsu
Hidamari Sketch continues to exist in its own little universe, and all is right with the world.
Posted by: Pixy Misa at
04:12 AM
| Comments (3)
| Add Comment
| Trackbacks (Suck)
Post contains 18 words, total size 1 kb.
1
Now that I knew GA, Hidamari just does not measure up. Yet it goes for the 3rd season. Remember J.Greely on DearS vs Girls Bravo?
Posted by: Pete Zaitcev at Sunday, February 21 2010 05:27 AM (/ppBw)
2
Here's the thing, Pete: most people, and apparently most viewers,
don't agree with you. Sorry to be blunt about it, but
HidaSketch is much more popular because it's a better show than
GA. Better characters, better humor, better animation, better writing, better story, better design... but, to be fair,
GA does teach you more about art.
Oh, and
Sketchbook is better than
GA, too. But, hey, keep protesting, man... fight the power and all that.
Posted by: Wonderduck at Sunday, February 21 2010 06:36 AM (tm3b1)
3
I bounced off GA, so I can't give an informed opinion other than it didn't catch my attention. But
Hidamari is simply a wonderful show. I wasn't sure that they could carry that forward for a third season, but so far it has all the charm of the first two.
As for
DearS and
Girls Bravo, both of them are terrible.
Posted by: Pixy Misa at Sunday, February 21 2010 12:33 PM (PiXy!)
Hide Comments
| Add Comment
Saturday, February 20
If I Don't Lesnerize, The Feegs Can't Get Me
In SQL* you say
select sum(sales) from accounts where state="NY". In Pita, the way to do this is:
results = accounts.aggregate(state='NY')**
which will calculate for you the count, length, sum, minimum and maximum, as appropriate, for all the fields in the table at once, so the value you need is
results.sales.sum. Since the table scan is typically slower than any calculations you're likely to be doing, this seems a reasonable approach.
In addition, I've added a
results = accounts.stats()
which provides all those, plus mean,*** median, mode, standard deviation, and geometric and harmonic means. Aaaaand standard error, coefficient of variation, sample and population variance, skewness and kurtosis. I even sort of know what kurtosis is.
I'm working on two more functions now,
group and
break, though I may need to come up with another name for the latter because break is a Python keyword. This:
for result in accounts.group('state', country='US'): ...
would give you the aggregate sales figures for each state in the US, sensibly enough. And this:
for result in accounts.break('state', country='US'):
...
would give you the individual sales figures, and then automatically provide totals after the last sales record for each state.
As long as I don't come down with kurtosis...
Update: Kang and jag. Or rather, agg and tab. For aggregate and tabulate.
for line in accounts.aggregate('state', country='US'): ...
will give you one summary line for each state, where
for line in accounts.tabulate('state', country='US'):
...
would give you both detail and summary lines. I need to put subtotal and total flags on the records for tabulate. Have to watch the keywords, there. And keep my closet doors closed.
* Boo, hiss!** Or indeed results =
accounts
(state='NY').aggregate()Either way should perform the same and produce the same results. I think...*** Which should come out the same as the average; just one I'm calculating myself and the other I'm pulling out of a stats module.
Posted by: Pixy Misa at
03:14 AM
| Comments (2)
| Add Comment
| Trackbacks (Suck)
Post contains 316 words, total size 3 kb.
1
OT: Pixy, I don't know what they did, but I can't load the Jawas now without locking up IE8. (Firefox has no problem with it.)
Posted by: Steven Den Beste at Saturday, February 20 2010 10:56 AM (+rSRq)
2
As I look at it with Firefox, I see that there's a formatting problem with the post titled "NYT: Brooklyn Accent = RAAAACIST!"
That may be related.
Posted by: Steven Den Beste at Saturday, February 20 2010 11:00 AM (+rSRq)
Hide Comments
| Add Comment
Tuesday, February 16
Just Trying Something...

Okay, yeah, they needed that sharpening filter. That's Minx's built-in upscaling. Quality is not so hot, as it turns out. I'll check on what filter it's using; normally it's only used for downscaling, which works great:
Posted by: Pixy Misa at
11:35 AM
| No Comments
| Add Comment
| Trackbacks (Suck)
Post contains 39 words, total size 1 kb.
I Want One!
TI Blaze.
Screw the iPad. This is the future.
On the one hand, it's a
huge clunky thing.

On the other hand, it's a development platform, not a consumer device; it has two 800x480 touchscreens, HDMI out, and a built-in DLP projector; it has two five-megapixel cameras at front and a twelve-megapixel camera at rear; a dual-core 1.2GHz Arm Cortex A9 (superscalar out-of-order SMP); accelerometer, compass, ambient light, proximity, barometric and temperature sensors; Wifi, Bluetooth, and GPS; and easy and open access to all the electronics, networking, and software.
Tech's slate (from the Accountancy story further down) isn't that much more advanced than this beastie.
Posted by: Pixy Misa at
04:04 AM
| Comments (2)
| Add Comment
| Trackbacks (Suck)
Post contains 108 words, total size 1 kb.
Free At Last!
EA have just earned themselves brownie points with millions of gamers by re-releasing three of the older Command and Conquer games - Red Alert, Tiberian Dawn, and Tiberian Sun -
free.
Get downloading!
Posted by: Pixy Misa at
12:26 AM
| No Comments
| Add Comment
| Trackbacks (Suck)
Post contains 36 words, total size 1 kb.
Sunday, February 14
Oodles Of Noodles
I have a working base storage class for Pita. Unfortunately, most of my weekend was eaten up by my day job and other miscellanea, but it does work.
I'll post the full code later in the week once I have a derived class or two that does something more useful, in the meantime, here's the test code to give you an example of how it's used:
def oodle_test():
# Create a base view
pets = Oodle()
# Create some pets
log('Creating pets')
# Create a dog, and save it
pet = pets.new()
pet.animal = 'dog'
pet.sound = 'woof'
pet.save()
log('Dog saved, %s pets' % pets.count(),1)
# Create a cat from a dict, and save it
pet = pets.new({'animal': 'cat', 'sound': 'meow'})
pet.save()
log('Cat saved, %s pets' % pets.count(),1)
# Append an aardvark
pet = pets.append({'animal': 'aardvark', 'sound': 'snorf'})
log('Aardvark appended, %s pets' % pets.count(),1)
# Append a hippopotamus too
pet = pets.append(animal = 'hippopotamus', sound = 'hrooonk')
log('Hippopotamus appended, %s pets' % pets.count(),1)
# What pets do I have?
log('Selecting all pets')
for pet in pets.select():
log('My %s says %s' % (pet.animal, pet.sound),1)
# Select and find on fields
log('Selecting specific pets')
# What does my dog say?
for pet in pets.select(animal = 'dog'):
log('Selected my %s; it says %s' % (pet.animal, pet.sound),1)
# Can I find my cat?
pet = pets.find(animal = 'cat')
log('Found my %s; it says %s' % (pet.animal, pet.sound),1)
return pets.count() == 4
The base view class, which has no indexes, no persistence, and no support for sorting, is called an Oodle.
The results of the test?
Creating pets
Dog saved, 1 pets
Cat saved, 2 pets
Aardvark appended, 3 pets
Hippopotamus appended, 4 pets
Selecting all pets
My dog says woof
My cat says meow
My aardvark says snorf
My hippopotamus says hrooonk
Selecting specific pets
Selected my dog; it says woof
Found my cat; it says meow
Oodle OK
Update: We've hit version 0.02 wih a successful hash-table implementation. Next up is persistence... And deletes.
Update: 0.03! I deleted my pet hippopotamus!
Update: 0.04! The idiom
for pet in pets now works. You can't slice it or select within it yet.
Posted by: Pixy Misa at
11:34 PM
| Comments (8)
| Add Comment
| Trackbacks (Suck)
Post contains 356 words, total size 3 kb.
1
So
that was what the "noodle incident" was about!
Posted by: Steven Den Beste at Monday, February 15 2010 01:06 AM (+rSRq)
2
I'm guessing for the delete it would be something along the lines of...
if pet.select() = rabid
delete
Posted by: Teresa at Monday, February 15 2010 04:00 AM (ZCuP9)
3
In theory, something like
pets.select(status = 'rabid').delete() should work right now. I'll add a test to the module to make sure.
Don't want rabid hippopotamuses cluttering up the place!
Posted by: Pixy Misa at Monday, February 15 2010 08:39 AM (PiXy!)
4
Okay, now you can do
pets(status = 'rabid').delete() or even
pets.delete(status = 'rabid').
Also, you can't call
pets.delete() when you meant
pet.delete - it would instantly wipe the entire view, so I made that an error.
Posted by: Pixy Misa at Monday, February 15 2010 08:54 AM (PiXy!)
5
If you call
pets().delete(), though, you get what's coming to you!
Posted by: Pixy Misa at Monday, February 15 2010 08:55 AM (PiXy!)
6
I hope you wouldn't mind if i add some criticism to your interaction design.
So, why do you need that .new() ?
I prefer a bit more organized approach:
cat = Oodles(...)
or
class Pet(Oodles): pass
cat = Pet(...)
so, why that Rubish .new() ?
And I didn't get, why you need .new() and .append();
Also nobody will remember if they need to use .find or .select.
Django uses .filter() and .get() names for purpose.
Posted by: Yuri Baburov at Wednesday, February 17 2010 06:16 AM (rBboi)
7
Yuri - thanks, I'm definitely open to suggestions on the method calls. This was the result of one evening's work, and I'm sure I'll reorganise things as the codebase builds up. (Which is starting to happen.)
So:
The structure of the database is not fixed at compile time. You can create new views on the fly - and this is the normal way to do things. It's not an OODBMS, it's a document database. That's why I'm not subclassing to build the individual views.
Now, as to the .new() - you have a good point here with regards to expected Pythonicity. But what I'm doing is saying
pets = Oodle() to create a collection of pets, and
pet = pets.new() to create an item in that collection, not an instance of pets.
I'm using the idiom
for pet in pets(species = 'wombat'): ... to iterate over the collection, which would conflict with
pet = pets() to create a new item.
.append() is a create-and-commit operation - or
.new() and
.save() in this case.
I can use
.filter() and
.get() in place of
.select() and
.find(). (In fact,
select is now redundant.) I haven't worked out the syntax for range matches and full-text searches / regex scans yet, so there's room for some changes there. The difference between the two is that
.select() returns a generator, where
.find() returns a record.
Posted by: Pixy Misa at Wednesday, February 17 2010 10:30 AM (PiXy!)
8
Just thinking it over, I can use
for pet in pets(species = 'wombat') for iterating, and
pet = pets['rover'] to look up a unique item - assuming the view is a hash table or has a simple primary key. If not,
pet = pets[{'name': 'rover'}] would work, but then you may as well type
pet = pets.find(name = 'rover') (or
pet = pets.get(name = 'rover'), perhaps).
Posted by: Pixy Misa at Wednesday, February 17 2010 01:24 PM (PiXy!)
Hide Comments
| Add Comment
Stuff










Come to think of it, I need to redo them to insert Jy and Pi. So there may be another colour shift coming.
Posted by: Pixy Misa at
08:49 PM
| Comments (2)
| Add Comment
| Trackbacks (Suck)
Post contains 24 words, total size 1 kb.
1
You might want to have a look at the Geek-i-odic table from Alegrya.
http://spreadsheets.google.com/ccc?key=p2AXBPZk9AP_aybtV5LG7XA&hl=en
Posted by: Andrew at Friday, February 19 2010 02:46 PM (cCNlL)
2
Fools! That table's not periodic!
That list above is the mee.whatever domains I own. I missed out on mee.tv by a couple of weeks.
I need to add icons for the components of Minx - Minx itself, Meta, the templating language, Miko, the desktop client, Pita, the database wrapper, and Jsyn, the syndication and replication protocol. Oh, and Mili and Mepi, the scripting language and API respectively.
Maybe I could make those round...
Posted by: Pixy Misa at Friday, February 19 2010 05:49 PM (PiXy!)
Hide Comments
| Add Comment
Can't Sleep, Brain Busy
Idea popped into my head for a story set in the Mina Smith universe. Mina's a customs agent, but this time our protagonist is an accountant. As much an accountant as Mina is a customs agent, anyway.
Just a snippet that I'll likely never finish, but anyway...
more...
Posted by: Pixy Misa at
06:38 AM
| Comments (4)
| Add Comment
| Trackbacks (Suck)
Post contains 1937 words, total size 12 kb.
1
That's fantastic. I want to see the rest of it.
Posted by: Mark at Sunday, February 14 2010 02:59 PM (bBxKr)
2
Mina Smith? Am I missing a reference?
It kind of reminds me of H. Beam Piper's Paratime Police stuff. Not bad at all.
You wrote this the same week you were trying to write your own SQL language? The Handicapper General's gonna come get you if you're not careful, Harrison.
Posted by: Mitch H. at Tuesday, February 16 2010 03:03 AM (jwKxK)
3
I haven't actually read any Piper in decades. I'm sure there's a germ of an idea or three borrowed from there, as well as the whirling SF cosmos in general. Mina Smith is the protagonist in the original (similarly fragmentary and unpublished) stories I've set in the same universe, but earlier in the timeline, and as I indicated, a customs agent tasked to stamp out paratemporal contraband. If she's not retired by this point, she's probably a very senior figure in the Agency.
There's an awful lot that our accountant friend doesn't know, for all his advanced tech.
It's not a SQL language, though, just a programmatic database with some nice query-by-example features. Intentionally not Turing-complete. Though of course every protocol evolves until it is...
Posted by: Pixy Misa at Tuesday, February 16 2010 03:37 AM (PiXy!)
Posted by: Kean at Monday, February 22 2010 02:40 PM (+Zca6)
Hide Comments
| Add Comment
79kb generated in 0.1788 seconds; 59 queries returned 270 records.
Powered by Minx 1.1.4-pink.