Pythagoras Tree

Nothing fancy, but I tried one of my first exercises from my first year of computer science. Drawing a Pythogoras Tree recursively. Back then we used Modula-2. The ironic part is that Modula-2 had no drawing functionality whatsoever, so we had to dump every calculated vector in a format that would be read in by some other software to visualise it.

Now in Python:

# Pythagoras
# Draws a Pythagoras Tree of n depth

import math
import turtle

# initialize - create t object and sets it in starting position
t = turtle.Pen()
t.penup()
t.left(90)
t.back(200)
t.pendown()

def tree(base, n):
    if n == 0:
        return
    else: # draw a tree
        new_base = math.sqrt((base*base)/2)
        t.forward(base)
        left_branch(new_base, n-1)
        t.right(90)
        t.forward(base)
        right_branch(new_base, n-1)
        t.right(90)
        t.forward(base)
        t.right(90)
        t.forward(base)
        t.right(90)
        return

def left_branch(base, n): 
# sets the turtle in the right angle and calls tree()
    if n == 0:
        return
    else:
        t.left(45)
        tree(base, n)
        t.right(45)
        return

def right_branch(base, n): 
# sets the turtle in right position and angle and calls tree()
    if n == 0:
        return
    else:
        t.left(135)
        t.forward(base)
        t.right(90)
        tree(base, n)
        t.right(90)
        t.forward(base)
        t.left(45)

tree(100,10)

recursiveTraaHowever much I like recursive functions for their elegance (and I do admit there are much better examples of elegance than my Pythagoras Tree), I do not care much for this recursive tree as it is drawn on the screen. You can see the tree develop itself in a n-depth from left to right manner. Which means until the first call of tree() finishes the tree has no complete trunk to stand on.

I think it would be better to have a tree object with a grow method so that everytime tree.grow() is called the tree grows a little new tree from each existing branch. I don’t know how to do that yet. But when I do I’ll post it.

Here is the complete tree with depth n = 10.

recursiveTreeFinished

 

 

Starting Python

I have some free time on my hands at the moment. So to keep busy I started learning Python this weekPython for Kids book cover. I already did some Python coursework on codacedemy a while ago. But somehow that never stuck. I’m using a cute little book from No Starch Press. You might have heard of it: Python for Kids. I bought it a couple of years ago for my wife who showed some interest in coding. It looked to me like a good book for the beginning programmer with no technical or mathematical background whatsoever, who just wants to know more about it. Cause we all should.. Alas, she never made it passed chapter five. But the book is still here and so am I. I will give it the eager reader it deserves. Although I’m in my forties I still consider myself a kid and soon I will be building my own games in Python. Can’t wait!

TiddlyWiki

Ik ben allergisch voor websites die sterk afhankelijk zijn van JavaScript. Ik denk dat JavaScript veel nuttige toepassingen kent om functionaliteit toe te voegen aan een site, maar content moet ook zichtbaar zijn als JavaScript even uit staat. Ik gebruik de NoScript extensie voor Firefox en surf met plezier over het internet zonder dat er spontaan zaken gebeuren waar ik geen toestemming voor geef. Ik hou JavaScript aan een kort lijntje. Des te gekker misschien dat ik zo enthousiast ben over TiddlyWiki.

In 2007 kwam ik op internet dit elegante stukje software tegen, geschreven door Jeremy Ruston. De ontwikkelaar noemt het zelf “a non-linear personal web notebook”. Ik had er niet direct een nut voor, maar ik was zo onder de indruk dat ik voornemens was dit te gebruiken. Dat moment kwam drie jaar later, toen ik verlegen zat om een klein, snel en portable systeem om content te managen. Belangrijkste eisen: geen complexe database, waardoor geen support van IT nodig was en intuïtief in gebruik. Ik heb TiddlyWiki gebruikt om een knowledgebase in te richten voor een supportdesk. Moeiteloos geïmplementeerd en het beheer was snel overdraagbaar aan collega’s.

“It’s like a hypertext card index system from the future”

TiddlyWiki is één html bestand waarin een complete wiki draait. Er is dus geen back-end. Alle interfacing en datamanupilatie wordt gedaan met JavaScript. Met thema’s kun je het uiterlijk van TiddlyWiki aan je voorkeuren aanpassen en meer functionaliteit verkrijg je door plugins te installeren. Deze thema’s en plugins mag je ook zelf schrijven als je een woordje JavaScript spreekt. TiddlyWiki is uiteraard open source.

In tegenstelling tot andere wiki software bestaat de TiddlyWiki niet uit pagina’s, maar uit Tiddlers: kleine records met informatie. In de filosofie van TiddlyWiki is de waarde van beschreven informatie direct proportioneel aan het gemak waarin het kan worden hergebruikt. Dat betekent dat Tiddlers niet, zoals bij andere wiki’s, zo volledig mogelijk zijn, maar compact en zo precies mogelijk zijn. Door Tiddlers aan elkaar te linken en uitvoerig gebruik te maken van tags onstaat een rijkheid van informatie.

Er huist een geweldige kracht in TiddlyWiki door de mogelijkheid om op basis van tags informatie te organiseren (in een semantisch netwerk) en op verschillende manieren te presenteren en te bewerken. Een goed voorbeeld hiervan is mSGD, de Getting Things Done implementatie van Simon Baird (gebaseerd op de TiddlyWiki Classic).

TiddlyWiki viert alweer haar tienjarig bestaan en er is (al een tijdje) een nieuwe versie: TiddlyWiki5. Als je informatie op een handige manier digitaal wil bewaren moet je hier echt eens naar kijken. TiddlyWiki is top.