Skip to content

Instantly share code, notes, and snippets.

@tomgibara
tomgibara / PlotColorSamples.java
Created March 28, 2012 22:50
Color sample plotter
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
@tomgibara
tomgibara / BitVectorDeBruijn.java
Created March 4, 2012 00:44
Generation of De Bruijn sequence using BitVector
// generates a binary De Bruijn sequence over words of length n
private BitVector generateDeBruijn(int n) {
// Check arguments
if (n < 0) throw new IllegalArgumentException("n is negative");
if (n > 31) throw new IllegalArgumentException("n exceeds 31");
// There are 2^n words in the entire sequence
int length = 1 << n;
// Create a set that records which words we have already seen
Set<Integer> memory = new BitVector(length).asSet();
// Store the sequence with an extra n bits
@tomgibara
tomgibara / BitVectorSample.java
Created February 29, 2012 22:36
BitVector introduction
// INTRODUCTION
/**
* A BitVector is a fixed-length sequence of bits. It's an extremely
* powerful class because of the huge number of ways that it allows the
* bits to be accessed and modified. Algorithms that rely heavily on bit
* manipulation can improve their performance by reducing the frequency
* with which bit data needs to be moved between different data
* structures; they can rely on BitVector for all the bit manipulations
* they require.
@tomgibara
tomgibara / BloomFilterIntro.java
Created December 14, 2011 00:36
Crinch BloomFilter introduction
/**
* This introduction assumes familiarity with the general concept of
* Bloom filters. If you don't have this try reading:
*
* http://en.wikipedia.org/wiki/Bloom_filter
*/
// HASHING
/**
@tomgibara
tomgibara / CannyTest.java
Created October 18, 2011 16:21
Canny Edge Detection Test
import java.awt.Container;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
@tomgibara
tomgibara / PermutationSample.java
Created October 18, 2011 00:36
Crinch permutation package overview
// SIMPLE PERMUTATIONS
/**
* Let's start off by creating the simplest permutation: the identity
* permutation, in this case over 5 elements.
*/
Permutation identity = Permutation.identity(5);
/**
@tomgibara
tomgibara / ViewRenderer.java
Created July 15, 2011 07:08
A base class providing asynchronous rendering for Android Adapter implementations
package com.tomgibara.android.util;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.PriorityBlockingQueue;
@tomgibara
tomgibara / trackersnippet.java
Created May 18, 2011 04:05
Example of using GoogleAnalyticsTracker wrapper
// example analytics
GoogleAnalyticsTracker gat = GoogleAnalyticsTracker.getInstance();
gat.start(/* your analytics parameters */);
// example config
Tracker tracker = new Tracker(gat);
tracker.setAsynchronous(true);
tracker.disable(Tracker.Category.NET);
//example usage
@tomgibara
tomgibara / Tracker.java
Created May 18, 2011 03:51
A wrapper around Google analytics tracker for Android
package com.tomgibara.android.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import android.os.AsyncTask;
import android.os.SystemClock;
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
@tomgibara
tomgibara / NumberWriter.java
Created December 17, 2010 23:55
A small class for converting integers to their textual representation without creating any garbage.
package com.tomgibara.android.util;
/**
* <p>
* Writes ints into char array without generating any objects. This is typically
* useful in instances where numbers must be rendered within a game-loop or
* animation. Instances of this class are not safe for multithreaded use.
* </p>
*
* <p>