Skip to content

Instantly share code, notes, and snippets.

View jhannes's full-sized avatar

Johannes Brodwall jhannes

View GitHub Profile
@jhannes
jhannes / print-tree.clj
Created April 29, 2011 10:22
Tree pretty printer in clojure
(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
jhannes / investigate.rb
Created May 13, 2011 11:06
Refactoring in the 4th dimension
require 'rubygems'
require 'awesome_print'
load 'repodepot.rb'
class CodeEvent
def full_method_name
class_name + "#" + method_name
end
@jhannes
jhannes / minefield_spec.coffee
Created December 21, 2011 15:28
minefield_spec
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
jhannes / minefield.coffee
Created January 26, 2012 19:20
CoffeeScript from irb.no 26th january
class exports.Minefield
constructor: (@cells)->
hints: ->
((@hint(row,col) for col in @cols()).join("") for row in @rows())
rows: -> [[email protected]]
cols: -> [0...@cells[0].length]
hint: (row,col) ->
@jhannes
jhannes / Separate Solar and Bounce
Created March 18, 2012 18:45
Mikado "tree" for "space" exercise 2
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
v Move IS_BOUNCING_BALLS to Space
@jhannes
jhannes / shopping.coffee
Created March 20, 2012 19:31
Potter kata tests
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
result
discount: ->
@discountForSetOfSize(2, 5) +
@jhannes
jhannes / Xmldemo.java
Created June 26, 2012 20:48
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("http://soap.com", "SOAP");
Namespace MSG_NS = new Namespace("http://msg.com", "msg");
TagName envelopeTag = SOAP_NS.tag("Envelope");
Element envelope = envelopeTag.create(
@jhannes
jhannes / CurrencyPublisherTest.java
Created July 16, 2012 20:39
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);
@Test
public void shouldPublishCurrency() throws Exception {
package no.something.ftas.solvers;
import no.something.ftas.QuestionSolver;
public class AdditionSolver extends QuestionSolver {
public AdditionSolver() {
super("Addition");
}
@jhannes
jhannes / AppConfiguration.java
Last active August 2, 2024 10:22
Dead simple configuration
package com.johannesbrodwall.infrastructure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;