Recent blog entries for lloydwood

A couple of weeks ago I released SaVi 1.5.0 for simulating satellite constellations.

SaVi has a few new tricks; it can load in satellite elsets from the web, and create animations of satellite movement.

And it was pleasing to find that SaVi can be made to work on Windows 10 (Anniversary developer edition) via its Ubuntu package. I've never learned to build Windows applications, and that no longer matters!

I've been working on and off with SaVi for twenty years, pretty much. Now, back to the occasional bugfixes.

SaVi seasonal software development.

It's become my habit to use some of the downtime over the year-end break to... oh, said that about a year ago.

Once again, I did some software work over Christmas and released SaVi 1.4.9, for simulating satellite constellations.

This is mostly a maintenance release, which was needed to remove some old code that used tmpnam(), which modern linkers dislike. But it also adds some approximate simulations of LeoSat and OneWeb, which are "megaconstellations" currently competing to get constructed. (Mega? They're not even kilo...)

I'm having flashbacks to the 1990s, when I first started on SaVi, and big constellations like Teledesic and Skybridge were all the rage.
26 Dec 2014 (updated 4 Jan 2015 at 22:39 UTC) »
SaVi seasonal software development.

It's become my habit to use some of the downtime over the year-end break to work on development of the SaVi satellite software that I maintain.

This Christmas, I added a new multi-colour map projection, which is quite pretty to look at in 3D in Geomview, if not as clear or as informative as other renderings.

It's in development code, and snapshots featuring that and a simulation of the equatorial exclusion zone for geostationary satellites are available. I should do a 1.4.7 release early in the new year.

Update: SaVi 1.4.7 was released on 5 January 2015, and available for download.

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.

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