Recent blog entries for lloydwood

SaVi on Raspberry Pi.

Discovered that my SaVi satellite constellation visualization software could be installed easily on a Raspberry Pi, which is far more powerful than what I began working on SaVi on, so many years ago.

And that SaVi is now available for a very wide range of architectures.

My PhD work is running on the big screen in the living room. Looks like I've finally gotten satellite TV.

Learned that there's now a 64-bit Cygwin. And that SaVi and Geomview don't work well under it - OpenGL is disabled to prevent a crash, limiting Geomview to software rendering, and there's something odd in Cygwin's piping support that prevents the two applications communicating, unlike 32-bit Cygwin and 32- and 64-bit everything else.

I discovered this while helping out a Geomview user who had naively installed 64-bit using the installer from Cygwin's site, as there was no warning that it was very new and unproven. Still, the instructions for building Geomview under Cygwin have been updated.

Cygwin's an ever-moving target, without stable fixed-point releases that are a known quantity. Exposing users to development may help development, but it doesn't do much for users.

SaVi 1.4.6 is now released. Minor changes and bugfixes. This was necessary to support Cygwin transitioning away from Insight Tcl 8.4 to unix Tcl 8.5. Documenting how to build this on Mac OS X is a moving target, now that the Xcode app requires checking a box before command and compile tools become available. Hopefully the instructions are clear enough.
SaVi 1.4.5 is now released. Minor changes for the most part, accumulated over a few months. Supporting Mac OS X and its buggy Tcl continues to surprise, but now SaVi can build with ActiveTcl installs, it's a less buggy experience than it was.
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.

94 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!