1. Project management

Amsterdam, January 29, 2020


  • Create a website
  • First sketch of your final project. Documented on final projects page
  • MkDocs
  • Git
  • Markdown
  • Imagemagick
  • Fill out personal page
  • Make page template for each week
  • Publish student agreement
  • Confidence in Linux terminal
  • Organize local file system
  • Figure out a project management system that incorporates: spiral development + time-supply + continuous documenting
  • master command line

Project management

Subtask Documentation time/min Outcome Fin
create project management task table describe process 60 publish table 1
Figure out workflow workflow template 90 template for each week 1
Learn markdown create cheat sheet 60 cheat sheet 1
Able to use Git confidently explainer + record commands 120 explainer + record command 1
Manipulate images cheat sheet 30 cheat sheet 1
MKdocs explainer + cheat sheet 120 explainer + cheat sheet 1
write about me page 0 30 publish page 1
Upload student agreement 0 15 publish 1
Command line cheat sheet ongoing cheatsheet 1
Sketch final assignment writing + drawing 180 publish 1
*available hour calculator working calculator 60 usable calculator 0
Current size of website 563 KB
Total 765m/12.8h
* is extra task.
Description link
Week overview principles and practices http://academy.cba.mit.edu/classes/principles_practices/index.html
Principles and practices video https://vimeo.com/388191611
Week overview project management http://academy.cba.mit.edu/classes/project_management/index.html
Project management video https://vimeo.com/388201669
Project management review https://vimeo.com/389832810
Recitation version control http://academany.fabcloud.io/fabacademy/2020/recitations/version-control/
MkDocs https://www.mkdocs.org/
Waag node on MkDocs http://make.waaglabs.nl/fablab/docs/gitlab-publishing/Open%20publishing/3.Mkdocs/
Overview project management tools http://academy.cba.mit.edu/classes/project_management/index.html
imagemagick https://imagemagick.org/
Waag node assignments http://make.waaglabs.nl/fablab/fabacademy/Assignments/
Recitation https://fabacademy.org/2020/schedule.html
Than click recitation and land on http://academany.fabcloud.io/fabacademy/2020/recitations/version-control/
Fiore’s slights on installing Git http://archive.fabacademy.org/archives/2018/recitations/version-control.html#15
Git Pipelines https://docs.gitlab.com/ee/ci/pipelines.html
Git simple cheat sheet https://fabacademy.org/2019/docs/FabAcademy-Tutorials/week01_principles_practices_project_management/git_simple.html

What I did

Project management table

I first sketched a project management table on paper. Then looked up how to make tables in Markdown using this cheatsheet. I created the table published above. It looks nice but I soon realized it is rather time intenstive to make. I will therefore use an easier (though sloppier) method henceforth:

Sloppy | table
Does | work
Sloppy table
Does work

I created the table in file week01/tables.md. Then used cp (copy) command to create git-repo/docs/tables.md. Ran mkdocs serve to see it in the browser. Edited file week01/tables.md cp‘d (and thus overwrote) git-repo/docs/tables.md. I did not see any changes in the browser. Learned: saving a file automatically refreshes MkDocs page. Overwriting a file does not.

Next I wanted to integrate the content of the table.md file in my week01.md file using the Nano editor. It took me a long time to figure out how to do that. This is a command I’ll probably use a lot. But still, I think I need to learn to abandon non-critical tasks sooner. See also my MkDocs time sink below.

Here is how to copy between files in Nano:

command function
Copy paste between different files Working in foo & copy from bar
nano -F foo
CTRL-R open new file ~/Doc/Fab/bar.md
CTRL-X closes file2
CTRL-U paste
CTRL-O write out
or vice versa: working in foo copying too bar
nano -F foo
ctrl-6 set mark
Esc-6 copy
CTRL-R open new file ~/Doc/Fab/bar.md
CTL-U paste
CTL-O write out
CTRL-X close file2


Henk has told us documentation is important. He had convincing arguments:
1. we will learn a lot and much will disappear from active memory soon. Documentation serves as our external memory. And 2. documentation is a means to show what you have done.
Therefore I really want to find a good documentation process. In the beginning I was documenting in many different files. Collecting commands in commands.md, notes in note01.md, etc. This is not a good workflow. I am trying to do everything from the command line (again on the advise of Henk). Switching between files makes me lose oversight. So after a few days I decided to document everything in one file: the week##.md file.

Documenting is harder than I thought. Often I found I had worked on something for a long time without documenting. Forgetfullness rendering me unable to properly document in hindsight. DO DOC is my new motto: Do something, Document something. DODOC DODOC DODOC DODOC. (It’s also I good line for a rythem and blues song). Additionally, there was also the Catch 22 of having to document the process of figuring out how to document.

Command line

I run Linux on my laptop so I am familiar with the command line. But I’ve mostly been using the GUI. I’ve decided to try and only use the command line for all FabAcademy related things. When I don’t know a command I look it up and add it to the cheatsheet. I’ll record a cheatsheet in my weekly documentation in a dedicated page on my website. I publish it on the left sidebar of my web page for easy access.

There is one specific command line instance I am documenting here. It involves editing the nano config file and its probably wise to keep a record of that. The issue: The Nano editor does not truncate overly long lines by default. This interferes with reading. Therefore I looked for a setting to change Nano’s behavior to wrapping lines. I found the answer on AskUbuntu. You can set softwrap manually with ALT + SHIFT +4. Or change behavior permanently in Nano’s configuration file nanorc which can be found in /etc/nanorc.

set softwrap

I’ve edited nanorc by uncommenting ‘set softwrap’.

Henk gave the following advise: ‘when you change settings in /etc you change the setting for all users. When you only want to change it for yourself you might want use the user setting file or create one, in this case .nanorc in the root of your home dir.’‘

But there is a warning: softwrapping can get you into trouble when editing configuration files that are sensitive to newlines or indents. Source: stackexchange. Edit: I have encountered this now first hand. A wrapped web link no longer works within Nano. I might decide to revert the config file and softwrap manually with the fast keys.


Static websites versus dynamic websites: A static site relies solely on HTML and CSS, it can be parsed in the local browser. Dynamic websites require both client-side and server-side scripting in languages like JavaScript and PHP. The site can be changed through user interaction by running code on the server and in the browser. Source: wpamelia.com.

MkDocs is a simple program that turns markdown files into HTML. It also has a built in development server allowing you to preview changes locally. Source: mkdocs.org.

I love MkDocs! Hadn’t heard of it before but I love the simplicity. A friend of mine told me data centers would be using half the amount of energy if all Wordpress websites would be static pages instead. I haven’t checked his sources so I can’t speak to the validaty of his numbers. However, I have worked with Wordpress quite a lot and it bothers me how much bloat I’m using for a few simple webpages. For a substantiated (though foul-mouthed) argument in favor of static websites see motherfuckingwebsite.com.

It was easy to get started with MkDocs. But that was also because it was already set up by the FabAcademy. In Monday’s lesson we learned more about how it works. To get started we needed to install pip, the Python package manager, Python and MkDocs. See mkdocs.org. MkDocs runs on Python.

To start a new project:

mkdocs new my-project
cd my-project

This creates the mkdocs.yml file, a folder named docs/ and within that an index.md file.
The .yml file is the single configuration file for MkDocs.
There are only a few things to configure but they are important.

site_name: Tessel Renzenbrink
site_description: My Fabacademy site
site_author: Tessel Renzenbrink
docs_dir: docs
site_dir: _site
copyright: Creative Commons Attribution Non Commercial
  name: material

The docs_dir must have the same name als the directory you put your files in.
The site_dir is where the HTML files go (after MkDocs has rendered the Markdown files into HTML).
theme defines which theme you use. For us Material was installed. I like it and am keeping it.
You can define the colors of your site and our files includes markdown extensions. You probably can add more configurations should you want to.

The docs/index.md is the first page of your site. You can also name it index.html. README.md will also work. If there is both an index.md and README.md, the former will take precedence.
You can start setting up the page with Markdown. The header (#) defines how the page is represented on the website. So you can have about.md with the header #About me and the page will show as ‘about me’. If you set a page as a navigation page with the nav: tag in the .ymal file the name defined in the nav: tag will be the name of the page throughout the website. (See more on the nav tag below.

MkDocs has an in-built development server. Type: start development server:

mkdocs serve

This will return something like:

INFO    -  Building documentation... 
INFO    -  Cleaning site directory 
[I 200203 20:58:05 server:296] Serving on
[I 200203 20:58:05 handlers:62] Start watching changes

Running the IP-address given in the browser will show you your site locally.

Error: I run mkdocs serve and run IP-address in the browser. Most pages are shown accept docs/assignments/week01. The terminal running mkdocs serve throws several error messages:

Uncaught exception GET /assignments/week01/ (
    HTTPServerRequest(protocol='http', host='', method='GET', uri='/assignments/week01/', version='HTTP/1.1', remote_ip='')
    Traceback (most recent call last):
      File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 1699, in _execute
        result = await result
      File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 2649, in get
        await self.flush()
      File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 1090, in flush
        start_line, self._headers, chunk
      File "/usr/local/lib/python3.5/dist-packages/tornado/http1connection.py", line 462, in write_headers
        data += self._format_chunk(chunk)
      File "/usr/local/lib/python3.5/dist-packages/tornado/http1connection.py", line 474, in _format_chunk
        "Tried to write more data than Content-Length"
    tornado.httputil.HTTPOutputError: Tried to write more data than Content-Length

I copy "Tried to write more data than Content-Length" and run it through a search engine together with the query mkdocs. On Github.com I find the suggestion to add a flag to mkdocs serve that uses a simpler server configuration.

mkdocs serve --no-livereload

Now the page is visible. Must stop and start MkDocs server to see changes in the pages. This error is not yet solved to my satisfaction but for now I must continue with my documentation. Edit: uploaded to git and no errors = relieve. Tried mkdocs serve in normal mode and everything works again. Not sure what the problem was.

Initial setup problems with MkDocs

mkdocs serve 


ERROR   -  Config value: 'theme'. Error: Unrecognised theme name: 'material'. The available installed themes are: mkdocs, readthedocs 
Aborted with 1 Configuration Errors!

Found gitlab.com/squidfunk. One of the problems is that if you install mkdocs with one installer apt-get for instance and the material theme with pip it does not work. Therefore uninstalled and re-installed both with pip.

Then I got another error:

ERROR: pymdown-extensions 6.2.1 has requirement Markdown>=3.0.1, but you'll have markdown 2.6.6 which is incompatible.


pip install markdown
pip install --upgrade markdown

That worked.

Material theme

Configuring MkDocs Material theme Github.io List of Material theme icons.

I like the MkDocs-material theme because it is simple, text first and has clear navigation. However, I did want to make some changes. Most importantly change the names and order of the header menu. I knew there had to be a folder with the theme files somewhere and I had expected it in the MkDocs folder. It wasn’t. So I searched and found the folder. Rather by accident. I did

dpkg -L mkdocs-material

Print out:

dpkg-query: package 'mkdocs-material' is not installed.

Which seemed weird since I was using it, but okay:

pip install mkdocs-material

Print out:

Requirement already satisfied: mkdocs-material in /home/txl/.local/lib/python3.5/site-packages (4.6.0)

So there was the path. Found it, albeit in a rather sloppy way. If I want to change the style I have to add a stylesheet. See: squidfunk.github.io

mkdir docs/stylesheets
touch docs/stylesheets/extra.css

And add the following line to mkdocs.yml

  - 'stylesheets/extra.css'

This works: I tested

body {
  color: blue;

Next I wanted to customize the theme. I used the source: squidfunk.github.io.
Create a new folder in docs/ named ‘custom_theme’ &
Edit the mkdocs.yml file

   name: 'material'
   custom_dir: 'custom_dir'

Note: The structure of the custom theme directory must mirror that of the original theme. This is why I wanted to find the original Material folder. They should be copied to custom_dir/ and any changes made will override the files in the original directory. But I did not get this to work. I looked for a way to change the menu and digged through the files. I found partials/nav.html & partials/nav-item.html (nav = navigation). These files did not contain (or I did not recognize) a way to change the menu.

I spent a lot of time on this without result. Edits to mkdocs.yml file broke it. Luckily I’d saved an older version and restored Because I use version control, I’d saved an older version and restored. I abandoned this persuit way too late and spent too much time on it. After I’d let go I found the MkDocs Userguide pages on pages and navigation and configuration which contained a much simppler way to change the menu navigation:

    - Home: 'index.md'
    - About: 'about.md'

But this also did not work. I could not get the ‘weekly assignments’ menu to show all the weeks in the left sidebar. So I had again wasted time on the same non-critical task.

Note that capitalization matters when naming the directories. When I renamed my ‘projects’ directory to ‘Final_project’ the capital ‘F’ moved it to be the first directory after ‘Home’. When I changed the directory to ‘final_project’ it moved to the right side in the menu. It’s organized by alphabet and giving priority to capitalized directories.

I did manage to add an icon to my page by adding an icon to the image folder and add to the .yml file

logo: 'images/signal.png'

It worked on my local site but not on my git site. I went to gitlab.fabcloud.org but everything looked fine: the logo image was in the right folder. I edited my yml file from:

logo: 'images/signal.png'


logo: 'docs/images/signal.png'

The result is that now neither local nor remote worked. Revert. I step away for a moment. Come back and hit F5. It works. Delay! Remember the delay for the server to update. Figured out you can track status of commits on Gitlab. Orange is pending, green is done.

Styling: HTML & Markdown

I want to be able to align images left, right or center. This is done by editing the stylesheet. Source: stackoverflow.

Use Markdown:

![image alt >](/image-right.jpg)
![image alt <](/image-left.jpg)
![image alt ><](/center-image.jpg)

For this to work, add html to stylesheet:

img[alt$=">"] {
  float: right;

img[alt$="<"] {
  float: left;

img[alt$="><"] {
  display: block;
  max-width: 100%;
  height: auto;
  margin: auto;
  float: none!important;

I wanted to be able to add an image caption. It appears this is a hard problem in Markdown, people on the internet explained. You can just revert to HTML. This also allows for other attributes like padding.

<img src="./images/home/image-name.jpg" alt="alternate text" style="padding: 0px 10px; float:right">

Or you can add text to the image directly by using Gimp. This adds an image caption but it does not work in conjunction with align-right.

    <img src='./images/home/waag.jpg' alt='waag' />
    <figcaption>Caption goes here</figcaption>

I wanted to include the attribution to the Gnu licence picture with a caption. In the end I solved it by linking the picture to the source:

<a href="https://commons.wikimedia.org/wiki/File:Waag_Amsterdam_2.jpg">
<img src="./images/home/waag.jpg" alt="FabLab Waag" style="padding: 0px 10px 20px 10px; float:right">


configuring git

Source: Fiore’s slides on installing Git and Thursday’s and Monday’s lessons.

First we installed Git locally.

sudo apt-get install git-all

And configured it by setting up an identity

$ git config --global user.name "John Doe"
$ git config —-global user.email "John@doe.com"

We made a git repo and initialized the empty Git repository in /Users/user/myproject/.git/

$ mkdir myproject
$ git init

adding file to git

Make sure you are in the right directory: the git directory. Not for instance in the gitdir/docs/ directory.

$ git status
$ git add <file>
$ git status
$ git commit -m "addyourcomment"
$ git status
$ git push
$ git status

Always do git status just to, well, check the status.
git add <file> adds a file to the stream that is to be committed. It now shows as ‘modified’. git commit -m "comment". the -m flag means you can immediately enter your comment. Otherwise git will directly into a file to edit it. Git status will now give back that the local branch is ahead of the master (remote). This went wrong for a while because I kept adding the file name: git commit -m <filename> "comment". This also works but not with the -m flag. git push will push to server.

Note: the push may take a little time to go live on the server. Twice I thought something did not work when it turned out to be latency. (Yes twice.)

Undo adding a file to git:

$ git reset HEAD <file>

see what changes you made to the file:

git diff <filename>

Everyday before you start working pull your work from the remote server. I worried that this would overwrite local edits if they are made after the last push. Henk told us Git will warn us. For more on pull see: gittutorial



FacAcademy has set up a remote instance of Gitlab for us here https://gitlab.fabcloud.org/academany/fabacademy/2020/labs/waag/students/. (Log-in is saved in the password manager Keepassx.)
The Gitlab instance pushes our MkDocs websites to the FabAcademy student environment. In my case: https://fabacademy.org/2020/labs/waag/students/tessel-renzenbrink/.
This is done by the .gitlab_ci.yml file. This runs a script that first build the HTML pages from the Markdown pages (mkdocs build). Then it moves those pages to a directory _site public (mv _site public). In other words, the script automatically sends the html pages to a directory from which they are automaticaly uploaded to the public FabAcedemy.org site. Perhaps now I won’t forget about the delay before refresh anymore. It does all that most of the time in under a minute. Excellent.

Size of the website/gitlab repository. It musn’t exceed 100 MB for the entire course. You can check the size on the gitlab page under project overview > details. Currently at 563 KB. If you have big files to share, post them elsewhere and link to them.
Note: Just committing .md files actually add up. After a couple of commits I am now at 737KB. Restrict to pushing at the end of the day.


SSH works with a public and private key. Source: Fiore’s slides p. 20

Generate SSH key

ssh-keygen -t rsa -C "your.email@example.com" -b 4096

Add the public key to your authorized keys. To find your public key:

cd .ssh

This is where my pub & private keys are stored. ~/.ssh/id_rsa.pub is the public key. Use cat command to view.
We added the keys to https://gitlab.fabcloud.org/ by clicking in right hand corner and adding keys.

Clone remote gitlab repository to local computer

git clone git@gitlab....students/tessel-renzenbrink.git


The authenticity of host 'gitlab.fabcloud.org (' can't be established.
ECDSA key fingerprint is SHA256:Rphnjz211wPLjTJcyAip0xozt0hOoFgT9hl5eZfxzd0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.fabcloud.org,' (ECDSA) to the list of known hosts.

Now I have a directory on my computer with the Gitlab repository in it that was prepared by Fiore.

Gitlab pending and cancelled

Uploading on Wednesday: push wasn’t taking place. I pushed another page. Now the previous push was cancelled. Henk explained: if you push and don’t wait till it has taken a new push will cancel the previous push and make a new pipeline process. Also on Wedensday everybody is pushing to Gitlab therefore uploading will take longer than usual.

Git pipeline fail

The Git pipeline failed when I was uploading my picture. Fix: Login to GitLab. Go to Gitlab > CI / CD > pipelines. Click the ‘redo’ arrow at the right of the pipeline. This will recommit the failed pipeline.

Gitlab fail week 10: regex wheel error

In week 10 my git setup stops working. This explains what regex does and why it could thrown an error.
Advised to run sudo apt-get install python3-dev


python3-dev is already the newest version (3.5.1-3).
python3-dev set to manually installed.`

Others students had this problem as well and the solution offered in the issue tracker was:

This wheel dependency needs gcc to install. I have one student with the same issue today, & suggested to add the following line to the .gitlab-ci.yml, at the end of the before_script section. This should install gcc apt-get update && apt-get -y install gcc reference : https://github.com/psf/black/issues/1112

Later another fix came from Julian:

in requirements.txt change:




Then on the 1st line of the file .gitlab-ci.yml change:
image: python:alpine

image: python:3.8-slim

The gcc line is no longer needed:
‘You can also remove the line apt-get update && apt-get -y install gcc as is no longer needed and will also speed up the time to build your project each time.’

‘I presume you are trying to “Force-Push” your repo changes, but you can not because the master branch is “protected” by Gitlab. You need to go to Project overview > repository > Protected Branches and Unprotect the listed master branch. Now you should be able to do a force push from your computer.’

When I test a new push I get the message:

To git@.....org:...git   
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@...org:....git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

When I do git pull it also does not want to do that:

remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 10), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (15/15), done.
From gitlab...org:...
   0909a23..b85d053  master     -> origin/master
error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge.

So I do git pull and got

error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge.

I edited my local file in exactly the same way as the remote file. I removed the changes from my local file so it said: ‘mkdocs-material’ instead of ‘mkdocs-material<5.0’. Now git pull worked. But when I checked my local file it had not changed to the remote file with the ‘<5.0’. This behavior was couterintuitive to me. I applied a dirty fix by makking my local file exactly the same as my remote file. Pushed it and then it was accepted and both repositories were the same.

The Fab Charter

The Fab Charter is a founding document that describes the fundamentals of Fab Labs. What they are, who they are for, how they operate, etc.
It is nice and concise. It sticks to the basics which is always a good thing with a founding document. A simple founding document leaves room to adapt in the future. The true difficulty of writing a good founding document is to cover all the essential basics on the one hand, while leaving it open enough to allow for manoeuvring room as people and situations change. I think this charter strikes the balance well.
I like that in all things the Charter promotes openness to everyone (a community resource) and that sharing is the default.
The responsibilities given to any person interacting with a FabLab are fair. It emphasizes safety, communual responsibility for maintaining and improving the Lab, and that knowledge and resources gained are knowledge and resources shared.
The only beef I have with the Charter is punctuation. I wonder why there no periods at the end of the sentences. ;)

The Fab Charter

What is a fab lab?
Fab labs are a global network of local labs, enabling invention by providing access to tools for digital fabrication

What’s in a fab lab?
Fab labs share an evolving inventory of core capabilities to make (almost) anything, allowing people and projects to be shared

What does the fab lab network provide?
Operational, educational, technical, financial, and logistical assistance beyond what’s available within one lab

Who can use a fab lab?
Fab labs are available as a community resource, offering open access for individuals as well as scheduled access for programs

What are your responsibilities?
safety: not hurting people or machines operations: assisting with cleaning, maintaining, and improving the lab knowledge: contributing to documentation and instruction

Who owns fab lab inventions?
Designs and processes developed in fab labs can be protected and sold however an inventor chooses, but should remain available for individuals to use and learn from

How can businesses use a fab lab?
Commercial activities can be prototyped and incubated in a fab lab, but they must not conflict with other uses, they should grow beyond rather than within the lab, and they are expected to benefit the inventors, labs, and networks that contribute to their success

What went wrong and how I solved it

We had to install Git. My Ubuntu OS threw an error. Found the fix at askubuntu. “The problem exists because runit depends on upstart and Ubuntu changed to using systemd in 15.04. The workaround is as follows:”

sudo apt-get purge runit
sudo apt-get purge git-all
sudo apt-get purge git
sudo apt-get autoremove
sudo apt update
sudo apt install git

This solved the problem.

What I would do different next time

  • The global lecture made it very clear to me you should always start with creating a project management workflow. Yet I made my first pm-chart on Saturday.
    LESSON: Start with project management chart always.

  • I haven’t been documenting very well. I found myself working in multiple documents. Also worked for a time and then tried to recall what I had done. That does not work.
    LESSON: my new slogan DO. DOC.: Do something. Document it.

  • Twice I got stuck on something and spend hours on it. Neither were critical tasks. I must set a time limitation for tasks and abondon them after time limitation expires.
    If your stuck on something switch to another task
    If your stuck on something switch to another task
    If your stuck on something switch to another task
    If your stuck on something switch to another task
    If your stuck on something switch to another task


All urls essential are kept in a dedicated url file which is published in left sidebar of my site.


  • The global lecture on the larger view on digital fabrication was very inspiring. It’s not just tinkering for tinkering’s sake. It’s embedded in a world view that provides a viable alternative to consumerism and resource depletion and is grounded in collaboration rather than competition.
  • The global lecture on project management was eye opening. Triage + time-supply + spiral development. Therefore I spent a lot of time of conceiving of a project management flow template that will structure this for the rest of the course. The outcome is a Project management task table that breaks down weekly assignments into individual tasks.
  • When I came home from the very first day of the FabAcademy their was an electricity black out in my street. The failure of a system makes you aware of it. After a day of being emersed in current en future visions of what technology can be, I temporarily experienced the absence of the base ingredient that literally powers the entire thing. As I sat in the house with no light, no heat, no cooker, I noticed how my mind kept groping for all the familiar things. Music to dispell the silence? No. Internet for some distraction? No. Changing rooms and flicking on the light? No. But when I sat down to work on my final assignment, with pen and paper by candle light, the complete lack of distractions offered a state of deep concentration that I haven’t experienced in a long time. It was such a pleasant state that I am considering to implement an electricity diet.

Local & regional & global review

Mistakes. Remark Henk: I will look especially at mistakes you made and fixed. Document them properly. Because mistakes are something you learn a lot from.

Notes of the lectures

Global lecture part 1 - On digital fabrication

Future goals for the FabLab network:
- reduce the input building blocks that are needed for personal fabrication.

Digital fabrication: Professor Neil Gershenfield (Neil from here on) was figuring out how to do digital fabrication. Students gave him te reason why to do it: personal fabrication. People were making things that only they would make.

A thriving FabLab has multiple functions and connections thus making use of network effects:
- open access
- paid access
- collaboration with businesses
- collaboration with educators
- interact with the city and contribute to its hyperlocal needs
- education for makers and for kids

Barcelona became a superFabLab: it responded to city’s needs (high youth unemployment). Built up a network of FabLabs in each district: teaching people skills & creating hyperlocal products. Barcelona pledged to be a no-input city in 40 years: entirely self-sustainable in terms of input/output. A circulair economy instead of the current dominant model of resources in > trash out.
This reflects a larger vision on a alternative economy in which people don’t work to consume [labor/debt/consumption] but rather 1/3 contribute to society; 1/3 make your own stuff; 1/3 persue their interests/hobby’s/…/.

NOTE: Aquaponics project built on each week’s assignment to construct a final assignment. Good idea!

Global lecture part 2 - On project management

Triage: you will not be able to do all the tasks you have in mind, therefore decide what you need to do to finish your assignment.
Spiral deveopment: hierarchy & modularity. Start with small attainable goal and gradually widening the scope. Keep looping back to: design > production > working prototype. So don’t plan to build an entire robot. Plan to a cardboard model, wood model, wood model with blinking LEDs, etc.
Document all the time. Keep documenting as you work.
Time demand versus time supply Time demand: this is how much time the project needs and I will fool myself that I’ll be able to make this time available. Time supply: this is how much time I have. I will break my project up into smaller tasks, assign a part of the available time to it & stick to that assigned time.
Develop in parallel not linearly: Work on different parts of the project at once, when one part stalls it will not hold up the rest.
PLan your project: What is the project; what is the goal; spiral development steps; assess available time; assess different parts of the project; assign time to parts, start working in parallel.

keep your repository small

Local lecture

  • video: How to survive FabAcademy #2: on Wednesday you deliver!
  • importance of using the command line
  • how to use Git
  • how to make static website
  • imagemagick


Introduction by Henk

Wednesdag @ 15.00: Lecture by Neil. Aprox 1.5 hour. About what you gonna do that week.
Thursday: @ 10.00: Henk > further explanations. Software, machines, programming. Start with group assignment. Mostly to learn the machines and software.
Friday/Monday/Tuesday: Work on your own assignment. Should be ready on Wednesday 12.00.

Wednesday @12.00. local review.
Wednesday @ 13.00 regional review with partner lab AgriLab.
Wednesday @ 15.00 global review: Neil randomly picks out a student. Explain what you did, how you did it. Specifications per week what you have to deliver.
Deliver assignment & documentation.
Documentation includes: What you learned from
– Neil’s lesson
– Local instruction
– Manual on machines/software etc.
– Document how you made your weekly assignment in detail.
– How you debugged your project. Lots will go wrong. How did you solve it
– How the week was and what you would do differently with the knowledge that you have.
– Write down what you want to do & how it fits in with the final project.

Command line interface

I documented CLI commands both in my weekly documentation and in a dedicated CLI file that is a top page on my website. I will abandon this practice hence forth. Documenting in two seperate places is cumbersome and version control is bound to go on. All CLI commands will be documented in https://fabacademy.org/2020/labs/waag/students/tessel-renzenbrink/command-line/

Command function
dpkg -L “packagename” where is package installed
ls -la list + hidden files
mv change directory mv foo dir1
import “file-name” imports + names screenshot in the folder you are currently located in.
pwd Print Working Directory. (Where you are). Trick: copy output of pwd and paste in browser.
cp copy cp foo.txt bar.txt
cp foo.txt Foo/Bar/ (copy file to directory. Slash not before but after)
cp foo.txt bar.txt foo/ (copy 2 files to directory foo)
cp *.txt foo/ (copy all txt files to dir foo)
cp -R directory/ foo (copy directory to foo)
rm remove file
rm -R remove dir + contents
cd change directory
cd enter back to primary folder
cd .. up one folder
clear empty terminal
~ represents /home/user/


command function
ALT + M Enable mouse support (mostly to move the cursor. Enabling disables scroll function
ALT+SHIFT+4 softwrap text in nano
ctrl-6 set mark move arrows to select text
alt-shift-6 copy
ctrl-u paste
ctrl-k cut
ctrl-u paste
Copy paste between different files Working in foo & copy from bar
nano -F foo
CTRL-R open new file ~/Doc/Fab/bar.md
CTRL-X closes file2
CTRL-U paste
CTRL-O write out
or vice versa: working in foo copying too bar
nano -F foo
ctrl-6 set mark
Esc-6 copy
CTRL-R open new file ~/Doc/Fab/bar.md
CTL-U paste
CTL-O write out
CTRL-X close file2


command function
mkdocs serve returns IP-address to run site locally
mkdocs serve –no-livereload When error loading page this might help


command function
two spaces line break
two enters new paragraph (empty line)
code inline code gets backspaces
```console / "code / ``` renders code in separate block (/ is line break)
```"programlanguage" / "code" / ``` renders the code in that language (html, python, etc)
<del>text</del> strike through
link word
link without word wrap in angle brackets
`< angle brackets are invisible by default. Wrap in back ticks
**x** bold
: indent
> citation stripe
:> indent + citation stripe


$ git status
$ git add <file>
$ git status
$ git commit -m "addyourcomment"
$ git status
$ git push
$ git status
command function
git diff see what changes you made to the file.
git diff –cached see what changes you are about to commit (after git add)
git commit -a This skips the add step. All modified files will be added
git log view project history. NOTE: CTRl-C does not work to get you out of the log. Hitting Q does.
git log -p shows complete diffs as well
gitk open GUI


command function
list formats:
convert -list format
convert input.jpg output.png convert JPG to PNG
mogrify -format png *.jpg convert all JPGs to PNGs:
convert -density 1000 -units PixelsPerInch input.svg output.png convert SVG to PNG at 1000 DPI
convert input.jpg -quality 50% -resize 1000 output.jpg compress JPG to quality 50% width 1000
mogrify -quality 50% -resize 1000 *.jpg compress all JPGs to quality 50% width 1000: