Monday, August 16, 2010

Adding Users In Leopard

How to add a user from the command line in Leopard (since it's apparently too much for Apple to include useradd-esque scripts).


dscl localhost -create /Local/Default/Users/zack
dscl localhost -create /Local/Default/Users/zack UserShell /bin/zsh
dscl localhost -create /Local/Default/Users/zack RealName "Zack"
dscl localhost -create /Local/Default/Users/zack UniqueID 502
dscl localhost -create /Local/Default/Users/zack PrimaryGroupID 1000
dscl localhost -create /Local/Default/Users/zack NFSHomeDirectory /Users/zack
dscl localhost -passwd /Local/Default/Users/zack changeme


Also to look at what UIDs already exist...


dscl localhost -list /Local/Default/Users UniqueID


Scripting this is trivial but I am lazy. ;)

Friday, April 30, 2010

Metallica vector art wallpaper

Couldn't find a good Metallica wallpaper so I went and made one using Inkscape and Gimp, and the And Justice For All cover.

1680x1050


Will provide other sizes upon request. I also made a version without the gradient although it doesn't look as cool so I'm not going to post it.

Thursday, April 29, 2010

Boost + Graphviz

BGL is a template library which (I think) means that everything is just a bunch of header files. The Graphviz stuff apparently needs to be compiled though, and while I installed all of the Boost stuff through my package manager (Fedora 12) apparently I did not get this Boost/Graphviz stuff.

Here are the steps I went to build libbgl-viz.so, which can be linked to in order to run the graphviz examples. This is probably all documented somewhere but I could not find very clear instructions anywhere. Also it's worth noting that if you build a dynamic library you will probably have to distribute it with your application as you can't rely on it being in the Boost distribution (because it's not)!

1) Download boost-1.4 source.

2) Go to boost/libs/graph/src.

3) g++ -c *.cpp -I../../../ -Wno-deprecated -fPIC

4) g++ -shared -o libbgl-viz.so *.o

5) Next steps are optional if you do not want to install system-wide.

6) sudo chown root:root libbgl-viz.so

7) sudo mv libbgl-viz.so /usr/lib/

8) Try building some of the examples, you will need to link with boost_graph, libbgl-viz, and boost_regex. If you get any errors try playing with the order.

9) Go party!

Thursday, August 20, 2009

Performance comparison of TGA and PNG

I've been doing a little research into the TGA and PNG formats. Dagger currently supports both, something I'd like to change as it is completely unnecessary.

Both support RGBA and are lossless which are pretty much my only requirements.

TGA is simple to load, but the files are usually two to three times larger than the equivalent image saved as a PNG. PNG on the other hand is a compressed format so the files are pretty small, but loading is much more complex and I've resorted to using a PNG library that is several times larger than Dagger...

There is no reason to support two different formats with essentially the same feature set, therefore I would like to cut one of them out of Dagger. The problem so far has been deciding which one.

I can live with TGA's large file sizes, what I'm mainly concerned about is loading performance. I originally thought that loading compressed images would be faster because disk IO is slow. To test this I wrote a quick benchmark that loads a 512x512x24 image 100 (I also tried 1000 but the results were mostly the same) times and then takes the average load time for each format. It turns out that in all of my tests loading a TGA is 2.5-3.5 times faster than loading the equivalent PNG.

The code and the images can be found here. Make sure that you configure & compile Dagger with.
./configure DEFS=-DD_TEXTURE_DISABLE
make
The test was performed several times on both 32bit and 64bit machines (Fedora 11).

TGA loading was performed by Dagger, PNG loading was performed by whatever version of libpng ships with Fedora.

Edit: After changing my loader to use GL_BGR(A) instead of manually swapping pixel components, TGA loading is now roughly 12 times faster than PNG loading. Wow.

Late edit: Not sure how scientific this was. Increasing the number of times I loaded a texture showed that eventually PNG beats TGA. Unsure what exactly this means, but I'm probably going to go with PNG afterall seeing as how for the time being some kind of image compression is still important.

Sunday, July 26, 2009

Quadtrees (in Java)!

I've been working on a quadtree implementation for a couple of weekends now. My first attempts were in Python, but I eventually got something working in Java (mostly because I wanted an excuse to learn Ant :-).

Here is what it looks like so far...



Only supports inserts right now, so not very useful, but I will add motion in the next version.

You can download the source code here. The license is BSD.

Thursday, July 9, 2009

The Joys of MS Excel

Today I added export-to-csv functionality to the app I'm working on (so people can dump data to Excel and do whatever the hell they want with it).

Spent about twenty minutes trying to figure out why certain fields in Excel were showing up as "########" instead of "2009/10/11" (for example).

Apparently Excel does this when a cell without spaces is deemed to be too long. Weird.

Friday, April 10, 2009

AVI to DVD script

A script I wrote to convert a movie (specifically AVI) to a format that you can easily burn to a DVD and watch in your DVD player.

It's an improved version of this script.

Make sure you install ffmpeg, dvdauthor, and mkisofs before you try it. To do this in Fedora 10 you would type sudo yum install ffmpeg dvdauthor mkisofs.

To convert the movie example_movie.avi to a DVD, one would do sh avi_to_dvd.sh example_movie.avi movie.iso. This will take a very long time (especially for long movies). When it is done you should be left with a nice fancy ISO file that you can burn to a DVD with your favorite burning program.

Have fun!

Note: This will consume large amounts of /tmp space so do not use this if your hard drive is nearly full. Also if for some reason the script dies before it gets a chance to clean up it's temporary work, navigate to /tmp and delete folders starting with avi-to-dvd.
#!/bin/sh
#
# Convert an AVI to a ready-to-burn DVD iso.
#
# Author: Tom Arnold
# License: Public Domain
# Requires: ffmpeg, dvdauthor, mkisofs, and lots of space in /tmp
# References: http://www.realtimeedit.com/blog/2007/10/07/avi-to-dvd-script-linux-ubuntu/

INPUT="$1"
OUTPUT="$2"
FFMPEG="ffmpeg"
DVDAUTH="dvdauthor"
MAKEISO="mkisofs"
RM="rm -rf"
TEMP="/tmp/avi-to-dvd-$RANDOM"

if [ $# -ne 2 ];
then
echo "Usage: avi_to_dvd [INPUT] [OUTPUT]"
exit 1
fi

## Make a folder in /tmp for us to do work in.
mkdir $TEMP

## Convert the movie to DVD format (NTSC).
$FFMPEG -i "$INPUT" -y -target ntsc-dvd -sameq -aspect 16:9 "$TEMP/out.mpg"

## Create the DVD.
$DVDAUTH --title -o "$TEMP/dvd" -f "$TEMP/out.mpg"
$DVDAUTH -o "$TEMP/dvd" -T

## Make the actual ISO image.
$MAKEISO -dvd-video -o $OUTPUT "$TEMP/dvd"

## Clean up.
$RM "$TEMP"
echo "Done!"