Skip to content

Instantly share code, notes, and snippets.

View ratpackSimpleBlocking.groovy
import ratpack.exec.Blocking
import ratpack.handling.Context
import ratpack.groovy.test.embed.GroovyEmbeddedApp
@GrabResolver(name = 'jcenter', root = '')
tednaleid / simpleParallelDemo.groovy
Created Apr 24, 2016
Simple demo demonstrating Ratpack's use of parallel RxJava Observables
View simpleParallelDemo.groovy
#! /usr/bin/env groovy
import ratpack.exec.Blocking
import ratpack.groovy.test.embed.GroovyEmbeddedApp
import ratpack.handling.Context
import ratpack.http.client.HttpClient
import ratpack.rx.RxRatpack
import ratpack.test.embed.EmbeddedApp
import rx.Observable
@GrabResolver(name = 'jcenter', root = '')

This is a post by Joel Spolsky. The original post is linked at the bottom.

This is such a common question here and elsewhere that I will attempt to write the world's most canonical answer to this question. Hopefully in the future when someone on answers.onstartups asks how to split up the ownership of their new company, you can simply point to this answer.

The most important principle: Fairness, and the perception of fairness, is much more valuable than owning a large stake. Almost everything that can go wrong in a startup will go wrong, and one of the biggest things that can go wrong is huge, angry, shouting matches between the founders as to who worked harder, who owns more, whose idea was it anyway, etc. That is why I would always rather split a new company 50-50 with a friend than insist on owning 60% because "it was my idea," or because "I was more experienced" or anything else. Why? Because if I split the company 60-40, the company is going to fail when we argue ourselves to death. And if you ju

tednaleid /
Last active Aug 29, 2015
run grails tests in parallel
#! /usr/bin/env bash
command -v parallel >/dev/null 2>&1 || { echo >&2 "Please install parallel via brew: brew install parallel"; exit 1; }
BASE_DIR=$(cd "$(dirname "$0")"; pwd -P)/..
export GRAILS_OPTS="-Xmx2G -Xms2g -XX:MaxPermSize=500m"
OPEN_TESTLOG_AND_FAIL="( open target/test-reports/html/index.html && exit 1 )"
TEST_APP="( grails test-app --non-interactive || $OPEN_TESTLOG_AND_FAIL )"
tednaleid / BuildConfig.groovy
Last active Aug 29, 2015
Grails forked mode debug without suspending for remote debugger to connect first
View BuildConfig.groovy
// the jvmArgs flag allows us to override the default suspend=y that grails uses when you do --debug-fork
// the grails docs mention jvmArgs, but lie about it wanting a String, it actually wants a List of Strings
grails.project.fork = [
test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true, jvmArgs: ['-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005']],
run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false, jvmArgs: ['-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005']],
war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false, jvmArgs: ['-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005']],
console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, jvmArgs: ['-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005']]
tednaleid / Optional.groovy
Last active Dec 23, 2015
Fixing typos/cut paste error in Spec messages. Also changing toString to be just a passthrough to the object (or safe for null) as I think you'd just want the original object string and wouldn't want to pollute your output with the fact that it's wrapped in an Optional.
View Optional.groovy
import groovy.transform.Canonical
import spock.lang.Specification
class Optional<T> {
T reference
T get() {
if (isPresent()) return reference
tednaleid /
Created Sep 19, 2012
ZSH Script to scrape all the map tiles from
#! /usr/bin/env zsh
# after writing, found this link on Hacker News:
for NS in n s; do
for i in {1..25}; do
for WE in w e; do
for j in {1..25}; do
tednaleid / grailsScriptTiming.diff
Created Aug 28, 2012
output every grails event with timing
View grailsScriptTiming.diff
diff --git a/scripts/_GrailsEvents.groovy b/scripts/_GrailsEvents.groovy
index bc0b479..bb8f13e 100644
--- a/scripts/_GrailsEvents.groovy
+++ b/scripts/_GrailsEvents.groovy
@@ -49,13 +49,19 @@ binding.addBuildListener(eventListener)
// Set up the classpath for the event hooks.
// Now load them.
eventListener.classLoader = new GroovyClassLoader(classLoader)
View gist:3474341
# execute with `mvimvproject <projname>`
function mvimproject() {
if [ -n "$1" ]
#! /usr/bin/env sh
BASEDIR=\$(dirname \$0)
tednaleid / bootstrap_diff
Created Jul 22, 2012
removing redundant `packageApp()` call in bootstrap target shaves ~1sec off many grails commands for me
View bootstrap_diff
Not sure if this causes issues elsewhere, but `test-app`, `run-app`, and `package` seem fine. The `packageApp()` method is called again in `loadApp()` so this one seems redundant.
Shaves off about a second for me on a larger app as it removes a redundant call. YMMV, put it back if you see any issues:
diff --git a/scripts/_GrailsBootstrap.groovy b/scripts/_GrailsBootstrap.groovy
index 4c44aa3..218a41a 100644
--- a/scripts/_GrailsBootstrap.groovy
+++ b/scripts/_GrailsBootstrap.groovy
@@ -126,7 +126,7 @@ target(monitorApp:"Monitors an application for changes using the PluginMana
You can’t perform that action at this time.