Sunday, June 20, 2010
Please stop moving deadlines
Friday, June 18, 2010
Stir fried spicy spinach
- 200g spinach
- 2 cloves garlic
- 2 thai chilies (a normal chili pepper should work fine too)
- juice of half a lemon
- 1 tbsp grenadine concentrate (Ayurveda)
- arachide oil
Monday, June 14, 2010
Untitled
I made this for lunch yesterday and it was even better than I expected:
- 3 eggs
- handful of coriander leaves
- two hands full of mushrooms
- juice of half a lime
- 2 tbsp of skimmed milk
- 1 tbsp sesame oil
- 1 tbsp sweet soya sauce
- 1 tsp thai fish sauce
- rice oil (to fry in)
Chop the coriander and whisk all ingredients together except for the rice oil and the mushrooms. Slice mushrooms. Heat up a frying pan and toss in the oil and mushrooms. Fry until the mushrooms have lost most of their liquids and give off their aroma.Reduce the heat (or take the pan off the heat for the moment). Whisk the mushrooms into the omelet mixture. Make sure the pan is clean (if you have a good pan you can just stare at it for 0.5 seconds), add some more oil if needed and gently poor the omelet mixture into the pan so that the mushrooms are spread well. Gently fry the omelet on medium heat, turn it if you feel like it. When it's golden brown and completely solid you can eat.
(all the amounts in this recipe are wild guesses as usual, I don't believe in careful measurements when cooking)Note to self: how to sparsely check out a git repository
Sunday, June 13, 2010
Using negative feedback to prevent disaster in Software Development
Positive feedback induces brilliance. Like the brilliant glow of a nuclear meltdown is caused by positive feedback. If you're doing something absolutely great, positive feedback will cause you to do more of it and it will cause others to try and emulate your behavior. Brilliant right? But what if you're doing something that is ever so slightly off target? Will positive feedback make you augment your course? Will it make others slightly vary your behavior before emulating it? I don't think so. You need negative feedback to change. I have a background in physics and some electronics and signal analysis is part of that background. In electronics positive feedback doesn't have the credits that it has in social studies. It is viewed as a destructive force that will ruin your signal, make your appliance useless, or even destroy things. Let's look at the example of a feedback loop in it's most generic form:
Thursday, May 27, 2010
How to build Spring Integration from the sources
0. Forget about your IDE and open up a terminal (on Windows there are some extra steps). 1. make sure you have a command line svn client (there are many installation procedures) the end result should be:
(master) iwein:si$ svn --version
svn, version 1.6.11 (r934486)
compiled Apr 19 2010, 23:04:06
Any version later than 1.6 will do I think.2. make sure you have the right version of Java:
(master) iwein:si$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)This might be a bit confusing and I want to avoid the details, but you need to remember that Spring and also Spring Integration are compatible with Java 1.5, but the build is not necessarily. 1.6 is fine. 3. make sure you have the right version of Maven:
(master) iwein:elmar-trunk$ mvn -version
Maven version: 2.0.9
Java version: 1.6.0_15
OS name: "mac os x" version: "10.6" arch: "x86_64" Family: "mac" Any 2.0.x version will do (except the ones with bugs :) ).4. check out the trunk:
iwein:si-temp$ svn co https://src.springsource.org/svn/spring-integration/trunk/
This will give you a lot of output, but no errors.5. Build the project:
iwein:si-temp$ cd trunk/
iwein:trunk$ mvn clean install
Again a lot of output, but no errors6. Import the project in your IDE
Using the power of google you can find guides for:
It's a matter of taste how you do it, and if these fancy IDE's are not for you there is always vim. Point is that as long as you make sure everything works from the command line, the IDE support is just a convenience that you could live without (theoretically). Other options
If you don't like Subversion, you can also use git. Make sure you have git and git-svn installed and then run:
git svn clone https://src.springsource.org/svn/spring-integration/trunk/ -r HEAD
If you don't know Subversion yet, I'd recommend this option.If you are bored with Maven you could also check out the Spring Integration gradle build by Jeroen van Erp. Using a fork makes you dependent on Jeroen for porting commits on the Subversion HEAD, or your own merge skills, but the coolness of gradle might very well be worth it. Let me know if you run into trouble or if you think I missed a step. Happy hacking!
Sunday, May 16, 2010
Simplifying Spring Integration testing
It seems like last week that I would happily write things like "public abstract class BaseMyCompanyTest extends AbstractTransactionalDatasourceSpringContextTests {" and think I was the man. It seems like yesterday that Spring 2.5 came along and made things a lot easier with @ContextConfiguration. But now I find myself grinding against the boilerplate again.
Before I start tearing it down let me first tell you that I highly respect the work by Sam Brannen and that I have gotten very good mileage out it for over two years now. There is always room for improvement and that is the aim of the following experiment. The TestContext framework that comes with Spring might be very useful, it is also quite complex. You can only use it with a custom testrunner and and you need to pass the location of the configurations to be loaded in a class level annotation. This means it is non trivial and asymmetric to load multiple contexts in a single test. Also the incantations you have to put on the class are not exactly concise (although they are much better than the AbstractTooFreakinLongClassNames options of old). Since JUnit 4.7 there is @Rule. And you can do some pretty cool stuff with it. When combining it with Spring though I wasn't impressed. I felt that Spring Test was making it hard to use the power of Rules. This is ironic, since it is just this JUnit feature that would make Spring Test a lot better.How cool would it be if you could write:
1 2 3 4 5 | @Rule public TemporarySpringContext context = new TemporarySpringContext("context.xml"); @Autowired ApplicationContext thisShouldBeWired; |
And it would just work?Gues what, I've got a green test that says it does! It only took me 50 lines of code, which you can find in my spring sandbox on github. The important class is this the TemporarySpringContext (which I might give a better name soon):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public class TemporarySpringContext extends TestWatchman { /** * Cache of Spring application contexts. This needs to be static, as tests * are typically destroyed and recreated between running individual test methods. */ static final ContextCache contextCache = new ContextCache(); private ConfigurableApplicationContext context; private final String[] contextLocations; public TemporarySpringContext(String... contextLocations) { this.contextLocations = contextLocations; try { context = contextCache.contextForLocations(contextLocations); } catch (Exception e) { throw new RuntimeException(e); } } @Override public Statement apply(Statement base, FrameworkMethod method, Object target) { context.getAutowireCapableBeanFactory().autowireBean(target); return super.apply(base, method, target); } public ConfigurableApplicationContext getContext() { return context; } public void dirtyContext(){ contextCache.markDirty(contextLocations); } } |
Because it extends TestWatchman you can hook into al the phases of your test by simply overriding a method. Because it is just a MethodRule field you can add different contexts to your test class. There is plenty of room to polish this, but it has more potential than the SpringJUnit4ClassRunner I think.
