Is this how time normally passes? Really slowly, in the right order?

Friday, May 31

Geek

More Shinies

/images/PQ321Q_Side_650.jpg

Asus have just announced a pair of 4K monitors at 31.5" and 39".  No word yet on pricing, but they'll be showing them off at Computex and the 31.5" model is set to ship next month.

The 39" model would have roughly the same DPI as my current 27", but twice the display area.  I was thinking of getting a second 27" monitor, but now I'm inclined to wait.

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

Thursday, May 30

Cool

Girl Genii




Studio Foglio is running a Kickstarter drive to print the new volume 12 and bring older volumes of Girl Genius back into print. It's been a not-entirely-unexpected runaway success, unlocking all sorts of stretch goals, including PDF versions of all 12 volumes. Which are included as a bonus if you buy volume 12. Even if you buy volume 12 as a PDF. Which costs a very reasonable $10.

Yes, for the next four days you can get the entire series in PDF form for ten bucks.

Or $275 plus shipping for the full series in physical softcover form.  Shipping being another $95 to the far side of the world.

So, PDF it is.

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

Wednesday, May 29

Geek

Magpie Mode

Some days a $30 wireless keyboard/mouse combo doesn't cut it.  Some days you need...

Extra keys.

/images/LogitechG19.jpg?size=720x&q=95

Dials and buttons.

/images/SpacePilotPro.jpg?size=720x&q=95

Lots of dials and buttons.

/images/MaschineMK2.jpg?size=720x&q=95

Knobs and sliders.

/images/ZED_60_10FX.jpg?size=720x&q=95

Keys and knobs and sliders and buttons.

/images/Impulse49.jpg?size=720x&q=95

Pen input.

/images/Cintiq13.jpg?size=720x&q=95

Buttons.  Lots and lots of buttons.

/images/AbletonPush.jpg?size=720x&q=95

Trackballs and trackwheels.

/images/AvidArtistColour.jpg?size=720x&q=95

Sliders, buttons, touch panels.

/images/AvidArtistControl.jpg?size=720x&q=95

More sliders.

/images/AvidArtistMix.jpg?size=720x&q=95

Wheels.

/images/AvidArtistTransport2.jpg?size=720x&q=95

Trackballs and wheels and buttons.

/images/WaveTop.jpg?size=720x&q=95

From top to bottom: Logitech G19, Connexion SpacePilot Pro, Maschine MK2, Allen & Heath ZED60-10FX, Novation Impulse 49, Wacom Cintiq 13HD, Ableton Push, Avid Artist Color, Avid Artist Control, Avid Artist Mix, Avid Artist Transport, Tangent Wave.

Posted by: Pixy Misa at 10:22 PM | Comments (6) | Add Comment | Trackbacks (Suck)
Post contains 96 words, total size 2 kb.

Monday, May 27

Geek

Everything I Needed To Know...

About configuring cost-effective servers I learned min-maxing characters in AD&D.

Currently looking at this:


Component Price
Supermicro SC116TQ-R700CB 1U case $546
Supermicro X9SRH-7TF motherboard $479
Intel Xeon E5-1620 $329
16GB DDR3 Reg. ECC x 4 $512
Seagate Constellation.2 1TB x 4 $848
Intel SSD 520 240GB x 4 $1,012
WD Green Mobile 2TB x 2 $338
$4,064


The motherboard includes a RAID controller, but only levels 0, 1, and 10; no 5 or 6. On the other hand, adding a decent RAID-5/6 controller costs more and delivers less than bumping up the size of the SSDs and adding a couple of low-end drives for backup so that the main array doesn't get filled with junk.

This is a similar but more pedestrian config with a dedicated RAID controller:

Component Price
Acme RS108TF 1U Xeon $739
Intel Xeon E5-1620 $329
16GB DDR3 Reg. ECC x 4 $512
Seagate Constellation.2 1TB x 4 $848
Intel SSD 520 180GB x 4 $780
LSI SAS 9260-8i $525
LSI Battery LSI00264 $159
Supermicro slim DVD-ROM $49
$3,941

The stick-in-the-mud config comes in $123 cheaper and has an extra terabyte on the main array and an extra 60GB of SSD. It's RAID-5 instead of RAID-10, but with the databases on SSD, that makes little to no difference. On the other hand, the version that takes advantage of the built-in controller also has built-in 10Gb ethernet, and has 4TB of near-line storage for backups and archives. And that means I won't need a separate backup/archive server, which was set to cost ~$2500 by itself.

I'm hoping to get a couple of these as servers, and a couple of similar boxes set up as development workstations. Just waiting for the money tree to flower...

Update: It will be a little longer before the money tree blooms, but we're deploying a similar server at my day job for stress-testing software, so I'll have a chance to evaluate the hardware soon anyway.  This is one advantage of working with big data - a small test server that amounts almost to petty cash is equivalent to a very nice server for my own projects.

Posted by: Pixy Misa at 02:30 AM | Comments (3) | Add Comment | Trackbacks (Suck)
Post contains 358 words, total size 5 kb.

Sunday, May 19

Geek

It's Like A Suspension Bridge

It has high points at either end, but sags a bit in the middle.

Season 7.2 of Doctor Who, that is.  I really wish that the 2012 Olympics had gone to Ulan Bator or some place like that, so we'd got two full seasons of Doctor Who instead of two half seasons (five episodes in 2012, and eight now in 2013).*

But The Bells of Saint John and The Name of the Doctor do at least serve as very capable bookends to a somewhat wobbly second half of the season.**

It would have been a dynamite season ending if but there was more than enough to hold fans' attention as it was.

All in all, it's the best kind of ending, one that retroactively improves everything that came before.  We get all too much of the other kind, so Steven Moffat should be applauded for pulling this trick off here.

As a side note: The BBC accidentally shipped out a couple of hundred copies of the season box set on Blu-Ray a week before the finale was set to air.  And still there were no leaks of the surprises in store.

* Doctor Who was cut, apparently, because so much of the BBC was tied up in the Olympics.  Meh, I say.  Meh!  There's another Olympics every four years; there's only one Doctor Who.

** Neil Gaiman's The Doctor's Wife was brilliant; his Nightmare in Silver this season...  Less so.

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

Geek

/etc/cron.weekly/raid-check

WFT?

Linux now rescans all your (software) RAID arrays every week.  I thought it was a hardware problem.

This is possibly a good thing, maybe.

It is proceeding at an aggregate of 700MB/s, which is nice to see.

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

Thursday, May 16

Geek

No Nexus 7+ / 7.2 / 8 / Whatever

Nothing.  Absolutely nothing.

But HP have announced their SlateBook10 x2, a 10.1" Android convertible with a Tegra 4 CPU and a 1920x1200 display.

/images/hero-slatebook-x2_tcm_245_1410169.jpg


It's similar to the Asus Transformer Infinity, but significantly faster, and a good bit cheaper at $480 including the dock.  2GB RAM and 64GB of flash storage plus a full-size SD slot in the keyboard dock, and maybe a microSD slot in the tablet itself.  (HP's site doesn't list one, but the various blurbs on the tech news sites do.)

Specs aren't perfect - it's not quite "retina class" - but definitely interesting.

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

Geek

Blah

Well, I'm still up, might as well watch the Google I/O keynote.  Just need to occupy myself for a few minutes 'til it starts...


Okay, now it's started.  Blah blah blah...

Blah blah blah...

Oh yeah, that's why I never watch these things, much less go to them.

Blah blah blah...

The music video at the start wasn't bad, but this is better:


Blah blah Android blah blah Chrome blah.

Okay, yeah, they're okay-ish.  Android is Linux, Chrome is KHTML.

Blah blah blah...

Blah 900 million activations blah...  

Blah 48 billion app installs blah...

Using Play as an end-run around manufacturers and carriers who are slack about updating devices. i.e. all of them.  Good thinking.

Location.  Well, people who actually get a chance to leave the house might care about that, so okay.

Cross-platform single-sign on.  Sounds good, until you realise that it leads to cross-platform single irrevocable account suspension, like my situation with Youtube.

Their messaging platform now allows you to send as well as receive.  Well, there's a huge breakthrough. roll eyes

I hate live broadcasts.  You can't fast-forward through the crap.

Okay, here's something good: A new Android IDE called Android Studio, based on JetBrains IntelliJ Idea.  I don't use IntelliJ, because Java sucks, but it's the basis for PyCharm, which I use every day.  It's a nice IDE.  And Android Studio looks really good.

Red boots.  Makes a change from the blah outfits the rest of the presenters are wearing.

Better developer metrics.  Fine.  Not exciting for me, but fine.

Blah blah...

The Play Store on the Nexus 10, huh?  Have you fixed the insane flickering during app downloads yet?  Didn't think so.

"Do you guys want to hear about music?"  <crickets>  "Well, I'm going to talk about it anyway."

Wow, this is stupefying.  They have a music service, just like the other ninety-odd music services that already exist.

Blardly blardly bleep...

Google Samsung Galaxy Nexus S4 $649 unlocked.  Hardly a new device, and they're only selling the 16GB version.  But it's the only Android device sold by Google with expandable storage.  Does this signify anything?  Who knows.

Oh gawd, now they're going to talk about Chrome.  I'm outta here.

Chromebooks.  They've sold dozens of them!  You can just feel the lack of enthusiasm when the presenter pauses at applause moments.

They're porting Chrome to Android.  "Let's dive in deeper."  Let's not.  Next!

WebP and VP9.  Okay, good, get this stuff out there.  Support is pretty much absent outside Chrome right now.

Blah blah....

They're giving away Chromebook Pixels to all attendees, instantly tripling the install base.  That got some applause, because no-one in their right mind would actually buy one.

Gah.  Google Apps.  Bletch.  I mean, fine, if you don't actually care about functionality or productivity.

Oh great, it's the music guy again.

Google get-em-while-they're-young Play for Education.

Something about Malaysia.  Okay, getting 4G internet access in every school in the country and giving the students Chromebooks (though not Pixels).  That's good stuff.

Google+, Search, Maps.  Bleen.  Polite applause.  No-one cares about Google+.  It's not that it's bad, it's just that it's bleh.  Now they've Pinterested it.  Yeah, that's an improvement.

Like Apple moving developers off MacOS to try to get iOS 7 out the door, it's a reminder that you can be one of the biggest, most technologically advanced corporations in history and still flounder helplessly in the face of not having any idea what you are supposed to be doing.

I work for a little startup.  My problems all stem from lack of resources.  The vision part is easy.  But when you have all the resources you could ask for (and Apple could hire another ten thousand developers tomorrow if that would help) you still have to somehow focus those resources on executing your vision.  That's hard.  In fact, it's basically insoluble, which is why we see an unending cycle of boom and bust in hi-tech companies.

Has he stopped talking about Google+ yet?

No.

Oh, now he's talking about photos.  I'm not actually watching the stream any more; it escalated from stupefying to stultifying.  Next year, Google, your keynote is 30 minutes.  Anything that doesn't fit in that 30 minutes isn't worth having in the keynote.  This is ridiculous.

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

Tuesday, May 14

Geek

Pudding

It's never that simple.

I downloaded and installed Julia Studio and started tinkering, and things were going pretty smoothly, and I ran some simple benchmarks, and the best case was nearly as fast as Python.

Wait, what?

Hrm.

Python has a remarkably efficient core of functions, but its code execution is rather sluggish.  That is, Python itself is fast, but code written in Python is slow.  So, for example, splitting sentences into words in Python runs about five times faster than in Julia, according to my little benchmark.  But the more complicated your code gets, the more that should tilt in Julia's favour.

Indeed, Julia's standard library is written mostly in Julia, so the performance you get for built-in functions is the same as for your own code, where with Python there can be orders of magnitude between the two.

Still, /5 performance on early tests when you're seeking *20 is not encouraging.

Next week: Pixy investigates Numba.

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

Sunday, May 12

Geek

Why Does Julia Use * For String Concatenation?

I quote:
I think the main reason is that algebras over fields are commutative with respect to + but not necessarily for *. String concatenation is definitely not commutative. I can't remember whether this was part of the original motivation, but I also tend to think of this in the terms that string concatenation is a lot like taking the outer product, you're getting an object with the combined dimensionality of both factors.
This is difficult to argue with, but the answer is still not what I'd prefer.

I was writing a longer post on Julia last night, but the editor ate it.

Julia is an interesting new programming language (it first appeared last year) that attempts to provide the mathematical power and sheer computational efficiency of Fortran while offering programmers the expressiveness, flexibility, and clarity of Ruby. The result is 70% awesome, 10% odd, and 20% not there yet (since it's so new).

Here's a snippet:

cd("data") do
    open("outfile", "w") do f 
        write(f, data)
    end 
end

In these five short lines we already see two important things:
  1. Readable code. Neither curly brackets and semicolons, those codependent blights on programmer productivity, nor bizarre unfamiliar syntax like Smalltalk.

  2. Something like Ruby's blocks or Python's with - the cd function creates a context, as does the open function, and those contexts apply to the enclosed statements and are automatically cleaned up at the end. So the program changes its working directory to the data only for the code within the do...end block, without the programmer needing to worry about any details.
While Julia's syntax closely resembles sane, healthy, modern languages like Ruby and Python, it veers off in some details because it was designed by mathematicians rather than computer scientists. Thus you get the self-consistent if somewhat weird decision to use * for string concatenation.

More significantly, while Julia is object-oriented, it is not class-based (as most object-oriented languages are). It uses multiple dispatch based on the arguments to a function rather than binding functions to an object.

That is, where in Python you might define an image object and a resize method, and call it like this:

im = image("kitty-ears.jpg")
im.resize(x=500)

In Julia you'd define the data structure of the object, and then define a set of functions that act upon that object. There might already be a resize function that acts on arrays or vectors or memory-mapped files (or a hundred other things), but when you call

resize(im; x=500)

Julia knows that you mean the image resize function, because it knows that the variable im is an image. Values cannot change their type, so the Julia compiler can bind to the right version of the function at compile time, unlike Python or Ruby, where dispatch is always dynamic.

And that matters because it means that Julia is about 20x faster than Python.*

What Julia doesn't (currently) provide is multi-threaded programming. It's supports coroutines, called tasks, that allow you to write your code in a logically multi-threaded way. And it supports message-passing multi-processing, so you can spin up multiple instances of your application on different CPUs and easily dispatch tasks to other workers and receive the results when they're done. But you can't have multiple processes sharing a common native data structure.

But then, neither (really) can Python or Ruby. Both support threading, but both have global interpreter locks - the infamous GIL in Python - that means that only one thread is working on native code or data structures at a time. Threads get unlocked when they are doing I/O, and in some C libraries, so you do get a speedup in real-world applications. So if all three languages are effectively still single-threaded, with threads largely a programming convenience, you'd go with the one that's 20x faster, yes?

Yes, except that Python has a huge and wonderful standard library and an even huger and wonderfuller ecosystem of third-party packages.

Except except:
  1. You can embed Python in Julia, with two-way transfer of data and functions, using PyCall. You can just plain import your Python modules into a Julia program and use them:

    @pyimport pylab
    x = linspace(0,2*pi,1000); y = sin(3*x + 4*cos(2*x));
    pylab.plot(x, y; color="red", linewidth=2.0, linestyle="--")
    pylab.show()

    It's almost-but-not-quite Python on the Julia side (see the ; between the positional and named arguments in the pylab.plot call) but calling existing Python code from Julia is almost perfectly transparent.

  2. You can access MongoDB from Julia. MongoDB isn't perfect** but it's the swiss-army chainsaw*** of NoSQL, at least since they fixed it so that it doesn't crash and destroy all your data every time a gnat sneezes.****

  3. You can pretend it's Ruby and slap together web apps like there's no tomorrow using Morsel:

    using Morsel

    app = Morsel.app()

    route(app, GET | POST | PUT, "/") do req, res
        "This is the root"
    end

    get(app, "/about") do req, res
        "This app is running on Morsel"
    end

    start(app, 8000)

  4. There's support for ZeroMQ, the lightweight queueing... Thing.

  5. Also, Curl.

That's important, because those five items cover everything I need for both my day job and my off hour programming. If I can still use all my existing code and write new code that runs 10-20x faster (I use Psyco, the precursor to PyPy, here at mee.nu, which delivers a real-world speedup of very close to 2x, so only 10x there) in a language that doesn't make me want to shoot myself, that makes me a happy bunny.

Full support for multi-threaded programming would make it even better, but since I don't really have that now, it's not a show-stopper. For mee.nu, I run five instances of Minx behind a load-balancing proxy, though we rarely need the performance. Julia provides plenty of ways to use multi-processor machines, just not that particular way.

And if it really delivers 10x the performance in practice, that's like getting 10-way multi-threading with zero software overheads and zero extra hardware.

So a cautious thumbs up so far from me.

* Or about 4x faster than PyPy, the Python JIT compiler. But since you can easily embed Python code in Julia (the PyCall package provides this) and PyPy still has a number of incompatibilities with common Python packages, there's an argument that Julia is a better way to go even for Python programmers.

** Indeed, while it supports atomic updates, it doesn't support transactions across multiple records, so some would argue that it's not a database at all. My definition of a database is that it lets you find what you want in better than linear time even if you don't know what you're looking for - i.e. it provides some sort of secondary index. By that definition, MongoDB is a database. And Redis and RethinkDB and Aerospike aren't. Which doesn't mean they're not useful - Redis is bleedin' wonderful! - it just means they're not databases. They're datathingies.

*** Joke stolen shamelessly.

**** Which to their credit they fixed four major releases ago. These day's it's pretty robust.

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

<< Page 1 of 2 >>
84kb generated in CPU 0.04, elapsed 0.0546 seconds.
55 queries taking 0.0236 seconds, 289 records returned.
Powered by Minx 1.1.6c-pink.