The first version of this program was originally written on a plane from SFO->EWR on 7-23-15 in about an hour and was based on an idea I had been mulling in my mind for years. Dedup scans files or directories and calculates fingerprint hashes based on their contents and identifies duplicated or uniques files or directories.
Without the -d (directory) switch dedup recursively scans the supplied directories in depth first
order and records the hash of each file in a map of slices keyed by the hash. After the scan is
complete, the resulting map is iterated, and if any of the slices have a length of more than one,
then the files on that slice are all duplicates of each other.
With the -d switch the supplied directories are recursively scanned and the fingerprint hashes of each directory are calculated from their files and directories and recorded in the map. Again, if the length of any slice is more than one then the entire directory is duplicated.
If the -r switch is supplied, the sense of the test is reversed and files that are not duplicated are recorded and optionally printed. Useful when you want to know which files haven't been backed up.
Other options exist to cull the size of files examined, limit the depth of the recursive search, regular expression matching, sorting the results, and so on.
I wanted to do a pure data structure project for a long time. I ran across cuckoo hash tables and instantly knew it was right for me. I have been interested in hash tables and hash functions for a long time.
This package is an implementation of a Cuckoo Hash Table. A Cuckoo Hash Table is similar to Go's built-in hash map but uses multiple hash tables with a cascading random walk slot eviction strategy when hashing conflicts occur. Additional hash tables can optionally be added on the fly. A Cuckoo Hash Table is a three level data structure. Multiple hash tables are comprised of buckets. Each bucket contains slots. Each slot contains a key/value pair. The hash tables all use the same hash function but with different seeds.
Go's built in map is well designed and implemented. The author uses it all the time. This Cuckoo Hash Table is a boutique and bespoke data structure better suited for special cases where the datasets are large, memory efficiency is key, or both.
I stoped using OpenGL just as GLSL shaders made their appearance and very much wanted to get back up to speed.
I created a scene graph framework to experiment with OpenGL and shaders. I received a contract to visualize and
compare color gamuts in three dimensions and had this working before the contract was postponed and ultimately canceled.
This is one of the first packages I wrote in Go. It's an extension to "fmt" and adds format characters "%h" and "%H". New numeric types allow a number and units to be specified. The package provides for auto-scaling numbers by controlling the SI unit suffix used. For example, "1000000 bytes/sec" becomes "1 MB/sec". Input is also supported for flags. For example, "dd if=in of=out bs=1M".