Why did you say six months?
He's coming.
This matters. This is important. Why did you say six months?
Why did you say five minutes?

Saturday, November 28

Geek

That's A Relief

Photoshop's batch processing allows me to apply multiple effects to each image, and save the results of each effect to a different director.  So I can set the whole thing up to run as a single process.

So each time I add new images to the library, I don't have to run 40+ different batch jobs, just the one.  Which is 40+ times less work for me.

Don't know if my CPU is ever going to forgive me, though.

Update: Must remember to include "close image" command at the end...  Otherwise it doesn't.

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

Geek

If It's Not Too Hot To Touch, It's Not Too Hot

So I was binkling merrily away in Snap Art 2 and found an oil painting effect which I quite liked, and applied it to a sample photo to see the results full scale, and

BEEEEEEEEEEEEEEEEEEEEE

What the?!

Okay, it's stopped now.  Sounded like maybe something got stuck in a fan?  Don't know.  I mean, it couldn't have been anything to do with the program, after all, if I undo it and do it ag-

BEEEEEEEEEEEEEEEEEEEEE

Oh.

Where's that coming from?  I didn't think I had the case speaker hooked up.  It doesn't seem to be coming from the main speakers.  Let's crank this image up to 4x size and redo the filter, so that I have time to track it down -

BEEEEE BEEEEEEEEEEEEEEEEEEEE  BEEEEEEEE

It's coming from the motherboard.  Aha!  It's the CPU temperature alarm.  It's the first time I've run heavily multi-threaded floating-point code, and it's been a warm day, so I've probably had the alarm set too low all along and this is just the first time I've tripped it.  I'll just reboot, bump up the temperature alarm in BIOS to whatever the next higher setting is, and all should be well.

Hmm, currently set to go off at 70°C.  I can bump that up to 80°C, but that seems rather high.  Still, my CPU is rated to run at what, 85°C?  So that's okay. 

(Actually, it's not - after rebooting and looking it up, it's only rated for 61°C.  Older AMD chips were indeed rated that high, but more recent chips are generally in the 60-70°C range.  Anyway...)

La la la...  (Prepares dinner while Windows boots.)

So open Photoshop, open the image, run the filter ag-

BEEEEEEEEEEEEEEEEEEEEE

Crap.

Well, let's find a program that will tell me what the CPU temperature is so I can see what the alarm should be set to.

Okay, CPU temperature is 35°C (and ambient is 25°C), and it jumps up to

BEEEEEEEEEEEEEEEEEEEEE

43°C for a couple of seconds when I run the filter.  In other words, the temperature alarm is worse than useless.

So I'm going to shoot it.

Update: Yup, that did the trick.  Bumped the image up to 5x size (so 25x the number of pixels) and re-ran the filter, which took a while.  Temperature climbed to 53°C, which tells me not to run heavy multi-threaded floating-point apps when the ambient temperature is over 33°C.  (If it's linear that way, which it almost certainly isn't.)  But if room temperature is comfortable for me, it's comfortable for my CPU, no matter what I do to it.

Also of interest is that my CPU is spending most of its time running at half speed.  The little temperature monitoring app I downloaded shows me the clock speed of each core.  I thought it had it wrong, because it showed them at 1.2GHz.  But when Photoshop gets busy, they go up to 2.4GHz, and then drop back down again afterwards.  And single-threaded apps push just one of the cores up to full speed.  So AMD Cool&Quiet™ really is good for something other than messing up the clock in VMWare.

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

Friday, November 27

Geek

Quaddies

So, I have a library of images to process through a library of filters in a range of different sizes (for the Minx 1.2 theme gallery).

Photoshop has a batch mode that's a little awkward but not too painful.  But the actual processing of 2500 images at a time is not quick.

Then I upgraded my copy of Snap Art to the new version, which supports multiple cores.

On my quad-core CPU it runs about four times as fast.  Fancy that.

I'm still trying to reproduce the "Colourful Abstract Pencil Sketch" preset in the new version (all the presets are different).  But since the new version doesn't overwrite the old, I can just run that one the old way.

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

Thursday, November 26

Geek

Switcheroo

My KVM works perfectly.  The problem was that (a) I had Nagi connected on port 3 rather than port 1, and (b) the USB connection to Nagi was loose so it wasn't registering.

Since I only had Nagi switched on when I first tested it, all I got was a blank screen - the KVM doesn't pass through the video if there's no USB connection.

Now I just need to swap around the cables to the intended order (from Haruhi-Yurie-Nagi-Tanarotte to Nagi-Haruhi-Yurie-Tanarotte, ick) and all will be well.

But first I have a report to write for work, and then some spammers to kill.

Update: And when I say it works perfectly, I mean if you don't mind having your monitor randomly blank out or change resolutions.  Bleh.

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

Saturday, November 21

Geek

Moving Right Along

Yurie is now up and running with Fedora 12, which - apart from the complete failure of software RAID on the boot partition - is quite nice. The video driver issues of 9 and 10 are gone (this was already fixed in 11) and the latest version of KDE, while still plagued by some terrible design choices in its application menu, is certainly pretty.

So now I'm installing Windows 2008 R2 on Haruhi. And look! Complete failure of software RAID on the boot partition! The motherboard supports "fakeraid", and has a driver for Windows 2003, but I can get the installer to even acknowledge the existence of the driver disk, much less load the driver.

Windows Server supports software RAID (as distinct from motherboard fakeraid), but there's no install-time option for that at all.

I think you can clone a drive into a RAID-1 set once installed. We'll soon find out, anyway.

Update: Oops. Picked the wrong install option and got Windows without windows. Starting again...

Update: Yes, you can mirror the system volume after install; indeed, once you find the right place (computer management, not storage management) it's quite painless.

I think, as with Yurie, this will protect the operating system and my data, but the system will not be bootable if the boot drive fails. Still, not too shabby. Also, it only seems to have RAID-1, so I'm left with a 750GB mirrored system volume and a single 750GB unprotected disk. I guess that can be for backups.

Now all that's left is to pull the capybara's nest of cables from under my desk, vacuum, and then plug all four computers into the KVM switch.

Update: Oh yeah, there's still the question of what to do with Nagi, with its three 1.5TB Seagate InstaBricks™ (the 7200.11).

These drives have two major firmware problems: First, they intermittently suffer from lengthy delays, which can cause problems if they're in a RAID array - they get marked as failed. Second, there's a bug where if you're on the last entry of the SMART event log ring buffer when you power up, it writes to the following memory location rather than the first buffer location, and permanently bricks itself.

There's a firmware upgrade, but the first couple of releases of the upgrade also bricked the drive. So for the past year my strategy has been frequent backups and try not to think about it.

I'm inclined to pull them out and replace them with a six-disk RAID-5 array of 1TB Seagate 7200.12 drives, which is what Tanarotte has.  Bit expensive though.

Posted by: Pixy Misa at 01:08 PM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 432 words, total size 3 kb.

Monday, November 16

Geek

Is It Beautiful Because It Is True Or True Because It Is Beautiful?

This is the police.  We have you surrounded.  Put down the regex and step away from the keyboard.

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

Geek

Damn You, Speed Of Light, Part The Second

When you're used to maintaining Linux boxen on the other side of the planet (I'm in Sydney, the servers I herd are variously in Seattle and Dallas) it's amazing how responsive a server that's five metres away (as the packet routes) can be.

When you've just spent four days working on a server five metres away, though, it's no fun to come back and work on machine three thousand times that distance.  No fun at all.

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

Sunday, November 15

Geek

Lizardless

openSUSE locks up at the start of installation.  Feh.

I'm going to play with Citrix XenServer now, and see if that's any good.

Update: XenServer is good, except that they go out of their way to make it hard to use software RAID, and they officially support exactly one RAID controller.  So if you don't have a 3Ware 9650SE, it's not much good to you.

Mmph.  Fedora 12 is out in three days.

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

Saturday, November 14

Geek

Spoiled For Choice

I'm rebuilding all my computers over the next few weeks - Haruhi, Yuri, Nagi and Tanarotte are all set the be backed up and reinstalled, and Potemayo to at least be upgraded.

Nagi and Potemayo will be going to Windows 7, that's pretty simple.

Haruhi most likely to Windows Server 2008 R2.  (It costs me nothing, and I want to play with SQL Server.)

Tanarotte will be going to CentOS 5.4.  It currently has 5.3, but the installation was done in something of a rush so I'm going to wipe it and reinstall with a little more care.  That will be my main development/test systems (and a 5TB file server as well), running OpenVZ to provide multiple virtual test
environments.

And Yurie will be going to...  Either Fedora 12 (though I haven't been too impressed with Fedora lately; the user interface has taken major steps backwards) or Kubuntu 9.10 (don't like Gnome) or openSUSE 11.2 (I haven't used SUSE in years, but I have a chameleon plushy here somewhere).  Leaning towards the lizard right now.

Oh, and I have a four-port DVI/USB KVM switch too.  Only the single monitor version; there's a dual-monitor version, but it costs $600...  And only one of the computers actually has dual-DVI out; the rest are DVI+VGA.

Update: Tanarotte is happily reinstalling now.  Since I can do that while preserving the 3.2TB of files I've already loaded up, it should be pretty quick and painless.

Update: Pretty much painless, except when I tried to add CentOS Extras during install and the installer dropped dead.  Up and running with the file share intact and OpenVZ installed and updated to the latest stable kernel.  Now I just need to refresh the backups of Haruhi and Yurie and I can attack them too.

Update: Yurie backed up.  Moving on to Haruhi.

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

Thursday, November 12

Geek

Allure

Code
import lua
import time

N=100000

t0=time.time()

def timer(f,n):
  t0=time.time()
  f(n)
  print f.__name__, time.time()-t0

def pyinc(n):
  a=0
  for i in range(n):
    a+=1

def pyclassinc(n):
  a=myclass()
  for i in range(n):
    a.inc()

def luainc(n):
  lua.execute('a=0')
  for i in range(n):
    lua.execute('a=a+1')

def luabulkinc(n):
  lua.execute('a=0')
  lua.execute('n=%s' % n)
  lua.execute('for i = 1,n do a=a+1 end')

def luaclassinc(n):
  lua.execute('a=python.eval("myclass()")')
  for i in range(n):
    lua.execute('a.inc()')

def luabulkclassinc(n):
  lua.execute('a=python.eval("myclass()")')
  lua.execute('n=%s' % n)
  lua.execute('for i = 1,n do a.inc() end')

def luasandboxclassinc(n):
  lua.execute('a=python.eval("myclass()")')
  lua.execute('python=nil')
  lua.execute('require=nil')
  for i in range(n):
    lua.execute('a.inc()')

class myclass(object):
  def __init__(self):
    self.value = 0
  def inc(self):
    self.value+=1

timer(pyinc,N)
timer(luainc,N)
timer(luabulkinc,N)
timer(pyclassinc,N)
timer(luaclassinc,N)
timer(luabulkclassinc,N)
timer(luasandboxclassinc,N)
Results
pyinc 0.0194
luainc 0.5534
luabulkinc 0.013
pyclassinc 0.071
luaclassinc 0.7851
luabulkclassinc 0.2597
luasandboxclassinc 0.7885
What does this all mean?

Well, first, Minx is getting a real scripting language. You can program stuff using the template language (real programming as opposed to just doing data selection and layout) but it gets hairy pretty fast.

Second, the scripting language runs faster than the application language - or would, except that the application is run using a JIT compiler. There's a JIT compiler for the scripting language too, but I don't know how to get that working as an embedded environment.

Third, the work I'm doing to make the Minx code simpler and more efficient - via a set of "magical" classes that do lazy evaluation for all the database-to-template-tag translation - transfers directly to the coming scripting language. There is an overhead involved - about 2.5μs per cross-language method call - so you don't want to do anything insanely complicated in the scripting language (or at least, not without caching the data in native variables).  And the overhead of transferring execution into the scripting environment in the first place is on the order of 5μs, so a few tens of thousands of script calls and things will start to add up...

Update: It pays to read the descriptions of all the branches; someone's already done what I've spent the past two hours failing to do, i.e. localise the Lua state.

Update: Of course, the branch that does what I want doesn't actually compile.  However, the changes in the branch that compiles don't interfere with the changes in the branch that does what I want...  I think.

Update: A bit more hickory-hackery* and it compiles and installs correctly.  The installation of the previous version prevent it from running correctly unless the interface file is copied into the working directory, but that's a minor issue; I can hunt down the old libraries and killerise them.

There may still be a problem with Lua 5.0 vs. 5.1; I'll take a look for that, since that's fixed in the other version.  I'll also note that the guy who did the changes to localise the interpreter state has done a better job of it than my hackish attempts, so many thanks to him.

Update: Aaand...  Working?  Seems to be!  Test results:
pyinc 0.0196
luainc 0.5294
luabulkinc 0.0135
pyclassinc 0.0692
luaclassinc 0.7695
luabulkclassinc 0.2589
luasandboxclassinc 0.7672
Possibly even a little faster, though the difference isn't significant.

Now to test it out with many interpreters.

Update: Many interpreters work fine; no obvious memory leaks.  However, creating a new interpreter context takes about 170μs; the 5μs I mentioned earlier was running a script inside an already-created environment.  Since most pages will only need one context anyway, that doesn't matter a great deal.  170μs is slow in computer terms, but pretty fast in human terms (about 250 times faster than the shortest interval you can notice).

* Editing the code with an axe.

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

<< Page 1 of 1 >>
64kb generated in CPU 0.14, elapsed 0.3989 seconds.
52 queries taking 0.3234 seconds, 287 records returned.
Powered by Minx 1.1.6c-pink.
Using http / http://ai.mee.nu / 285