Older blog entries for lloydwood (starting at number 99)

25 Apr 2011 (updated 26 Apr 2011 at 03:33 UTC) »
Why I'm learning to hate Matlab

Reason 1 The license manager. Having Matlab licensed for use at your university is fine until you move your laptop with its licensed copy somewhere else outside the firewall, and it stops working.

Reason 2 The license manager. Using a function in a particular toolbox is fine until all the licenses for that toolbox are checked out, at which point your code will fail when the function is called. That's an interpreted language that calls the license server before every command.

Reason 3 It's written in Java, and that's not very well hidden. Observe:


[ConditionalEventPump] Exception occurred during event 
dispatching:
java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown 
Source)
	at java.awt.image.Raster.createPackedRaster
(Unknown Source)
	at 
java.awt.image.DirectColorModel.createCompatibleWritableRas
ter(Unknown Source)
	at sun.awt.image.SunVolatileImage.getBackupImage
(Unknown Source)
	at 
sun.awt.image.VolatileSurfaceManager.getBackupSurface
(Unknown Source)
	at sun.awt.image.VolatileSurfaceManager.initialize
(Unknown Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
javax.swing.RepaintManager.getVolatileOffscreenBuffer
(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint
(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown 
Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents
(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions
(Unknown Source)
	at 
javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.
run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch
(Unknown 
Source)
	at java.awt.EventQueue.dispatchEvent(Unknown 
Source)
	at 
java.awt.EventDispatchThread.pumpOneEventForFilters
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForFilter
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForHierarchy
(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.run(Unknown 
Source)
[ConditionalEventPump] Exception occurred during event 
dispatching:
java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown 
Source)
	at java.awt.image.Raster.createPackedRaster
(Unknown Source)
	at 
java.awt.image.DirectColorModel.createCompatibleWritableRas
ter(Unknown Source)
	at sun.awt.image.SunVolatileImage.getBackupImage
(Unknown Source)
	at 
sun.awt.image.VolatileSurfaceManager.getBackupSurface
(Unknown Source)
	at sun.awt.image.VolatileSurfaceManager.initialize
(Unknown Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
javax.swing.RepaintManager.getVolatileOffscreenBuffer
(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint
(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown 
Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents
(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions
(Unknown Source)
	at 
javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.
run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch
(Unknown 
Source)
	at java.awt.EventQueue.dispatchEvent(Unknown 
Source)
	at 
java.awt.EventDispatchThread.pumpOneEventForFilters
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForFilter
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForHierarchy
(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.run(Unknown 
Source)
[ConditionalEventPump] Exception occurred during event 
dispatching:
java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown 
Source)
	at java.awt.image.Raster.createPackedRaster
(Unknown Source)
	at 
java.awt.image.DirectColorModel.createCompatibleWritableRas
ter(Unknown Source)
	at sun.awt.image.SunVolatileImage.getBackupImage
(Unknown Source)
	at 
sun.awt.image.VolatileSurfaceManager.getBackupSurface
(Unknown Source)
	at sun.awt.image.VolatileSurfaceManager.initialize
(Unknown Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
javax.swing.RepaintManager.getVolatileOffscreenBuffer
(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint
(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown 
Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents
(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions
(Unknown Source)
	at 
javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.
run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch
(Unknown 
Source)
	at java.awt.EventQueue.dispatchEvent(Unknown 
Source)
	at 
java.awt.EventDispatchThread.pumpOneEventForFilters
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForFilter
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForHierarchy
(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.run(Unknown 
Source)
[ConditionalEventPump] Exception occurred during event 
dispatching:
java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown 
Source)
	at java.awt.image.Raster.createPackedRaster
(Unknown Source)
	at 
java.awt.image.DirectColorModel.createCompatibleWritableRas
ter(Unknown Source)
	at sun.awt.image.SunVolatileImage.getBackupImage
(Unknown Source)
	at 
sun.awt.image.VolatileSurfaceManager.getBackupSurface
(Unknown Source)
	at sun.awt.image.VolatileSurfaceManager.initialize
(Unknown Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at sun.awt.image.SunVolatileImage.<init>(Unknown 
Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
java.awt.GraphicsConfiguration.createCompatibleVolatileImag
e(Unknown Source)
	at 
javax.swing.RepaintManager.getVolatileOffscreenBuffer
(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint
(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown 
Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent
(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents
(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions
(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions
(Unknown Source)
	at 
javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.
run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch
(Unknown 
Source)
	at java.awt.EventQueue.dispatchEvent(Unknown 
Source)
	at 
java.awt.EventDispatchThread.pumpOneEventForFilters
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForFilter
(Unknown Source)
	at 
java.awt.EventDispatchThread.pumpEventsForHierarchy
(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.pumpEvents
(Unknown 
Source)
	at java.awt.EventDispatchThread.run(Unknown 
Source)
[ConditionalEventPump] Exception occurred during event 
dispatching:
java.lang.OutOfMemoryError: Java heap space
[ConditionalEventPump] Exception occurred during event 
dispatching:
java.lang.OutOfMemoryError: Java heap space

So, Matlab is an interpreted language, now written in Java, that calls its license manager before every command and won't run on a work laptop that is being used as a laptop. What's not to like?

Memento mori

Just noticed that mirwin has a note on his wikipedia user page indicating that he has passed away. In 2008, as far as I can tell, but the Wikipedia page was only updated at the end of 2009; this may be news to other Advogato users.

I knew him only as the only certified master to rate me as master...

Timor mortis conturbat me.

24 Feb 2011 (updated 25 Feb 2011 at 09:49 UTC) »

SaVi 1.4.4 now has a Debian/Ubuntu package that is a one-click install. As is the Geomview package that SaVi uses for 3D animation, which is listed in the Synaptic package manager and under apt-get.

A couple of clicks, a geomview -run /usr/share/savi/savi, and the satellite constellation systems are yours to control, for far less than it would cost to build Galileo.

I still haven't produced that TIE fighter and Death Star texturemap, though.

SaVi

Today I released SaVi 1.4.4.

SaVi is software for simulation and visualization of satellite orbits, especially satellite constellations such as Iridium, Globalstar and O3b.

This point release builds on Tcl/Tk 8.6b1, updates script simulating O3b based on latest information, adds simulations of Japanese NeLS rosette and COMMstellation constellations, allows selection between existing J2 and classical J0 orbital models with -orbit-model flag, provides keyboard menu shortcuts (except on buggy Mac Tk), warns against deletion of help textfiles, supports building with just 'make' on x86_64 linux systems, adds notes on packaging and release processes.

All minor stuff, really. Although I'll continue to add to SaVi as and when it's needed, I can't yet see any reason for another release before 2012...

21 Jan 2011 (updated 27 Feb 2011 at 00:22 UTC) »

Satellite constellation simulation

With this week's announcement of the COMMstellation proposal from MSCI, "Big LEO" lots-of-low-orbiting-satellite communication systems are back in the news, a decade after the 90s hype of Iridium/Globalstar/Teledesic and their competitors petered out.

COMMstellation's initial announced design looks to have more active satellites than Iridium, and data delivery ambitions to rival Teledesic. (The number of satellites tends to drop over time with redesigns to cut costs; this happened with Iridium, with Teledesic, with Skybridge...) As a polar system, it's aiming at a similar market to, but a different geographic location than, the equatorial O3b.

So, I dusted off my SaVi satellite constellation visualization software and issued a SaVi development update that lets you simulate COMMstellation. And O3b.

21 Jan 2011 (updated 21 Jan 2011 at 16:19 UTC) »

Radio astronomy

We've been doing some work for radio astronomy -- not on the astronomy as such, but on the computing and networking that will needed to support the new generation of high-end astronomy arrays that are being designed and built, such as the Square Kilometre Array.

The idea is to be able to use existing Internet technologies -- fibre, Ethernet, IP -- but engineer their use to support very high speeds, using a transport protocol that we've designed, called Saratoga, that is in use to transfer imaging data from IP-enabled remote-sensing satellites.

So, here's Taking Saratoga from space-based ground sensors to ground-based space sensors.

Human interfaces

For years radios had been operated by means of pressing buttons and turning dials; then as the technology became more sophisticated the controls were made touch-sensitive -- you merely had to brush the panels with your fingers; now all you had to do was wave your hand in the general direction of the components and hope. It saved a lot of muscular expenditure, of course, but meant that you had to sit infuriatingly still if you wanted to keep listening to the same program.

-- Douglas Adams, The Hitchhiker's Guide to the Galaxy, ch. 11, 1979.

"Rather than bending down, leaning forward or picking it up you can use larger movements a little bit further away to do things like volume up or next song without changing modality.”

-- Stian Aldrin, CEO of Elliptic Labs, quoted in Kinect-like technology for iPad to wave through CES, Fabrizio Pilato, Mobile Magazine, 21 December 2010.

(I haven't touched SaVi at all this Christmas.)

22 Sep 2010 (updated 27 Feb 2011 at 00:27 UTC) »

SourceForge use

Interesting viewing Sourceforge download statistics for my SaVi satellite constellation visualization software. Most downloads are from the United States - no surprises there - but from Windows. Is everyone really installing Cygwin to use SaVi?

I grumbled previously about SourceForge project rankings; I see SaVi is still ranked 4000th or so out of around 240,000 registered projects. Which is about top 2%. And yet I have very few users or user activity - but 236,000 or so projects must have even less. Perhaps this lack of activity and lack of related advertising revenue helps explain why Sourceforge are laying people off? Geeknet, the parent of Sourceforge, recently announced losses, the departure of their CEO, and that they were changing their NASDAQ ticker symbol from LNUX.

In an idle vacation moment I did a redesign of the iPod shuffle. In, for my sins, Powerpoint...

Tcl/Tk on Mac OS X still broken

I've previously written about Mac OS X Tcl/Tk menu problems, which prevented SaVi from using the Mac menubar on 10.5 Leopard. That was fixed only by upgrading to 10.6 Snow Leopard. (Okay, downgrading to 10.4 Tiger also works, if your hardware supports it - but who wants to do that?)

I've just added accelerator key (menu shortcut) support in a SaVi development update. This is not straightforward - the Tk commands and binding are a bit arcane, not easy to get right, and you have to do things like bind both the upper- and lowercase keypresses - and it's even less straightforward if you're crossplatform, as I am.

Imagine my joy on discovering that pressing a newly-implemented menu shortcut on the Mac - and only on the Mac - froze the application. (This is on 10.6. Remember that in 10.5, you can't even use the menubar, and have to use my workaround popup menus, where accelerators work.) So now there's a workaround to turn off menu shortcuts on the Mac, except when you're using the workaround for 10.5, where the menu shortcuts work, but the menubar itself doesn't. Clear?

As usual, Tcl/Tk on other platforms Just Doesn't Have These Problems. I think Mac Tcl/Tk's problems are due to being over a decade less mature and stable than on other platforms (Tcl/Tk on the original Mac OS never went very far, as far as I know), with perhaps Apple selecting versions of Mac Tcl/Tk to ship in OS releases without communicating with Mac Tcl developers about what might be best to ship also being a factor.

I bought a MacBook in 2007. I ported my application to it, but couldn't get a Mac menubar. I worked around that and a bunch of other Mac-specific problems, and bought Snow Leopard in 2009. Now I have a menubar, but not with menu shortcuts.

Do I want to be a Mac developer? Well, have you seen what happens when I put the work in to try to get a reasonable Mac interface for my crossplatform application? It's just not worth it.

1 Aug 2010 (updated 1 Aug 2010 at 15:16 UTC) »

Playing with SaVi again

I've added a simulation of the NeLS constellation to my SaVi satellite visualization software . This was prompted by stumbling across papers that used NeLS as the basis for analysing the effects of overlap of satellite coverage areas on the use of intersatellite links in a mesh constellation -- papers based on the work in Chapter 7 of my PhD thesis and my 2001 AIAA diversity paper.

As I never got around to fleshing out that work with a journal paper, it was pleasing to eventually discover that someone else had done so, copying my simulation method and validating my results.

(My PhD thesis has been cited fifty times now, which is either a reflection of being useful to others, or of just being on the web.)

90 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!