1. Project management¶
Amsterdam, January 29, 2020
Assignment¶
- 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. |
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-6 | |
ESC-6 | |
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 |
Documentation¶
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.
MkDocs¶
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
theme:
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 http://127.0.0.1:8000
[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/ (127.0.0.1)
HTTPServerRequest(protocol='http', host='127.0.0.1:8000', method='GET', uri='/assignments/week01/', version='HTTP/1.1', remote_ip='127.0.0.1')
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
printed
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.
Did
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
extra_css:
- '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
theme:
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:
nav:
- 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'
to
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.
<figure>
<img src='./images/home/waag.jpg' alt='waag' />
<figcaption>Caption goes here</figcaption>
</figure>
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">
</a>
Git¶
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
pull
GitLab¶
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¶
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
Prints:
The authenticity of host 'gitlab.fabcloud.org (13.59.248.79)' 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,13.59.248.79' (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
output:
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:
Jean-Baptise:
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:
mkdocs
mkdocs-material
to:
mkdocs
mkdocs-material<5.0
Then on the 1st line of the file .gitlab-ci.yml change:
image: python:alpine
to:
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:
requirements.txt
Please, commit your changes or stash them before you can merge.
Aborting
So I do git pull and got
error: Your local changes to the following files would be overwritten by merge:
requirements.txt
Please, commit your changes or stash them before you can merge.
Aborting
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 fabricationWhat’s in a fab lab?
Fab labs share an evolving inventory of core capabilities to make (almost) anything, allowing people and projects to be sharedWhat does the fab lab network provide?
Operational, educational, technical, financial, and logistical assistance beyond what’s available within one labWho can use a fab lab?
Fab labs are available as a community resource, offering open access for individuals as well as scheduled access for programsWhat are your responsibilities?
safety: not hurting people or machines operations: assisting with cleaning, maintaining, and improving the lab knowledge: contributing to documentation and instructionWho 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 fromHow 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
Urls¶
All urls essential are kept in a dedicated url file which is published in left sidebar of my site.
Reflections¶
- 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
Final project must be: FUNCTIONAL MEANINGFUL BEAUTIFUL
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/ |
nano
command | function |
---|---|
ALT + M | Enable mouse support (mostly to move the cursor. Enabling disables scroll function |
ALT+SHIFT+4 | softwrap text in nano |
copy/paste | |
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-6 | |
ESC-6 | |
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 |
MkDocs
command | function |
---|---|
mkdocs serve | returns IP-address to run site locally |
mkdocs serve –no-livereload | When error loading page this might help |
Markdown
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
$ 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 |
ImageMagick
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: |