Fallacies of the tech recruitment process

by Tom 16. November 2012 08:49

Note: I would like to thank @gbarrs for reviewing my blog post almost instantly, and also the offer of @GraemeF, @MarkRendle, @swaggerdmangene and @moldyseaswimmer to be a reviewer. Without them, there would be a lot more Dunglish in this post...

Why I like my job.

I have been hooked into computers ever since I wrote my first few lines of Basic on my mothers' brand new TRS-80 Model 3 with 64Kb of ram and 2 - yes 2 !!! - diskdrives of a whopping 178Kb. (Actually, I did not write the code, but I copied it character by character from a textbook that might have looked like this, but in my defense, I was about 7 years old).

The first program probably looked like this:

10 PRINT "HI, WHAT IS YOUR NAME?"

20 INPUT N$

30 PRINT "HELLO, ",N$

Exciting, is it not? In the five years that followed, I learned almost every in and out of this machine, where to peek and poke in memory, how to set pixels on the screen (monochrome, 128x48 resolution, imagine that), which ASCII codes to send to my dot matrix printer to switch control modes, ...

When I was about twelve years old, I had written a drawing application, complete with circles, boxes, Bresenham lines, and even the possibility to print the graphics on the (very noisy) dot matrix printer (remember those printers which had to print on chained paper?).

More...

Project #Startup10: Working title - BIG

by Tom 9. August 2012 11:47

note: The source for this project is on Github; the following text is a copy of the file Readme.md.

Project #Startup10 - Startup #3 : Project Big

This is one of the projects of a bigger one: Project #StartUp10: Creating 10 Startups in one year.

The idea of project #3 was to create a platform to implement some really quick solutions for small problems. I would come to a customer, anayze the small issue in about 2-4 hours; implement it in the same timeframe, and by the end of the day the customer should have a working solution.

The solution implementation would have been lowcost, but there would be a small recurring fixed amount/month/user fee.

Architecture

It is currently still completely running clientside, and is just a very simple concept

  • you have assets or code with a mime-type
  • interaction between code happens using events

The idea was to distribute these events to other clients and the server using signalr or something similar

Example

Here is a simple example to prove the concept

code://Domain.Alerter - text/x-coffeescript

class Alerter

  alertcount: 0

  alert: (message) ->
    if (@alertcount < 5)
      emit 'alerted'
        message: message

  handle 'alerted', (e) ->
    @alertcount+=1

code://Denormalizer.Invoice - text/x-coffeescript

handle 'alerted', (e) ->
  loader.modifyTable 'table://invoice/123', ->
    @A5 += 1
    @B5 = e.message
  alert (e.message)

code://Example - text/x-coffeescript

code://Domain.Alerter
code://Denormalizer.Invoice

SUT = new Alerter()
for i in [1..10]
  SUT.alert "Woohoo #{i}"

report "<h1>Done</h1>"

How does it work ?

First you need to add the code resources mentioned on top as well as a "Data resource" named "invoice/123"

Then you press "Run" on the example, et voila, everything should work/compile, and you should see the updates in the excel-like grid in green, and a "report" saying "Done"

Demo

As usual, you can find the demo over at Appharbor: here.

Why are you not persueing with this project/Startup ?

Every single person I mention this to does not "get it", so I consider this not the way to go... For now at least. Maybe I will continue with this later on, but for now, I consider this a failure.

CIAO

 

Bookmark and Share

Epilogue: One night in Paris - #CQRS, beers and life in general

by Tom 13. July 2012 09:26

Introduction

When I told people I was going to drive to Paris (350KM, a 3 hour drive, traffic jams not included) to have a discussion with a few persons I know from the internet, most of my friends were questioning my sanity.

They know that I am not really following the path most people follow in life and career, but apparently to a lot of people really considered this to be one of my more exotic quircks, hence this blog post explaining my ideas.

Cost & Time

Why do you want to go this far to have a chat of a few hours with some people you have never seen before to talk about your work, and all in your free time. Have you considered the cost of doing this? Could you not find a better way to spend your money and time (on your startups for example) ?

Let's see:

  • Time: +/- 8 hours of driving; we probably talked about 4 to 6 hours..., and I had to spend the night in Paris - basically a 24h time-frame
  • Cost: 120€ for the hotel room, and add about the same amount for expenses/gas/"payage" etc
  • Unknowns: true: I had never seen them before in real life (even though I did read a lot of their articles and tweets, so I did have a general idea who to expect).
Hmmz, that seems like a lot, or not?

From the trenches - improving scalability in .Net for Paycento

by Tom 14. June 2012 10:21

Introduction

As most of you might know, I am currently in the process of improving the scalability of the Paycento backend..

As a real lean adept, the idea is to optimize where it hurts... As the creator of Node.js pointed out perfectly, the biggest pain is in the disk/network access etc.. Blocking threads hurt bigtime... So I started searching for easy low-cost optimizations that would not require to much effort....

 

Before we begin: Phase 0 - measuring=knowing; ask Heracles

More...

Y U build your own build server for Paycento?

by Tom 18. May 2012 14:56

Introduction

As you might now I started working quite recently for the startup Paycento. One of the things I am currently doing is setting up a system that allows us to do continuous integration and deployment everywhere and anywhere...

As I got into an interesting discussion with Simon Guindon on twitter about the choice between a custom tool and an existing one like CruiseControl.Net for example, he suggested me to write a blog post about it. So here it is...

You are suffering from the NIH (Not-Invented-Here) - syndrome!!

So what! I get paid to write code, so I should not care what I write... or not ?

As a startup we have to make sure that everything we do provides business value, so why would one go to all this trouble to write his own CI/deployment system, if there are existing things available ?

More...

Project YakShayQRS : another CQRS evolution

by Tom 19. March 2012 14:50

Introduction

TL;DR: I managed to minimize the CQRS overhead even further.

Over the years, I have been trying to minimize CQRS in several iterations, even releasing a framework and a lib in doing so. Yet, I have still not been satisfied by the approach I reached. This time I once again am pretty satisfied with the way things turned out, and they actually seem to require even way less overhead...


How it works

The concept is quite simple: I use a generic message class to implement messaging. Next to this I use the virtual keyword:

 

  • A class can contain virtual properties; these properties define the unique key of the instance. (f.e. an "Account" class has a "protected virtual string AccountId {get;set;}").
  • When invoking a message on a class type, an instance is loaded where the unique key is loaded based on the match between the message parameters and the classes' virtual properties. A message only gets invoked if it contains all the virtual properties from the class.
  • In order to alter state, one should use a virtual method.
  • One can only send messages targetting non-virtual methods to a class instance.
  • Non-virtual methods should never alter state, but instead call a virtual method that alters the state...
  • When rebuilding state based on past events, only the messages targetting the virtual methods are invoked to rebuild the state; no messages are emitted.
The advantage: all the wiring is convention-based; and once you get it it is quite easy: altering state should only happen through virtual methods, but these virtual methods should never contain any logic and just alter state or do nothing. The intercepted call to the virtual method gets emitted and gets processed by any non-virtual methods in other classes (if the message matches the classes' key).

HAxxors: Use SQL Server as a NOSql DB

by Tom 23. February 2012 07:05

Introduction

I was in an environment where I only had SQL Server available, but I really wanted a key-value store, so what did I do:

Use SQL Server as a Key-Value store - Major Haxxors

In order to be a proper key-valuestore, one would need to add the ability to do searching etc, but as this was only a quick hack where I did not require the search, I did not implement it.

In case I would have implemented a search, I probably would have used something like Elastic Search.

More...

Continuous thinking: Essay: TL;DR - functional programming = SQL SELECT statement

by Tom 18. December 2011 05:05

Introduction

I am currently in the process of studying F# - a functional programming language -. Since I am a big fan of meta-cognition, I am trying to find out how the mindset of the functional programming paradigm differs from that of a C# one (i.e. the more conventional, object oriented paradigm).

This essay also tries to point out some existing bridges to the functional paradigm that are currently implemented in the imperative programming language C#.

What is "Functional programming" exactly ?

I will reference wikipedia - while it still exists - for the definitions:

In computer science, functional programming is a programming paradigm 
that treats computation as the evaluation of mathematical functions 
and avoids state and mutable data. 
It emphasizes the application of functions, in contrast to the imperative 
programming style, which emphasizes changes in state.

Let us start with the first bit:

More...

Continuous thinking: CQRS explained to a 10-year old

by Tom 28. November 2011 03:20

Introduction

The concept behind CQRS is neat: detach your domain implementation completely from your representation requirements. I even wrote a framework for it as a learning tool, so somebody without any prior experience should be able to boot a CQRS app in a few minutes.

The main idea behind this framework is providing developers new to CQRS an operating room where they can compose their own little CQRS Frankenstein app.

The whole framework is constructed in a way that it forces you to make your domain implementation completely persistence ignorant, respecting typical AR/transactional boundaries.

Scritchy is not "the framework to write CQRS apps"; Scritchy is a framework that tries to provide you a learning platform where you can start grasping the basic principles, advantages and disadvantages in using CQRS.

Once you understand the basic principles behind the CQRS setup, and why everything is setup the way it is, I would advise anybody to gradually replace parts of the framework and just opt for whatever approach you like, using proper message busses, pub/sub/... 

If you write your app following the conventions Scritchy dictates, the only thing you need to change to remove the Scritchy dependency is the base object your Aggregate Root inherits from; that is the only dependency that is ever necessary in you app implementation. This was by design,to make future migrations as easy as possible.

I wrote this framework to enable a dev new to CQRS to get his app up and running in a few minutes... But apparently that is not enough....

More...

Quick tip: How to do TDD/BDD and debug unit tests with Visual Studio Express editions

by Tom 25. October 2011 07:47

Introduction

This article will show you how you can do TDD/BDD with Visual Studio Express editions. While most people say it is not possible, it is actually pretty easy.

Prerequisites

How do you do it ?

More...

About Tom

Tom Janssens op LinkedIn

Tom Janssens op twitter

Core bvba RSS

 

 

Tom Janssens is an independent freelance ICT consultant that has been "into computers" ever since the age of 7.

Typing source code from a book evolved into exploring the limits of coding in procedural, assembly, object-oriented and functional languages.
As he matured in software coding, he started focusing on the problems surrounding software development, and learned that software development is usually about people and interactions first, and about technology second.

Due to his diverse track record he gained insights in a lot of aspects of the software development process. Currently his main focus is on strategic ICT advice, lean product/project development and improving the software development process and architecture.

He avoids ivory-tower-approaches by applying and verifying the applicability of the latest tech buzz in software experiments.

He is also the founder of the following LinkedIn groups:

CQRS Professional
BDD Professional
Asp.Net MVC professional

More info about Tom and his company...

**** Hire me ! ****

My current project will probably run till the end of August 2013. Feel free to contact me for a project later on.

I can work either in Belgium or via remote access!!!

You can find my resume here: resume.pdf .

Community contributions and publications: here .

Call me directly at +32 478 336 376


Advertisement

Forget all your SCRUM -, Kanban - and other Agile and Lean certificates

Here is the only true AGILE and LEAN certificate you will ever need:

The Creative Recursive Analysis Process Certificate
(CRAP Certificate for short)

More info can be found at the official CRAP certificate website:
http://bit.ly/CRAPCertificate