Skip to content

Instantly share code, notes, and snippets.


Johannes Brodwall jhannes

View GitHub Profile
jhannes / package.json
Last active Aug 29, 2015
Promises you can trust
View package.json
"name": "promises",
"scripts": {
"test": "node node_modules/mocha/bin/mocha --watch --growl"
"devDependencies": {
"chai": "^1.10.0",
"mocha": "^2.0.1"
"dependencies": {
jhannes /
Created Jan 16, 2015
Jetty 9 embedded Servlet 3.0 annotations without war file
public class AnnotationScanner {
protected void scanForAnnotations(final String javaPackage, WebAppContext webapp) throws Exception {
Set<AnnotationParser.Handler> handlers = new HashSet<>();
handlers.add(new WebServletAnnotationHandler(webapp));
handlers.add(new WebFilterAnnotationHandler(webapp));
handlers.add(new WebListenerAnnotationHandler(webapp));
AnnotationParser annotationParser = new AnnotationParser();
for (URL url : ((URLClassLoader) getClass().getClassLoader()).getURLs()) {
jhannes / print-tree.clj
Created Apr 29, 2011
Tree pretty printer in clojure
View print-tree.clj
(defn print-subtree [subtree prefix]
(if (empty? subtree)
(apply str prefix (first subtree) "\n"
(map #(print-subtree %1 (str "\t" prefix)) (rest subtree)))))
(defn print-tree [tree]
(print-subtree tree ""))
(deftest print-empty-tree
jhannes / investigate.rb
Created May 13, 2011
Refactoring in the 4th dimension
View investigate.rb
require 'rubygems'
require 'awesome_print'
load 'repodepot.rb'
class CodeEvent
def full_method_name
class_name + "#" + method_name
describe "Explored minefield", ->
expectHints = (mines) ->
expect(new exports.Minefield(mines:mines,explored:true).hints())
it "shows rows and columns", ->
expectHints(["...","..."]).toEqual ["000", "000"]
it "shows minefield shape", ->
expectHints(["..","..",".."]).toEqual ["00","00","00"]
jhannes /
Created Jan 26, 2012
CoffeeScript from 26th january
class exports.Minefield
constructor: (@cells)->
hints: ->
((@hint(row,col) for col in @cols()).join("") for row in @rows())
rows: -> [0...@cells.length]
cols: -> [0...@cells[0].length]
hint: (row,col) ->
jhannes / Separate Solar and Bounce
Created Mar 18, 2012
Mikado "tree" for "space" exercise 2
View Separate Solar and Bounce
v Separate Solar system and bouncing ball logic
v Delete IS_BOUNCING_BALL flagg
v Move main method of Space to subclasses
v Create subclasses of "Space"
v Remove IS_BOUNCING_BALLS if-test in main
v Extract main method logic to non-static method
v Make IS_BOUNCING_BALLS into an argument
v Convert if statements into polymorphism
v Convert IS_BOUNCING_BALLS into non-static field in Space
class ShoppingCart
constructor: (@items)->
@counts = (count for item,count of @items).sort().reverse()
totalPrice: -> @subTotal() - @discount()
subTotal: ->
result = 0
result += count*8 for item,count of @items
discount: ->
@discountForSetOfSize(2, 5) +
jhannes /
Created Jun 26, 2012
Syntax proof-of-concept for XML library
public class Demo {
private static Object baseUrl;
public static void main(String[] args) {
Namespace SOAP_NS = new Namespace("", "SOAP");
Namespace MSG_NS = new Namespace("", "msg");
TagName envelopeTag = SOAP_NS.tag("Envelope");
Element envelope = envelopeTag.create(
jhannes /
Created Jul 16, 2012
Test driving external dependencies
public class CurrencyPublisherTest {
private SubscriptionRepository subscriptionRepository = mock(SubscriptionRepository.class);
private EmailService emailService = mock(EmailService.class);
private CurrencyPublisher publisher = new CurrencyPublisher();
private CurrencyService currencyService = mock(CurrencyService.class);
private GeolocationService geolocationService = mock(GeolocationService.class);
public void shouldPublishCurrency() throws Exception {
You can’t perform that action at this time.