Skip to content

Instantly share code, notes, and snippets.

View jimwhite's full-sized avatar

Jim White jimwhite

View GitHub Profile
@jimwhite
jimwhite / gum.groovy
Last active August 29, 2015 13:56
A Groovy solution for the Ninth Annual ICFP <http://www.boundvariable.org/task.shtml> by Jim White.
// A Groovy solution for the Ninth Annual ICFP <http://www.boundvariable.org/task.shtml> by Jim White.
import groovy.transform.CompileStatic
import java.nio.ByteBuffer
UM.load(new File(args[0])).spin(0)
@CompileStatic
final class UM {
@jimwhite
jimwhite / GatherClassBytecode.groovy
Last active August 29, 2015 13:56
A GroovyClassLoader that gathers up the bytecode that defines the classes it has compiled.
import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.control.CompilationUnit
import org.codehaus.groovy.control.SourceUnit
class MyGroovyClassLoader extends GroovyClassLoader {
MyGroovyClassLoader(ClassLoader parent) { super(parent) }
Map bytecodes = [:]
class MyClassCollector extends GroovyClassLoader.ClassCollector {
protected MyClassCollector(GroovyClassLoader.InnerLoader cl, CompilationUnit unit, SourceUnit su) {
package groovyx.cli;
import groovy.lang.Binding;
import groovy.lang.MissingPropertyException;
import groovy.lang.Script;
import java.util.HashMap;
import java.util.Map;
/**
// Bind 'out' variable to redirect script printing methods.
out = new StringWriter()
// Child script inherits our bindings, including 'out'.
// def result = evaluate(new File('TargetScript.groovy'))
def result = evaluate '''
def a = 42
println "The answer is $a."
a ** 2
'''
def evaluator = new CachingEvaluator()
assert evaluator.evaluate("1 + 2 * 3") == 7
assert evaluator.evaluate("1 + 2 * ${3}") == 7
assert evaluator.evaluate(new String("1 + 2 * 3")) == 7
assert evaluator.compiledScriptClasses.size() == 1
class CachingEvaluator {
GroovyShell shell = new GroovyShell()
@jimwhite
jimwhite / SyntheticClassTest.groovy
Last active August 29, 2015 14:06
Synthetic class in Groovy using compiler API.
// Fixed synthetic class snippet originally from <[email protected]>.
import groovyjarjarasm.asm.Opcodes
import org.codehaus.groovy.ast.*
import org.codehaus.groovy.ast.expr.*
import org.codehaus.groovy.control.*
import org.codehaus.groovy.tools.GroovyClass
CompilationUnit compilationUnit = new CompilationUnit()
def dat = ['NCC_TEST': [1234, 1345, 1232, 1133, 1100], 'NCC_TEST2': [9999,8765, 4321]]
println """update tablename set IsEnriched = 999 where ${
dat.collect { name, serials ->
"(ServerName = '$name' and ServerSerial in (${ serials.join(', ') }))"
}.join(" or ")
}"""
package org.ifcx.snippets;
/**
* Created by jim on 9/13/14.
*/
public class Foo {
protected int x;
int getX() { return x + 1; }
}
#!/bin/bash
# Source: http://toomuchdata.com/2012/06/25/how-to-install-python-2-7-3-on-centos-6-2/
# Install stuff #
#################
# Install development tools and some misc. necessary packages
yum -y groupinstall "Development tools"
yum -y install tar python-setuptools # Not included in Minimal group and Base is huge.
@jimwhite
jimwhite / SomeBean.groovy
Last active August 29, 2015 14:12
Example of using a BeanInfo class for custom getter/setter names for Groovy properties.
class SomeBean {
private String _memo
String foo() { _memo }
void foo(String v) { _memo = v }
public static void main(String[] args) {
SomeBean bean = new SomeBean();
bean.foo = 'bar'
println bean.foo