On Building for Windows

Having been a long-time user of free and open source software, I began giving back to the community in the summer of 2010 by producing Windows builds for Hugin, after the project had gone four releases without a Windows build. This was followed a year later by Windows builds for FontForge. At the time, I was a Windows user who occasionally dabbled with Linux. I created the builds so I could use them, but also shared them with the community. In the fall of 2012, roughly two years after I began building for Windows, I switched primarily to Linux but still ran Windows XP on a laptop. When Microsoft ended support for Windows XP this spring, I stopped using Windows altogether, since it became a security risk. My Windows use is now limited to the occasional use of virtual machines. As my use of Windows declined, so did my interest in building for it. First, I stopped building FontForge, and now I’ve stopped building Hugin.

Compared to Linux, building on Windows is a real pain. Linux’s package manager takes care of all the dependencies, so building a piece of software only involves building that piece of software. Building on Windows, on the other hand, requires building all the dependencies and any sub-dependencies, before one can build the piece of software that one wants to build. While much of these built dependencies can be reused between releases, there is no standard location for accessing these dependencies, unlike on Linux, so configuring the build is much more time consuming. Additionally, Windows’ lack of a package manager induces further headaches when trying to integrate Python support, as one can’t just specify it as a automatically resolved dependency as on Linux.

As I write this, my Windows builds of Hugin have been downloaded over 1.4 million times, and my builds of FontForge have been downloaded around 350 thousand times. If even only a very small fraction of those users responsible for the downloads contributed back to the community because of the downloads, I think the time I’ve spent creating the builds has been a good thing. That being said, I no longer plan on producing builds for Windows, as I can no longer justify the time and effort.

Posted in | Tagged , , | Leave a comment

Another Beamer Theme Matrix

The Beamer \LaTeX package for creating presentation slides has hundreds of styles available between all of the combinations of its included themes and color themes. Therefore, it is helpful to be able to look through all the possibilities in order to choose a style. A resource for this exists, the Beamer Theme Matrix; however, its load times lead much to be desired, particularly on a slower Internet connection. It uses two separate images for each combination, causing the browser to make over 800 requests to the server. This, combined with a page size of approximately 6.6MB, causes page load times in excess of 10 seconds on a fast connection and over a minute on a slow one. To remedy this, I created Another Beamer Theme Matrix. The page is less than 1MB and causes the browser to make fewer than 40 requests to the server, resulting in load times of under a second on a fast connection and under 10 seconds on a slow one, an order of magnitude improvement. This is accomplished by combining the thumbnails for each color theme of a particular theme into a single PNG sprite, which is then reduced to 8-bit color using pngquant and further optimized using OptiPNG. To further increase usability of the matrix, small bits of JavaScript were used to always keep the row and column labels visible, a lightbox was added for viewing the full-size previews, and a welcome and help screen was added that explains the matrix and how to use values from the matrix in a \LaTeX document.

Another Beamer Theme Matrix

Another Beamer Theme Matrix’s source code is available under an MIT license on GitHub. While inspired by the existing Beamer Theme Matrix, it is a complete rewrite in Python.

Posted in | Tagged , , , | Leave a comment

Using Marine Gravity Anomaly Map with Mapbox GL

Yesterday, a paper was published in Science on the creation of new, higher resolution maps of the ocean floor using gravity anomaly data collected via satellite. The authors write, “at scales smaller than 200 km, variations in marine gravity primarily reflect sea-floor topography.” Since rock has a different density than water, precise gravity measurements allow for an estimation of ocean depth. One of my first thoughts was to use this data in a map.

The authors provide their data for download; however, it is provided as GMT grid files, which are apparently common for oceanography research, instead of something more standard for GIS such as GeoTIFF. Using GMT, I was able to convert the data to the GDAL supported NetCDF format, although I had to reencode the file with CDO before GDAL would handle it. Using GDAL, I then reprojected the data in EPSG:3857, converted it from floating point to integer, and created a GeoTIFF file to be more friendly to web mapping applications.
Continue reading

Posted in | Tagged , , , | 11 Comments


Finding random comparisons interesting and being disappointed with the limited and deterministic nature of Wolfram Alpha’s quantity comparisons, I created Nugacious to make random comparisons between physical quantities. Using a set of about 700,000 physical quantities extracted from DBpedia, an ontology created from Wikipedia infoboxes, an essentially limitless number of random comparisons are provided with links to their source Wikipedia pages for your reading pleasure. Try it today!


Posted in | Tagged , , | Leave a comment

Pannellum 2.0

Two years in the making, I finally released Pannellum 2.0, which is a near complete rewrite. The renderer was replaced with raw WebGL, and multiresolution panorama support was added, along with a fallback CSS 3D renderer. Other additions include support for JSON configuration files, hotspots, tours, compass headings, CORS, partial panoramas, and cubic panoramas. I also put together a website for the viewer, registering pannellum.org. Unfortunately, there is still a dearth of documentation—something I need to work on. The below example demonstrates the multiresolution, hotspot, compass heading, and tour functionality using panoramas of the George Peabody Library and a JSON configuration file.

Posted in | Tagged , , , , , | 8 Comments