Skip to content

Instantly share code, notes, and snippets.

@ryan-beckett
ryan-beckett / AsynchronousParse.java
Last active June 22, 2023 09:27
Example of how to parallelize file tree walk and parse.
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
@ryan-beckett
ryan-beckett / XMLValidator.java
Created October 4, 2012 22:53
Validates XML files against a specified schema or the default WC3 standard.
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
@ryan-beckett
ryan-beckett / RSA.java
Created August 20, 2012 20:44
Public-key encryption (RSA) - A primitive implementation not meant to be used in production systems, but rather to serve as a learning tool.
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
/**
* An efficient implementation of the RSA public-key cipher. All generated
* exponents used for encryption and decryption are greater than <code>5</code>
* (to secure against basic attacks, e.g. Chinese Remainder Theorem). The
@ryan-beckett
ryan-beckett / LogicSolver.java
Created June 5, 2012 10:13
A quick and dirty implementation that parses and evaluates a logical expression in post-fix form.
import java.util.*;
import java.lang.*;
////////////////////////////////////////////////////////////////
// A quick and dirty implementation that parses and evaluates a
// logical expression in post-fix form. From left to right binary
// expressions are extracted (3 tokens), evaluated, and it's result
// is inserted into its place. This is done until the expression is
// gone. E.g.
//
@ryan-beckett
ryan-beckett / loop.mips
Created May 2, 2012 01:19
A quick looping test in MIPS
.text
main:
li $t4, 1, #t4 = counter
i1: ori $t0, $0, 1000
i2: ori $t1, $0, 2000
i3: addi $t2, $t0, 100
i4: #lw $t3, 0($t1)
i5: #lw $t4, 0($t0)
i6: add $t3, $t3, $t4
@ryan-beckett
ryan-beckett / mips_ex1.asm
Created April 18, 2012 20:29
MIPS assembly: demonstrates the use of the stack for sending function arguments.
.text
main:
#populate arg registers
li $a0, 1
li $a1, 2
li $a2, 3
li $a3, 4
#push 5th arg on stack
li $t0, 10
@ryan-beckett
ryan-beckett / GraphSet.java
Created March 12, 2012 13:59
A generic directed graph that doesn't allow duplicate elements and performs topological sorting to detect cycles. All primitive operations are done in linear time. Sorting is done in polynomial time at most.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
*
* A generic directed graph that doesn't allow duplicate elements and performs
* topological sorting to detect cycles. All primitive operations are done in
@ryan-beckett
ryan-beckett / NotificationHandler.java
Created February 10, 2012 19:51
A facade for receiving notifcations for SMB file modifications through the JCIFS API. Depends on jcifs-1.3.17.jar.
/**
*
* Defines a default handler for notification callbacks.
*
* @author Ryan Beckett
* @version 1.0
*
*/
public abstract class NotificationHandler {
@ryan-beckett
ryan-beckett / ControllerTest.java
Created February 10, 2012 14:14
MVC w/ event handlers and observers
import java.util.*;
public class ControllerTest {
private static Controller controller = Controller.getInstance();
private static View view = new View();
private static LoginHandler loginHandler = new LoginHandler();
public static void main(String[] args) {
@ryan-beckett
ryan-beckett / CommentStripper.java
Created February 10, 2012 11:34
A denomstration of how to strip block-style and inline comments using a finite-state machine. Handles edge cases correctly. You can change the behavior of the class by overriding CommentStripper.doAction(int index).
import java.util.*;
public class CommentStripper {
private StaticTransitionTable transitions;
private StringBuilder sb;
private int index;
private int state;
private final char EOF = '@';