<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.opensourceecology.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pieter</id>
	<title>Open Source Ecology - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opensourceecology.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pieter"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/wiki/Special:Contributions/Pieter"/>
	<updated>2026-05-04T15:23:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226941</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226941"/>
		<updated>2020-07-05T10:58:50Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 5 July 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|see &lt;br /&gt;
[https://ose-workbench-platform.readthedocs.io/en/latest/ ose-workbench-platform] and [https://ose-3d-printer-workbench.readthedocs.io/en/latest/index.html# ose-3d-printer-workbench] for related work on ose documentation generation, git, and versioning}}&lt;br /&gt;
&lt;br /&gt;
= Saturday 5 July 2020 =&lt;br /&gt;
&lt;br /&gt;
Final edit of a couple of video&#039;s for the KiCAD/Arduino tutorial.&lt;br /&gt;
&lt;br /&gt;
= Saturday 4 July 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording various clips for the KiCAD/Arduino tutorial for the minimal Arduino with an LED.&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD.  Trying to figure out how to create my own tool with Python scripting.  Recording macro&#039;s is easy, but to actually create a tool is more difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tuesday 30 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Creating a pop filter with an embroidery hoop for my microphone.  The P&#039;s are now acceptable.&lt;br /&gt;
&lt;br /&gt;
= Sunday 28 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Adding clips, recording voice for the Arduino/KiCAD tutorial with a new microphone.  The microphone is good, but the P&#039;s are horrible.  On pronunciation of a P, the recording clips every time.  I need to have a pop filter.&lt;br /&gt;
&lt;br /&gt;
= Saturday 27 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD/Arduino video tutorial.  First making the notes for the minimal Arduino powered by an LED.&lt;br /&gt;
&lt;br /&gt;
= Tuesday 23 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Moritz, and Robin.  We discussed several benefits and drawbacks of the Nextcloud, Gollum wiki, and the current OSE wiki.  The current OSE wiki supports authentication and authorization.  Authentication means that you can identify yourself, for example with a password.  Authorization is slightly different; after having been authenticated, authorization defines a policy on who can do what.  Traditional wiki&#039;s elevate the level of authorization automatically based on contributions.  For example, a new user is not allowed to rename a page.  However, after several contributions a new user is automatically authorized to do so.&lt;br /&gt;
&lt;br /&gt;
Gollum supports anonymous contributions but appears to not have sophisticated ways to do authentication/authorization.  In addition, to make a distributed infrastructure, it should be possible to fill the content of the Gollum wiki based on multiple git repositories.  This may be possible with git submodules, but git modules are supposed to nest git repositories and remain fixed on a specific commit of a different repository.  This is a bit different from what Gollum should support because you would want to host a specific branch and follow that branch.  Perhaps this is possible by creating an automatic pull script.&lt;br /&gt;
&lt;br /&gt;
With all this in mind, I concluded that I like my original idea: &lt;br /&gt;
* Move development of machines to git, for example github&lt;br /&gt;
* For each machine, have a dedicated git repository with&lt;br /&gt;
** licencse&lt;br /&gt;
** readme&lt;br /&gt;
** Makefile&lt;br /&gt;
** submodules for dependencies (for example the universal axis is a submodule of the 3d printer)&lt;br /&gt;
* The makefile generates documentation:&lt;br /&gt;
** A build manual&lt;br /&gt;
** A wiki page&lt;br /&gt;
** Images for the FreeCAD files&lt;br /&gt;
&lt;br /&gt;
I&#039;m going to experiment with this for a next meeting.&lt;br /&gt;
&lt;br /&gt;
In the meantime user [[User:Groques|Groques]] has hinted to me that he is also working on versioning from a bit different perspective.  We definitely have to talk about this.&lt;br /&gt;
&lt;br /&gt;
After the meeting I have been experimenting with [https://pandoc.org/ Pandoc] from [https://orgmode.org/ Orgmode].  Orgmode is a file format supported by a &#039;mode&#039; for [https://www.gnu.org/software/emacs/ Emacs], a widely used editor.  It allows you to write TODO&#039;s, notes, presentations, academic papers in just normal text, similar to [https://www.markdownguide.org/ Markdown], but a bit more powerful, especially with the support from the editor.  For example, Org files allow you to create tables and spreadsheets with column and row formula&#039;s, automatically computing values.  It supports code blocks in many languages and these code blocks can be executed from the document and the code blocks can even interact with each other, even between different languages.  &lt;br /&gt;
&lt;br /&gt;
I documented the Nextcloud installation file in Org mode and with Pandoc I transformed it to the wiki format.  Unfortunately, this wiki does not support code highlighting, for some reason, so I had to adjust the output slightly.&lt;br /&gt;
&lt;br /&gt;
The result of the Org mode to wiki format translation is here: [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 21 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Saturday 20 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 10 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Holger and Benedikt.  Benedikt also invited Robin from OSE Germany and Moritz.  We discussed alternative digital infrastructure setups including the Nextcloud instance that I created, creating a wiki powered by git, in the form of [https://github.com/gollum/gollum/wiki Gollum].  I would give the members of the meeting Nextcloud accounts and Moritz would set up a Gollum instance.&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described in [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226940</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226940"/>
		<updated>2020-07-05T10:56:06Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Tuesday 30 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|see &lt;br /&gt;
[https://ose-workbench-platform.readthedocs.io/en/latest/ ose-workbench-platform] and [https://ose-3d-printer-workbench.readthedocs.io/en/latest/index.html# ose-3d-printer-workbench] for related work on ose documentation generation, git, and versioning}}&lt;br /&gt;
&lt;br /&gt;
= Tuesday 30 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Creating a pop filter with an embroidery hoop for my microphone.  The P&#039;s are now acceptable.&lt;br /&gt;
&lt;br /&gt;
= Sunday 28 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Adding clips, recording voice for the Arduino/KiCAD tutorial with a new microphone.  The microphone is good, but the P&#039;s are horrible.  On pronunciation of a P, the recording clips every time.  I need to have a pop filter.&lt;br /&gt;
&lt;br /&gt;
= Saturday 27 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD/Arduino video tutorial.  First making the notes for the minimal Arduino powered by an LED.&lt;br /&gt;
&lt;br /&gt;
= Tuesday 23 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Moritz, and Robin.  We discussed several benefits and drawbacks of the Nextcloud, Gollum wiki, and the current OSE wiki.  The current OSE wiki supports authentication and authorization.  Authentication means that you can identify yourself, for example with a password.  Authorization is slightly different; after having been authenticated, authorization defines a policy on who can do what.  Traditional wiki&#039;s elevate the level of authorization automatically based on contributions.  For example, a new user is not allowed to rename a page.  However, after several contributions a new user is automatically authorized to do so.&lt;br /&gt;
&lt;br /&gt;
Gollum supports anonymous contributions but appears to not have sophisticated ways to do authentication/authorization.  In addition, to make a distributed infrastructure, it should be possible to fill the content of the Gollum wiki based on multiple git repositories.  This may be possible with git submodules, but git modules are supposed to nest git repositories and remain fixed on a specific commit of a different repository.  This is a bit different from what Gollum should support because you would want to host a specific branch and follow that branch.  Perhaps this is possible by creating an automatic pull script.&lt;br /&gt;
&lt;br /&gt;
With all this in mind, I concluded that I like my original idea: &lt;br /&gt;
* Move development of machines to git, for example github&lt;br /&gt;
* For each machine, have a dedicated git repository with&lt;br /&gt;
** licencse&lt;br /&gt;
** readme&lt;br /&gt;
** Makefile&lt;br /&gt;
** submodules for dependencies (for example the universal axis is a submodule of the 3d printer)&lt;br /&gt;
* The makefile generates documentation:&lt;br /&gt;
** A build manual&lt;br /&gt;
** A wiki page&lt;br /&gt;
** Images for the FreeCAD files&lt;br /&gt;
&lt;br /&gt;
I&#039;m going to experiment with this for a next meeting.&lt;br /&gt;
&lt;br /&gt;
In the meantime user [[User:Groques|Groques]] has hinted to me that he is also working on versioning from a bit different perspective.  We definitely have to talk about this.&lt;br /&gt;
&lt;br /&gt;
After the meeting I have been experimenting with [https://pandoc.org/ Pandoc] from [https://orgmode.org/ Orgmode].  Orgmode is a file format supported by a &#039;mode&#039; for [https://www.gnu.org/software/emacs/ Emacs], a widely used editor.  It allows you to write TODO&#039;s, notes, presentations, academic papers in just normal text, similar to [https://www.markdownguide.org/ Markdown], but a bit more powerful, especially with the support from the editor.  For example, Org files allow you to create tables and spreadsheets with column and row formula&#039;s, automatically computing values.  It supports code blocks in many languages and these code blocks can be executed from the document and the code blocks can even interact with each other, even between different languages.  &lt;br /&gt;
&lt;br /&gt;
I documented the Nextcloud installation file in Org mode and with Pandoc I transformed it to the wiki format.  Unfortunately, this wiki does not support code highlighting, for some reason, so I had to adjust the output slightly.&lt;br /&gt;
&lt;br /&gt;
The result of the Org mode to wiki format translation is here: [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 21 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Saturday 20 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 10 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Holger and Benedikt.  Benedikt also invited Robin from OSE Germany and Moritz.  We discussed alternative digital infrastructure setups including the Nextcloud instance that I created, creating a wiki powered by git, in the form of [https://github.com/gollum/gollum/wiki Gollum].  I would give the members of the meeting Nextcloud accounts and Moritz would set up a Gollum instance.&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described in [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226939</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226939"/>
		<updated>2020-07-05T10:46:27Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Tuesday 23 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|see &lt;br /&gt;
[https://ose-workbench-platform.readthedocs.io/en/latest/ ose-workbench-platform] and [https://ose-3d-printer-workbench.readthedocs.io/en/latest/index.html# ose-3d-printer-workbench] for related work on ose documentation generation, git, and versioning}}&lt;br /&gt;
&lt;br /&gt;
= Tuesday 23 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Moritz, and Robin.  We discussed several benefits and drawbacks of the Nextcloud, Gollum wiki, and the current OSE wiki.  The current OSE wiki supports authentication and authorization.  Authentication means that you can identify yourself, for example with a password.  Authorization is slightly different; after having been authenticated, authorization defines a policy on who can do what.  Traditional wiki&#039;s elevate the level of authorization automatically based on contributions.  For example, a new user is not allowed to rename a page.  However, after several contributions a new user is automatically authorized to do so.&lt;br /&gt;
&lt;br /&gt;
Gollum supports anonymous contributions but appears to not have sophisticated ways to do authentication/authorization.  In addition, to make a distributed infrastructure, it should be possible to fill the content of the Gollum wiki based on multiple git repositories.  This may be possible with git submodules, but git modules are supposed to nest git repositories and remain fixed on a specific commit of a different repository.  This is a bit different from what Gollum should support because you would want to host a specific branch and follow that branch.  Perhaps this is possible by creating an automatic pull script.&lt;br /&gt;
&lt;br /&gt;
With all this in mind, I concluded that I like my original idea: &lt;br /&gt;
* Move development of machines to git, for example github&lt;br /&gt;
* For each machine, have a dedicated git repository with&lt;br /&gt;
** licencse&lt;br /&gt;
** readme&lt;br /&gt;
** Makefile&lt;br /&gt;
** submodules for dependencies (for example the universal axis is a submodule of the 3d printer)&lt;br /&gt;
* The makefile generates documentation:&lt;br /&gt;
** A build manual&lt;br /&gt;
** A wiki page&lt;br /&gt;
** Images for the FreeCAD files&lt;br /&gt;
&lt;br /&gt;
I&#039;m going to experiment with this for a next meeting.&lt;br /&gt;
&lt;br /&gt;
In the meantime user [[User:Groques|Groques]] has hinted to me that he is also working on versioning from a bit different perspective.  We definitely have to talk about this.&lt;br /&gt;
&lt;br /&gt;
After the meeting I have been experimenting with [https://pandoc.org/ Pandoc] from [https://orgmode.org/ Orgmode].  Orgmode is a file format supported by a &#039;mode&#039; for [https://www.gnu.org/software/emacs/ Emacs], a widely used editor.  It allows you to write TODO&#039;s, notes, presentations, academic papers in just normal text, similar to [https://www.markdownguide.org/ Markdown], but a bit more powerful, especially with the support from the editor.  For example, Org files allow you to create tables and spreadsheets with column and row formula&#039;s, automatically computing values.  It supports code blocks in many languages and these code blocks can be executed from the document and the code blocks can even interact with each other, even between different languages.  &lt;br /&gt;
&lt;br /&gt;
I documented the Nextcloud installation file in Org mode and with Pandoc I transformed it to the wiki format.  Unfortunately, this wiki does not support code highlighting, for some reason, so I had to adjust the output slightly.&lt;br /&gt;
&lt;br /&gt;
The result of the Org mode to wiki format translation is here: [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 21 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Saturday 20 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 10 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Holger and Benedikt.  Benedikt also invited Robin from OSE Germany and Moritz.  We discussed alternative digital infrastructure setups including the Nextcloud instance that I created, creating a wiki powered by git, in the form of [https://github.com/gollum/gollum/wiki Gollum].  I would give the members of the meeting Nextcloud accounts and Moritz would set up a Gollum instance.&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described in [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226938</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226938"/>
		<updated>2020-07-05T10:09:18Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 21 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|see &lt;br /&gt;
[https://ose-workbench-platform.readthedocs.io/en/latest/ ose-workbench-platform] and [https://ose-3d-printer-workbench.readthedocs.io/en/latest/index.html# ose-3d-printer-workbench] for related work on ose documentation generation, git, and versioning}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 21 June 2020 = &lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Saturday 20 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Add several clips for the KiCAD/Arduino video series.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 10 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Holger and Benedikt.  Benedikt also invited Robin from OSE Germany and Moritz.  We discussed alternative digital infrastructure setups including the Nextcloud instance that I created, creating a wiki powered by git, in the form of [https://github.com/gollum/gollum/wiki Gollum].  I would give the members of the meeting Nextcloud accounts and Moritz would set up a Gollum instance.&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described in [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226937</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226937"/>
		<updated>2020-07-05T10:06:34Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 7 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|see &lt;br /&gt;
[https://ose-workbench-platform.readthedocs.io/en/latest/ ose-workbench-platform] and [https://ose-3d-printer-workbench.readthedocs.io/en/latest/index.html# ose-3d-printer-workbench] for related work on ose documentation generation, git, and versioning}}&lt;br /&gt;
&lt;br /&gt;
= Wednesday 10 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Holger and Benedikt.  Benedikt also invited Robin from OSE Germany and Moritz.  We discussed alternative digital infrastructure setups including the Nextcloud instance that I created, creating a wiki powered by git, in the form of [https://github.com/gollum/gollum/wiki Gollum].  I would give the members of the meeting Nextcloud accounts and Moritz would set up a Gollum instance.&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described in [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226151</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226151"/>
		<updated>2020-06-23T20:23:50Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 7 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described in [[Install Nextcloud on Arch Linux]].&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226150</id>
		<title>Install Nextcloud on Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226150"/>
		<updated>2020-06-23T20:23:21Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
This document describes how to set up Nextcloud on a virtual private server (VPS) hosted by a cloud service provider that provides images for Arch Linux. We assume there is a DNS record in place that points the address &amp;lt;code&amp;gt;cloud.mydomain.net&amp;lt;/code&amp;gt; to the IP address provided by the cloud service provider.  Note that this is not a hardened installation, it is merely used for experimentation.  More configuration is required to harden the installation.&lt;br /&gt;
&lt;br /&gt;
= Basic setup Arch Linux =&lt;br /&gt;
&lt;br /&gt;
== Initial setup ==&lt;br /&gt;
&lt;br /&gt;
Since the system comes preinstalled with Arch Linux on it, the first thing to do is to update the system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -Syu&lt;br /&gt;
&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
pacman -S base base-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Add an administration user ==&lt;br /&gt;
&lt;br /&gt;
We add a day-to-day administrator account:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;useradd -m -g users -s /bin/bash admin&lt;br /&gt;
passwd admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure that &amp;lt;code&amp;gt;pacman&amp;lt;/code&amp;gt; can be executed as user &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;visudo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;admin ALL=(ALL) NOPASSWD: /usr/bin/pacman&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Create a swap partition ==&lt;br /&gt;
&lt;br /&gt;
The swap partition has already been activated, so there is nothing to do.&lt;br /&gt;
&lt;br /&gt;
== Configure the language and locales ==&lt;br /&gt;
&lt;br /&gt;
In file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;en_US.UTF-8 UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then execute:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;locale-gen&lt;br /&gt;
&lt;br /&gt;
echo LANG=en_US.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
export LANG=en_US.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the correct time zone, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;commonlisp&amp;quot;&amp;gt;ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Time configuration ==&lt;br /&gt;
&lt;br /&gt;
Since Arch sits in a virtual machine, we assume that the time is always correct.&lt;br /&gt;
&lt;br /&gt;
== Random number generation ==&lt;br /&gt;
&lt;br /&gt;
Random number generation is important for security, so we install the following tools:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S rng-tools&lt;br /&gt;
&lt;br /&gt;
systemctl start rngd&lt;br /&gt;
systemctl enable rngd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To check the level of entropy we can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;cat /proc/sys/kernel/random/entropy_available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Since it runs on a virtual machine, we are not really sure how representative the entropy is.&lt;br /&gt;
&lt;br /&gt;
We can also run the following tests which should have very few failures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;cat /dev/random | rngtest -c 1000&lt;br /&gt;
cat /dev/urandom | rngtest -c 1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;rng-tools&amp;lt;/code&amp;gt; service is preferred over &amp;lt;code&amp;gt;haveged&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting the hostname ==&lt;br /&gt;
&lt;br /&gt;
Assuming we have a hostname &amp;lt;code&amp;gt;mydomainname.net&amp;lt;/code&amp;gt; that points to our server&#039;s IP address:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hostname&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;127.0.1.1 cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After a reboot, we can check whether everything is set with the command &amp;lt;code&amp;gt;hostname -f&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting up the network ==&lt;br /&gt;
&lt;br /&gt;
The network has been set up fine by the cloud provider.&lt;br /&gt;
&lt;br /&gt;
== Setting up the firewall ==&lt;br /&gt;
&lt;br /&gt;
We use &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt; to set up the firewall. A chain is a set of rules. The chain INPUT is predefined for packets that enter the system.&lt;br /&gt;
&lt;br /&gt;
First we set the policy for chain INPUT to target ACCEPT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT ACCEPT&lt;br /&gt;
ip6tables -P INPUT ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then flush all the chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -F&lt;br /&gt;
ip6tables -F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A table in this context is a packet matching table. There are five predefined tables. The default table &#039;&#039;filter&#039;&#039;, the tables &#039;&#039;nat&#039;&#039;, &#039;&#039;mangle&#039;&#039;, &#039;&#039;raw&#039;&#039;, and &#039;&#039;security&#039;&#039;. We flush the table &#039;&#039;nat&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -t nat -F&lt;br /&gt;
ip6tables -t nat -F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then delete all the user-defined chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -X&lt;br /&gt;
ip6tables -X&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then set the policy to drop every packet that enters the system (make sure you are logged in via a video display and not SSH):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT DROP&lt;br /&gt;
ip6tables -P INPUT DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We append to chain INPUT on the loopback interface &amp;lt;code&amp;gt;lo&amp;lt;/code&amp;gt; to jump to target ACCEPT. This is important for applications that use local servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then append to chain INPUT on interface &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt; a rule to accept connections with states ESTABLISHED and RELATED:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then make sure that incomming TCP connections are SYN packets to prevent SYN flooding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also drop packets with incoming fragments. This is only for IPv4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -f -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also drop bogons:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also reject malformed NULL packets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can then store the firewall rules with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make the changes permanent, we can enable and start the Systemd service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start iptables.service&lt;br /&gt;
systemctl enable iptables.service&lt;br /&gt;
systemctl status iptables.service&lt;br /&gt;
&lt;br /&gt;
systemctl start ip6tables.service&lt;br /&gt;
systemctl enable ip6tables.service&lt;br /&gt;
systemctl status ip6tables.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
The service fail2ban is a service for detecting login attempts and blocking it.&lt;br /&gt;
&lt;br /&gt;
We install it with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S fail2ban&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Using &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; we can sandbox the fail2ban service with capabilities. To do so, we create a new file &amp;lt;code&amp;gt;/etc/systemd/system/fail2ban.service.d/capabilities.conf&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
PrivateDevices=yes&lt;br /&gt;
PrivateTmp=yes&lt;br /&gt;
ProtectHome=read-only&lt;br /&gt;
ProtectSystem=strict&lt;br /&gt;
NoNewPrivileges=yes&lt;br /&gt;
ReadWritePaths=-/var/run/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/lib/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/log/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/spool/postfix/maildrop&lt;br /&gt;
ReadWritePaths=-/run/xtables.lock&lt;br /&gt;
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create configuration file &amp;lt;code&amp;gt;/etc/fail2ban/fail2ban.local&amp;lt;/code&amp;gt; with the correct logtarget path:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Definition]&lt;br /&gt;
logtarget = /var/log/fail2ban/fail2ban.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the &amp;lt;code&amp;gt;/var/log/fail2ban/&amp;lt;/code&amp;gt; directory as root.&lt;br /&gt;
&lt;br /&gt;
We have to set up paths for Arch Linux in a &amp;lt;code&amp;gt;jail.local&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[INCLUDES]&lt;br /&gt;
before = paths-arch.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Yay ==&lt;br /&gt;
&lt;br /&gt;
With yay, we can keep also the AUR packages up to date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://aur.archlinux.org/yay.git&lt;br /&gt;
tar xvzf yay.tar.gz&lt;br /&gt;
cd yay&lt;br /&gt;
makepkg -s&lt;br /&gt;
pacman -U yay*.pkg.tar.xz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
= SSH access =&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The first service we would like to set up is SSH. We first configure the SSH daemon itself in file &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;PermitRootLogin no&lt;br /&gt;
TCPKeepAlive no&lt;br /&gt;
ClientAliveInterval 60&lt;br /&gt;
Ciphers aes256-ctr,aes192-ctr,aes128-ctr&lt;br /&gt;
MACs hmac-sha2-512,hmac-sha2-256&lt;br /&gt;
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then restart the daemon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart sshd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== The firewall ==&lt;br /&gt;
&lt;br /&gt;
We have to open port 22 for SSH in our firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
We add the following jails in &amp;lt;code&amp;gt;/etc/fail2ban/jail.d/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installing Nextcloud =&lt;br /&gt;
&lt;br /&gt;
The version to install is 19.0.0. We are going to install it on top of &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MariaDB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
&lt;br /&gt;
As a first step, we are going to install MariaDB with package &amp;lt;code&amp;gt;mariadb&amp;lt;/code&amp;gt;. Before we start the service, we run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
systemctl start mariadb&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then add the database (substitute the password with a proper one):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;sql&amp;quot;&amp;gt;CREATE DATABASE nextcloud DEFAULT CHARACTER SET &#039;utf8mb4&#039; COLLATE &#039;utf8mb4_general_ci&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON nextcloud.* TO &#039;nextcloud&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;password&#039;;&lt;br /&gt;
FLUSH PRIVILEGES;&amp;lt;/pre&amp;gt;&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
Install PHP with package &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;. We need to do additional configuration, in &amp;lt;code&amp;gt;/etc/php/php.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;date.timezone = Europe/Amsterdam&lt;br /&gt;
memory_limit = 512M&amp;lt;/pre&amp;gt;&lt;br /&gt;
For PHP we need to install the following modules:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! module&lt;br /&gt;
! package&lt;br /&gt;
! comments&lt;br /&gt;
|-&lt;br /&gt;
| ctype&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| curl&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| dom&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| GD&lt;br /&gt;
| php-gd&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| iconv&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| json&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| libxml&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mbstring&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| openssl&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| posix&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| session&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SimpleXML&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| xmlreader&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| xmlwriter&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zip&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zlib&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pdo&amp;lt;sub&amp;gt;mysql&amp;lt;/sub&amp;gt;&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| mysqli&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| fileinfo&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bz2&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| intl&lt;br /&gt;
| php-intl&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| bcmath&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| gmp&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| imagick&lt;br /&gt;
| php-imagick&lt;br /&gt;
| enable in conf.d/imagick.ini&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For further support for &amp;lt;code&amp;gt;imagick&amp;lt;/code&amp;gt;, it is wise to install the following packages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S ghostscript librsvg libwmf ocl-icd openexr openjpeg2 pango&amp;lt;/pre&amp;gt;&lt;br /&gt;
We enable OPCache in &amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;zend_extension=opcache&amp;lt;/pre&amp;gt;&lt;br /&gt;
And we set the following options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;opcache.enable=1&lt;br /&gt;
opcache.interned_strings_buffer=8&lt;br /&gt;
opcache.max_accelerated_files=10000&lt;br /&gt;
opcache.memory_consumption=128&lt;br /&gt;
opcache.save_comments=1&lt;br /&gt;
opcache.revalidate_freq=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
We enable APCu by installing &amp;lt;code&amp;gt;php-apcu&amp;lt;/code&amp;gt; and enabling it in &amp;lt;code&amp;gt;/etc/php/conf.d/apcu.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;extension=apcu.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Nginx ==&lt;br /&gt;
&lt;br /&gt;
We install &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt; and set it up to obtain certificates by enabling the service, and open port 80:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
systemctl enable nginx&lt;br /&gt;
systemctl start nginx&amp;lt;/pre&amp;gt;&lt;br /&gt;
We get a message that the &amp;lt;code&amp;gt;max_types_hash_size&amp;lt;/code&amp;gt; is not enough. In &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; add in the &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; block:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;types_hash_max_size 4096;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We are now ready to install certificates.&lt;br /&gt;
&lt;br /&gt;
=== Let&#039;s Encrypt certificates ===&lt;br /&gt;
&lt;br /&gt;
Install the following packages to acquire certificates: &amp;lt;code&amp;gt;certbot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;certbot-nginx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;certbot --nginx&amp;lt;/pre&amp;gt;&lt;br /&gt;
We fill in:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| email address&lt;br /&gt;
| &amp;amp;lt;your email address&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| terms&lt;br /&gt;
| agree&lt;br /&gt;
|-&lt;br /&gt;
| share info&lt;br /&gt;
| no&lt;br /&gt;
|-&lt;br /&gt;
| domain&lt;br /&gt;
| cloud.mydomain.net&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It aquires the certificates but cannot find the server block for this domain.&lt;br /&gt;
&lt;br /&gt;
=== PHP CGI ===&lt;br /&gt;
&lt;br /&gt;
Install package &amp;lt;code&amp;gt;php-fpm&amp;lt;/code&amp;gt; and in the configuration file &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt; uncomment &amp;lt;code&amp;gt;env[PATH]&amp;lt;/code&amp;gt;. Also set up &amp;lt;code&amp;gt;env[TMP]&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt; and make sure the directory is writable for the Nginx user.&lt;br /&gt;
&lt;br /&gt;
We also set the following values in &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt;, taken from the documentation and all values divided by 2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pm.max_children = 60;&lt;br /&gt;
pm.start_servers = 6;&lt;br /&gt;
pm.min_spare_servers = 3;&lt;br /&gt;
pm.max_spare_servers = 9;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start php-fpm&lt;br /&gt;
systemctl enable php-fpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Nextcloud ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S nextcloud&amp;lt;/pre&amp;gt;&lt;br /&gt;
We install the following pacman hook in &amp;lt;code&amp;gt;/etc/pacman.d/hooks/nextcloud.hook&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Trigger]&lt;br /&gt;
Operation = Install&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Type = Package&lt;br /&gt;
Target = nextcloud&lt;br /&gt;
Target = nextcloud-app-*&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Update Nextcloud installation&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/runuser -u http -- /usr/bin/php /usr/share/webapps/nextcloud/occ upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create a server block in the &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;upstream php-handler {&lt;br /&gt;
    #server 127.0.0.1:9000;&lt;br /&gt;
    server unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    listen [::]:80;&lt;br /&gt;
    server_name cloud.mydomain.net;&lt;br /&gt;
    # enforce https&lt;br /&gt;
    return 301 https://$server_name:443$request_uri;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl http2;&lt;br /&gt;
    listen [::]:443 ssl http2;&lt;br /&gt;
    server_name cloud.mydomain.net;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/cloud.mydomain.net/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/cloud.mydomain.net/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    # Add headers to serve security related headers&lt;br /&gt;
    # Before enabling Strict-Transport-Security headers please read into this&lt;br /&gt;
    # topic first.&lt;br /&gt;
    # add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains; preload;&amp;quot; always;&lt;br /&gt;
    add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains;&amp;quot; always;&lt;br /&gt;
    #&lt;br /&gt;
    # WARNING: Only add the preload option once you read about&lt;br /&gt;
    # the consequences in https://hstspreload.org/. This option&lt;br /&gt;
    # will add the domain to a hardcoded list that is shipped&lt;br /&gt;
    # in all major browsers and getting removed from this list&lt;br /&gt;
    # could take several months.&lt;br /&gt;
    add_header Referrer-Policy &amp;quot;no-referrer&amp;quot; always;&lt;br /&gt;
    add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;br /&gt;
    add_header X-Download-Options &amp;quot;noopen&amp;quot; always;&lt;br /&gt;
    add_header X-Frame-Options &amp;quot;SAMEORIGIN&amp;quot; always;&lt;br /&gt;
    add_header X-Permitted-Cross-Domain-Policies &amp;quot;none&amp;quot; always;&lt;br /&gt;
    add_header X-Robots-Tag &amp;quot;none&amp;quot; always;&lt;br /&gt;
    add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
    # Remove X-Powered-By, which is an information leak&lt;br /&gt;
    fastcgi_hide_header X-Powered-By;&lt;br /&gt;
&lt;br /&gt;
    # Path to the root of your installation&lt;br /&gt;
    root /usr/share/webapps/nextcloud;&lt;br /&gt;
&lt;br /&gt;
    location = /robots.txt {&lt;br /&gt;
        allow all;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # The following 2 rules are only needed for the user_webfinger app.&lt;br /&gt;
    # Uncomment it if you&#039;re planning to use this app.&lt;br /&gt;
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;&lt;br /&gt;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;&lt;br /&gt;
&lt;br /&gt;
    # The following rule is only needed for the Social app.&lt;br /&gt;
    # Uncomment it if you&#039;re planning to use this app.&lt;br /&gt;
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;&lt;br /&gt;
&lt;br /&gt;
    location = /.well-known/carddav {&lt;br /&gt;
      return 301 $scheme://$host:$server_port/remote.php/dav;&lt;br /&gt;
    }&lt;br /&gt;
    location = /.well-known/caldav {&lt;br /&gt;
      return 301 $scheme://$host:$server_port/remote.php/dav;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # set max upload size&lt;br /&gt;
    client_max_body_size 512M;&lt;br /&gt;
    fastcgi_buffers 64 4K;&lt;br /&gt;
&lt;br /&gt;
    # Enable gzip but do not remove ETag headers&lt;br /&gt;
    gzip on;&lt;br /&gt;
    gzip_vary on;&lt;br /&gt;
    gzip_comp_level 4;&lt;br /&gt;
    gzip_min_length 256;&lt;br /&gt;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;&lt;br /&gt;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;&lt;br /&gt;
&lt;br /&gt;
    # Uncomment if your server is build with the ngx_pagespeed module&lt;br /&gt;
    # This module is currently not supported.&lt;br /&gt;
    #pagespeed off;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        rewrite ^ /index.php;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {&lt;br /&gt;
        deny all;&lt;br /&gt;
    }&lt;br /&gt;
    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {&lt;br /&gt;
        deny all;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy)\.php(?:$|\/) {&lt;br /&gt;
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;&lt;br /&gt;
        set $path_info $fastcgi_path_info;&lt;br /&gt;
        try_files $fastcgi_script_name =404;&lt;br /&gt;
        include fastcgi_params;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_param PATH_INFO $path_info;&lt;br /&gt;
        fastcgi_param HTTPS on;&lt;br /&gt;
        # Avoid sending the security headers twice&lt;br /&gt;
        fastcgi_param modHeadersAvailable true;&lt;br /&gt;
        # Enable pretty urls&lt;br /&gt;
        fastcgi_param front_controller_active true;&lt;br /&gt;
        fastcgi_pass php-handler;&lt;br /&gt;
        fastcgi_intercept_errors on;&lt;br /&gt;
        fastcgi_request_buffering off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {&lt;br /&gt;
        try_files $uri/ =404;&lt;br /&gt;
        index index.php;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # Adding the cache control header for js, css and map files&lt;br /&gt;
    # Make sure it is BELOW the PHP block&lt;br /&gt;
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {&lt;br /&gt;
        try_files $uri /index.php$request_uri;&lt;br /&gt;
        add_header Cache-Control &amp;quot;public, max-age=15778463&amp;quot;;&lt;br /&gt;
        # Add headers to serve security related headers (It is intended to&lt;br /&gt;
        # have those duplicated to the ones above)&lt;br /&gt;
        # Before enabling Strict-Transport-Security headers please read into&lt;br /&gt;
        # this topic first.&lt;br /&gt;
        #add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains; preload;&amp;quot; always;&lt;br /&gt;
        #&lt;br /&gt;
        # WARNING: Only add the preload option once you read about&lt;br /&gt;
        # the consequences in https://hstspreload.org/. This option&lt;br /&gt;
        # will add the domain to a hardcoded list that is shipped&lt;br /&gt;
        # in all major browsers and getting removed from this list&lt;br /&gt;
        # could take several months.&lt;br /&gt;
        add_header Referrer-Policy &amp;quot;no-referrer&amp;quot; always;&lt;br /&gt;
        add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;br /&gt;
        add_header X-Download-Options &amp;quot;noopen&amp;quot; always;&lt;br /&gt;
        add_header X-Frame-Options &amp;quot;SAMEORIGIN&amp;quot; always;&lt;br /&gt;
        add_header X-Permitted-Cross-Domain-Policies &amp;quot;none&amp;quot; always;&lt;br /&gt;
        add_header X-Robots-Tag &amp;quot;none&amp;quot; always;&lt;br /&gt;
        add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
        # Optional: Don&#039;t log access to assets&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {&lt;br /&gt;
        try_files $uri /index.php$request_uri;&lt;br /&gt;
        # Optional: Don&#039;t log access to other assets&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
We have to create a data directory for Nextcloud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir /var/nextcloud&lt;br /&gt;
chown http:http /var/nextcloud&lt;br /&gt;
chmod 750 /var/nextcloud&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also have to change permissions for the apps directories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p /usr/share/webapps/nextcloud/data&lt;br /&gt;
chown -R http:http /usr/share/webapps/nextcloud/{apps,data}&lt;br /&gt;
chmod 750 /usr/share/webapps/nextcloud/{apps,data}&amp;lt;/pre&amp;gt;&lt;br /&gt;
We have to give &amp;lt;code&amp;gt;php-fpm&amp;lt;/code&amp;gt; permissions. We do this with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl edit php-fpm.service&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will save the contents in &amp;lt;code&amp;gt;/etc/systemd/system/php-fpm.service.d/override.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
ReadWritePaths = /usr/share/webapps/nextcloud/apps&lt;br /&gt;
ReadWritePaths = /usr/share/webapps/nextcloud/data&lt;br /&gt;
ReadWritePaths = /etc/webapps/nextcloud/config&lt;br /&gt;
&lt;br /&gt;
# Replace the following path with the Nextcloud data directory&lt;br /&gt;
ReadWritePaths = /var/nextcloud&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart php-fpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can then open the firewall on port 80 and 443:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl stop fail2ban&lt;br /&gt;
iptables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
iptables -A INPUT -i ens3 -p tcp --dport 443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -p tcp --dport 443 -j ACCEPT&lt;br /&gt;
iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
systemctl start fail2ban&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Postinstall ==&lt;br /&gt;
&lt;br /&gt;
It turns out that the cache was not enabled. We do that by adding the following key to &amp;lt;code&amp;gt;/etc/webapps/nextcloud/config/config.php&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&#039;memcache.local&#039; =&amp;gt; &#039;\OC\Memcache\APCu&#039;,&amp;lt;/pre&amp;gt;&lt;br /&gt;
Install the following apps:&lt;br /&gt;
&lt;br /&gt;
* talk&lt;br /&gt;
* deck&lt;br /&gt;
* notes&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
&lt;br /&gt;
The services that are run are:&lt;br /&gt;
&lt;br /&gt;
* mariadb&lt;br /&gt;
* nginx&lt;br /&gt;
* php-fpm&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226149</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226149"/>
		<updated>2020-06-23T20:22:24Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 7 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.  The installation process has been described [[Install Nextcloud on Arch Linux]]&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226148</id>
		<title>Install Nextcloud on Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226148"/>
		<updated>2020-06-23T20:21:08Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Change source tags to pre&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
This document describes how to set up Nextcloud on a virtual private server (VPS) hosted by a cloud service provider that provides images for Arch Linux. We assume there is a DNS record in place that points the address &amp;lt;code&amp;gt;cloud.mydomain.net&amp;lt;/code&amp;gt; to the IP address provided by the cloud service provider.&lt;br /&gt;
&lt;br /&gt;
= Basic setup Arch Linux =&lt;br /&gt;
&lt;br /&gt;
== Initial setup ==&lt;br /&gt;
&lt;br /&gt;
Since the system comes preinstalled with Arch Linux on it, the first thing to do is to update the system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -Syu&lt;br /&gt;
&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
pacman -S base base-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Add an administration user ==&lt;br /&gt;
&lt;br /&gt;
We add a day-to-day administrator account:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;useradd -m -g users -s /bin/bash admin&lt;br /&gt;
passwd admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure that &amp;lt;code&amp;gt;pacman&amp;lt;/code&amp;gt; can be executed as user &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;visudo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;admin ALL=(ALL) NOPASSWD: /usr/bin/pacman&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Create a swap partition ==&lt;br /&gt;
&lt;br /&gt;
The swap partition has already been activated, so there is nothing to do.&lt;br /&gt;
&lt;br /&gt;
== Configure the language and locales ==&lt;br /&gt;
&lt;br /&gt;
In file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;en_US.UTF-8 UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then execute:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;locale-gen&lt;br /&gt;
&lt;br /&gt;
echo LANG=en_US.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
export LANG=en_US.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the correct time zone, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;commonlisp&amp;quot;&amp;gt;ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Time configuration ==&lt;br /&gt;
&lt;br /&gt;
Since Arch sits in a virtual machine, we assume that the time is always correct.&lt;br /&gt;
&lt;br /&gt;
== Random number generation ==&lt;br /&gt;
&lt;br /&gt;
Random number generation is important for security, so we install the following tools:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S rng-tools&lt;br /&gt;
&lt;br /&gt;
systemctl start rngd&lt;br /&gt;
systemctl enable rngd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To check the level of entropy we can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;cat /proc/sys/kernel/random/entropy_available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Since it runs on a virtual machine, we are not really sure how representative the entropy is.&lt;br /&gt;
&lt;br /&gt;
We can also run the following tests which should have very few failures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;cat /dev/random | rngtest -c 1000&lt;br /&gt;
cat /dev/urandom | rngtest -c 1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;rng-tools&amp;lt;/code&amp;gt; service is preferred over &amp;lt;code&amp;gt;haveged&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting the hostname ==&lt;br /&gt;
&lt;br /&gt;
Assuming we have a hostname &amp;lt;code&amp;gt;mydomainname.net&amp;lt;/code&amp;gt; that points to our server&#039;s IP address:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hostname&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;127.0.1.1 cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After a reboot, we can check whether everything is set with the command &amp;lt;code&amp;gt;hostname -f&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting up the network ==&lt;br /&gt;
&lt;br /&gt;
The network has been set up fine by the cloud provider.&lt;br /&gt;
&lt;br /&gt;
== Setting up the firewall ==&lt;br /&gt;
&lt;br /&gt;
We use &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt; to set up the firewall. A chain is a set of rules. The chain INPUT is predefined for packets that enter the system.&lt;br /&gt;
&lt;br /&gt;
First we set the policy for chain INPUT to target ACCEPT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT ACCEPT&lt;br /&gt;
ip6tables -P INPUT ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then flush all the chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -F&lt;br /&gt;
ip6tables -F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A table in this context is a packet matching table. There are five predefined tables. The default table &#039;&#039;filter&#039;&#039;, the tables &#039;&#039;nat&#039;&#039;, &#039;&#039;mangle&#039;&#039;, &#039;&#039;raw&#039;&#039;, and &#039;&#039;security&#039;&#039;. We flush the table &#039;&#039;nat&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -t nat -F&lt;br /&gt;
ip6tables -t nat -F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then delete all the user-defined chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -X&lt;br /&gt;
ip6tables -X&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then set the policy to drop every packet that enters the system (make sure you are logged in via a video display and not SSH):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT DROP&lt;br /&gt;
ip6tables -P INPUT DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We append to chain INPUT on the loopback interface &amp;lt;code&amp;gt;lo&amp;lt;/code&amp;gt; to jump to target ACCEPT. This is important for applications that use local servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then append to chain INPUT on interface &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt; a rule to accept connections with states ESTABLISHED and RELATED:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then make sure that incomming TCP connections are SYN packets to prevent SYN flooding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also drop packets with incoming fragments. This is only for IPv4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -f -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also drop bogons:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also reject malformed NULL packets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can then store the firewall rules with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make the changes permanent, we can enable and start the Systemd service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start iptables.service&lt;br /&gt;
systemctl enable iptables.service&lt;br /&gt;
systemctl status iptables.service&lt;br /&gt;
&lt;br /&gt;
systemctl start ip6tables.service&lt;br /&gt;
systemctl enable ip6tables.service&lt;br /&gt;
systemctl status ip6tables.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
The service fail2ban is a service for detecting login attempts and blocking it.&lt;br /&gt;
&lt;br /&gt;
We install it with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S fail2ban&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Using &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; we can sandbox the fail2ban service with capabilities. To do so, we create a new file &amp;lt;code&amp;gt;/etc/systemd/system/fail2ban.service.d/capabilities.conf&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
PrivateDevices=yes&lt;br /&gt;
PrivateTmp=yes&lt;br /&gt;
ProtectHome=read-only&lt;br /&gt;
ProtectSystem=strict&lt;br /&gt;
NoNewPrivileges=yes&lt;br /&gt;
ReadWritePaths=-/var/run/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/lib/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/log/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/spool/postfix/maildrop&lt;br /&gt;
ReadWritePaths=-/run/xtables.lock&lt;br /&gt;
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create configuration file &amp;lt;code&amp;gt;/etc/fail2ban/fail2ban.local&amp;lt;/code&amp;gt; with the correct logtarget path:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Definition]&lt;br /&gt;
logtarget = /var/log/fail2ban/fail2ban.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the &amp;lt;code&amp;gt;/var/log/fail2ban/&amp;lt;/code&amp;gt; directory as root.&lt;br /&gt;
&lt;br /&gt;
We have to set up paths for Arch Linux in a &amp;lt;code&amp;gt;jail.local&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[INCLUDES]&lt;br /&gt;
before = paths-arch.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Yay ==&lt;br /&gt;
&lt;br /&gt;
With yay, we can keep also the AUR packages up to date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://aur.archlinux.org/yay.git&lt;br /&gt;
tar xvzf yay.tar.gz&lt;br /&gt;
cd yay&lt;br /&gt;
makepkg -s&lt;br /&gt;
pacman -U yay*.pkg.tar.xz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
= SSH access =&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The first service we would like to set up is SSH. We first configure the SSH daemon itself in file &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;PermitRootLogin no&lt;br /&gt;
TCPKeepAlive no&lt;br /&gt;
ClientAliveInterval 60&lt;br /&gt;
Ciphers aes256-ctr,aes192-ctr,aes128-ctr&lt;br /&gt;
MACs hmac-sha2-512,hmac-sha2-256&lt;br /&gt;
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then restart the daemon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart sshd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== The firewall ==&lt;br /&gt;
&lt;br /&gt;
We have to open port 22 for SSH in our firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
We add the following jails in &amp;lt;code&amp;gt;/etc/fail2ban/jail.d/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installing Nextcloud =&lt;br /&gt;
&lt;br /&gt;
The version to install is 19.0.0. We are going to install it on top of &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MariaDB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
&lt;br /&gt;
As a first step, we are going to install MariaDB with package &amp;lt;code&amp;gt;mariadb&amp;lt;/code&amp;gt;. Before we start the service, we run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
systemctl start mariadb&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then add the database (substitute the password with a proper one):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;sql&amp;quot;&amp;gt;CREATE DATABASE nextcloud DEFAULT CHARACTER SET &#039;utf8mb4&#039; COLLATE &#039;utf8mb4_general_ci&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON nextcloud.* TO &#039;nextcloud&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;password&#039;;&lt;br /&gt;
FLUSH PRIVILEGES;&amp;lt;/pre&amp;gt;&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
Install PHP with package &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;. We need to do additional configuration, in &amp;lt;code&amp;gt;/etc/php/php.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;date.timezone = Europe/Amsterdam&lt;br /&gt;
memory_limit = 512M&amp;lt;/pre&amp;gt;&lt;br /&gt;
For PHP we need to install the following modules:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! module&lt;br /&gt;
! package&lt;br /&gt;
! comments&lt;br /&gt;
|-&lt;br /&gt;
| ctype&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| curl&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| dom&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| GD&lt;br /&gt;
| php-gd&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| iconv&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| json&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| libxml&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mbstring&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| openssl&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| posix&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| session&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SimpleXML&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| xmlreader&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| xmlwriter&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zip&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zlib&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pdo&amp;lt;sub&amp;gt;mysql&amp;lt;/sub&amp;gt;&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| mysqli&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| fileinfo&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bz2&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| intl&lt;br /&gt;
| php-intl&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| bcmath&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| gmp&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| imagick&lt;br /&gt;
| php-imagick&lt;br /&gt;
| enable in conf.d/imagick.ini&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For further support for &amp;lt;code&amp;gt;imagick&amp;lt;/code&amp;gt;, it is wise to install the following packages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S ghostscript librsvg libwmf ocl-icd openexr openjpeg2 pango&amp;lt;/pre&amp;gt;&lt;br /&gt;
We enable OPCache in &amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;zend_extension=opcache&amp;lt;/pre&amp;gt;&lt;br /&gt;
And we set the following options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;opcache.enable=1&lt;br /&gt;
opcache.interned_strings_buffer=8&lt;br /&gt;
opcache.max_accelerated_files=10000&lt;br /&gt;
opcache.memory_consumption=128&lt;br /&gt;
opcache.save_comments=1&lt;br /&gt;
opcache.revalidate_freq=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
We enable APCu by installing &amp;lt;code&amp;gt;php-apcu&amp;lt;/code&amp;gt; and enabling it in &amp;lt;code&amp;gt;/etc/php/conf.d/apcu.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;extension=apcu.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Nginx ==&lt;br /&gt;
&lt;br /&gt;
We install &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt; and set it up to obtain certificates by enabling the service, and open port 80:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
systemctl enable nginx&lt;br /&gt;
systemctl start nginx&amp;lt;/pre&amp;gt;&lt;br /&gt;
We get a message that the &amp;lt;code&amp;gt;max_types_hash_size&amp;lt;/code&amp;gt; is not enough. In &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; add in the &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; block:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;types_hash_max_size 4096;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We are now ready to install certificates.&lt;br /&gt;
&lt;br /&gt;
=== Let&#039;s Encrypt certificates ===&lt;br /&gt;
&lt;br /&gt;
Install the following packages to acquire certificates: &amp;lt;code&amp;gt;certbot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;certbot-nginx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;certbot --nginx&amp;lt;/pre&amp;gt;&lt;br /&gt;
We fill in:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| email address&lt;br /&gt;
| &amp;amp;lt;your email address&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| terms&lt;br /&gt;
| agree&lt;br /&gt;
|-&lt;br /&gt;
| share info&lt;br /&gt;
| no&lt;br /&gt;
|-&lt;br /&gt;
| domain&lt;br /&gt;
| cloud.mydomain.net&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It aquires the certificates but cannot find the server block for this domain.&lt;br /&gt;
&lt;br /&gt;
=== PHP CGI ===&lt;br /&gt;
&lt;br /&gt;
Install package &amp;lt;code&amp;gt;php-fpm&amp;lt;/code&amp;gt; and in the configuration file &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt; uncomment &amp;lt;code&amp;gt;env[PATH]&amp;lt;/code&amp;gt;. Also set up &amp;lt;code&amp;gt;env[TMP]&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt; and make sure the directory is writable for the Nginx user.&lt;br /&gt;
&lt;br /&gt;
We also set the following values in &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt;, taken from the documentation and all values divided by 2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pm.max_children = 60;&lt;br /&gt;
pm.start_servers = 6;&lt;br /&gt;
pm.min_spare_servers = 3;&lt;br /&gt;
pm.max_spare_servers = 9;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start php-fpm&lt;br /&gt;
systemctl enable php-fpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Nextcloud ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S nextcloud&amp;lt;/pre&amp;gt;&lt;br /&gt;
We install the following pacman hook in &amp;lt;code&amp;gt;/etc/pacman.d/hooks/nextcloud.hook&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Trigger]&lt;br /&gt;
Operation = Install&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Type = Package&lt;br /&gt;
Target = nextcloud&lt;br /&gt;
Target = nextcloud-app-*&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Update Nextcloud installation&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/runuser -u http -- /usr/bin/php /usr/share/webapps/nextcloud/occ upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create a server block in the &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;upstream php-handler {&lt;br /&gt;
    #server 127.0.0.1:9000;&lt;br /&gt;
    server unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    listen [::]:80;&lt;br /&gt;
    server_name cloud.mydomain.net;&lt;br /&gt;
    # enforce https&lt;br /&gt;
    return 301 https://$server_name:443$request_uri;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl http2;&lt;br /&gt;
    listen [::]:443 ssl http2;&lt;br /&gt;
    server_name cloud.mydomain.net;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/cloud.mydomain.net/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/cloud.mydomain.net/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    # Add headers to serve security related headers&lt;br /&gt;
    # Before enabling Strict-Transport-Security headers please read into this&lt;br /&gt;
    # topic first.&lt;br /&gt;
    # add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains; preload;&amp;quot; always;&lt;br /&gt;
    add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains;&amp;quot; always;&lt;br /&gt;
    #&lt;br /&gt;
    # WARNING: Only add the preload option once you read about&lt;br /&gt;
    # the consequences in https://hstspreload.org/. This option&lt;br /&gt;
    # will add the domain to a hardcoded list that is shipped&lt;br /&gt;
    # in all major browsers and getting removed from this list&lt;br /&gt;
    # could take several months.&lt;br /&gt;
    add_header Referrer-Policy &amp;quot;no-referrer&amp;quot; always;&lt;br /&gt;
    add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;br /&gt;
    add_header X-Download-Options &amp;quot;noopen&amp;quot; always;&lt;br /&gt;
    add_header X-Frame-Options &amp;quot;SAMEORIGIN&amp;quot; always;&lt;br /&gt;
    add_header X-Permitted-Cross-Domain-Policies &amp;quot;none&amp;quot; always;&lt;br /&gt;
    add_header X-Robots-Tag &amp;quot;none&amp;quot; always;&lt;br /&gt;
    add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
    # Remove X-Powered-By, which is an information leak&lt;br /&gt;
    fastcgi_hide_header X-Powered-By;&lt;br /&gt;
&lt;br /&gt;
    # Path to the root of your installation&lt;br /&gt;
    root /usr/share/webapps/nextcloud;&lt;br /&gt;
&lt;br /&gt;
    location = /robots.txt {&lt;br /&gt;
        allow all;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # The following 2 rules are only needed for the user_webfinger app.&lt;br /&gt;
    # Uncomment it if you&#039;re planning to use this app.&lt;br /&gt;
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;&lt;br /&gt;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;&lt;br /&gt;
&lt;br /&gt;
    # The following rule is only needed for the Social app.&lt;br /&gt;
    # Uncomment it if you&#039;re planning to use this app.&lt;br /&gt;
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;&lt;br /&gt;
&lt;br /&gt;
    location = /.well-known/carddav {&lt;br /&gt;
      return 301 $scheme://$host:$server_port/remote.php/dav;&lt;br /&gt;
    }&lt;br /&gt;
    location = /.well-known/caldav {&lt;br /&gt;
      return 301 $scheme://$host:$server_port/remote.php/dav;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # set max upload size&lt;br /&gt;
    client_max_body_size 512M;&lt;br /&gt;
    fastcgi_buffers 64 4K;&lt;br /&gt;
&lt;br /&gt;
    # Enable gzip but do not remove ETag headers&lt;br /&gt;
    gzip on;&lt;br /&gt;
    gzip_vary on;&lt;br /&gt;
    gzip_comp_level 4;&lt;br /&gt;
    gzip_min_length 256;&lt;br /&gt;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;&lt;br /&gt;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;&lt;br /&gt;
&lt;br /&gt;
    # Uncomment if your server is build with the ngx_pagespeed module&lt;br /&gt;
    # This module is currently not supported.&lt;br /&gt;
    #pagespeed off;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        rewrite ^ /index.php;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {&lt;br /&gt;
        deny all;&lt;br /&gt;
    }&lt;br /&gt;
    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {&lt;br /&gt;
        deny all;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy)\.php(?:$|\/) {&lt;br /&gt;
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;&lt;br /&gt;
        set $path_info $fastcgi_path_info;&lt;br /&gt;
        try_files $fastcgi_script_name =404;&lt;br /&gt;
        include fastcgi_params;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_param PATH_INFO $path_info;&lt;br /&gt;
        fastcgi_param HTTPS on;&lt;br /&gt;
        # Avoid sending the security headers twice&lt;br /&gt;
        fastcgi_param modHeadersAvailable true;&lt;br /&gt;
        # Enable pretty urls&lt;br /&gt;
        fastcgi_param front_controller_active true;&lt;br /&gt;
        fastcgi_pass php-handler;&lt;br /&gt;
        fastcgi_intercept_errors on;&lt;br /&gt;
        fastcgi_request_buffering off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {&lt;br /&gt;
        try_files $uri/ =404;&lt;br /&gt;
        index index.php;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # Adding the cache control header for js, css and map files&lt;br /&gt;
    # Make sure it is BELOW the PHP block&lt;br /&gt;
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {&lt;br /&gt;
        try_files $uri /index.php$request_uri;&lt;br /&gt;
        add_header Cache-Control &amp;quot;public, max-age=15778463&amp;quot;;&lt;br /&gt;
        # Add headers to serve security related headers (It is intended to&lt;br /&gt;
        # have those duplicated to the ones above)&lt;br /&gt;
        # Before enabling Strict-Transport-Security headers please read into&lt;br /&gt;
        # this topic first.&lt;br /&gt;
        #add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains; preload;&amp;quot; always;&lt;br /&gt;
        #&lt;br /&gt;
        # WARNING: Only add the preload option once you read about&lt;br /&gt;
        # the consequences in https://hstspreload.org/. This option&lt;br /&gt;
        # will add the domain to a hardcoded list that is shipped&lt;br /&gt;
        # in all major browsers and getting removed from this list&lt;br /&gt;
        # could take several months.&lt;br /&gt;
        add_header Referrer-Policy &amp;quot;no-referrer&amp;quot; always;&lt;br /&gt;
        add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;br /&gt;
        add_header X-Download-Options &amp;quot;noopen&amp;quot; always;&lt;br /&gt;
        add_header X-Frame-Options &amp;quot;SAMEORIGIN&amp;quot; always;&lt;br /&gt;
        add_header X-Permitted-Cross-Domain-Policies &amp;quot;none&amp;quot; always;&lt;br /&gt;
        add_header X-Robots-Tag &amp;quot;none&amp;quot; always;&lt;br /&gt;
        add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
        # Optional: Don&#039;t log access to assets&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {&lt;br /&gt;
        try_files $uri /index.php$request_uri;&lt;br /&gt;
        # Optional: Don&#039;t log access to other assets&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
We have to create a data directory for Nextcloud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir /var/nextcloud&lt;br /&gt;
chown http:http /var/nextcloud&lt;br /&gt;
chmod 750 /var/nextcloud&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also have to change permissions for the apps directories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p /usr/share/webapps/nextcloud/data&lt;br /&gt;
chown -R http:http /usr/share/webapps/nextcloud/{apps,data}&lt;br /&gt;
chmod 750 /usr/share/webapps/nextcloud/{apps,data}&amp;lt;/pre&amp;gt;&lt;br /&gt;
We have to give &amp;lt;code&amp;gt;php-fpm&amp;lt;/code&amp;gt; permissions. We do this with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl edit php-fpm.service&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will save the contents in &amp;lt;code&amp;gt;/etc/systemd/system/php-fpm.service.d/override.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
ReadWritePaths = /usr/share/webapps/nextcloud/apps&lt;br /&gt;
ReadWritePaths = /usr/share/webapps/nextcloud/data&lt;br /&gt;
ReadWritePaths = /etc/webapps/nextcloud/config&lt;br /&gt;
&lt;br /&gt;
# Replace the following path with the Nextcloud data directory&lt;br /&gt;
ReadWritePaths = /var/nextcloud&amp;lt;/pre&amp;gt;&lt;br /&gt;
We then do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart php-fpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can then open the firewall on port 80 and 443:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl stop fail2ban&lt;br /&gt;
iptables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
iptables -A INPUT -i ens3 -p tcp --dport 443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -p tcp --dport 443 -j ACCEPT&lt;br /&gt;
iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
systemctl start fail2ban&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Postinstall ==&lt;br /&gt;
&lt;br /&gt;
It turns out that the cache was not enabled. We do that by adding the following key to &amp;lt;code&amp;gt;/etc/webapps/nextcloud/config/config.php&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;php&amp;quot;&amp;gt;&#039;memcache.local&#039; =&amp;gt; &#039;\OC\Memcache\APCu&#039;,&amp;lt;/pre&amp;gt;&lt;br /&gt;
Install the following apps:&lt;br /&gt;
&lt;br /&gt;
* talk&lt;br /&gt;
* deck&lt;br /&gt;
* notes&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
&lt;br /&gt;
The services that are run are:&lt;br /&gt;
&lt;br /&gt;
* mariadb&lt;br /&gt;
* nginx&lt;br /&gt;
* php-fpm&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226147</id>
		<title>Install Nextcloud on Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226147"/>
		<updated>2020-06-23T20:17:38Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Add the Nextcloud installation part&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Comment =&lt;br /&gt;
&lt;br /&gt;
For some reason the &amp;lt;source&amp;gt; tags don&#039;t work, will fix it later.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This document describes how to set up Nextcloud on a virtual private server (VPS) hosted by a cloud service provider that provides images for Arch Linux. We assume there is a DNS record in place that points the address &amp;lt;code&amp;gt;cloud.mydomain.net&amp;lt;/code&amp;gt; to the IP address provided by the cloud service provider.&lt;br /&gt;
&lt;br /&gt;
= Basic setup Arch Linux =&lt;br /&gt;
&lt;br /&gt;
== Initial setup ==&lt;br /&gt;
&lt;br /&gt;
Since the system comes preinstalled with Arch Linux on it, the first thing to do is to update the system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -Syu&lt;br /&gt;
&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
pacman -S base base-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Add an administration user ==&lt;br /&gt;
&lt;br /&gt;
We add a day-to-day administrator account:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;useradd -m -g users -s /bin/bash admin&lt;br /&gt;
passwd admin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Make sure that &amp;lt;code&amp;gt;pacman&amp;lt;/code&amp;gt; can be executed as user &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;visudo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
And add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;admin ALL=(ALL) NOPASSWD: /usr/bin/pacman&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Create a swap partition ==&lt;br /&gt;
&lt;br /&gt;
The swap partition has already been activated, so there is nothing to do.&lt;br /&gt;
&lt;br /&gt;
== Configure the language and locales ==&lt;br /&gt;
&lt;br /&gt;
In file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;en_US.UTF-8 UTF-8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Then execute:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;locale-gen&lt;br /&gt;
&lt;br /&gt;
echo LANG=en_US.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
export LANG=en_US.UTF-8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Add the correct time zone, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;commonlisp&amp;quot;&amp;gt;ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Time configuration ==&lt;br /&gt;
&lt;br /&gt;
Since Arch sits in a virtual machine, we assume that the time is always correct.&lt;br /&gt;
&lt;br /&gt;
== Random number generation ==&lt;br /&gt;
&lt;br /&gt;
Random number generation is important for security, so we install the following tools:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S rng-tools&lt;br /&gt;
&lt;br /&gt;
systemctl start rngd&lt;br /&gt;
systemctl enable rngd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To check the level of entropy we can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cat /proc/sys/kernel/random/entropy_available&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Since it runs on a virtual machine, we are not really sure how representative the entropy is.&lt;br /&gt;
&lt;br /&gt;
We can also run the following tests which should have very few failures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cat /dev/random | rngtest -c 1000&lt;br /&gt;
cat /dev/urandom | rngtest -c 1000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;rng-tools&amp;lt;/code&amp;gt; service is preferred over &amp;lt;code&amp;gt;haveged&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting the hostname ==&lt;br /&gt;
&lt;br /&gt;
Assuming we have a hostname &amp;lt;code&amp;gt;mydomainname.net&amp;lt;/code&amp;gt; that points to our server&#039;s IP address:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hostname&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;127.0.1.1 cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
After a reboot, we can check whether everything is set with the command &amp;lt;code&amp;gt;hostname -f&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting up the network ==&lt;br /&gt;
&lt;br /&gt;
The network has been set up fine by the cloud provider.&lt;br /&gt;
&lt;br /&gt;
== Setting up the firewall ==&lt;br /&gt;
&lt;br /&gt;
We use &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt; to set up the firewall. A chain is a set of rules. The chain INPUT is predefined for packets that enter the system.&lt;br /&gt;
&lt;br /&gt;
First we set the policy for chain INPUT to target ACCEPT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT ACCEPT&lt;br /&gt;
ip6tables -P INPUT ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then flush all the chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -F&lt;br /&gt;
ip6tables -F&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A table in this context is a packet matching table. There are five predefined tables. The default table &#039;&#039;filter&#039;&#039;, the tables &#039;&#039;nat&#039;&#039;, &#039;&#039;mangle&#039;&#039;, &#039;&#039;raw&#039;&#039;, and &#039;&#039;security&#039;&#039;. We flush the table &#039;&#039;nat&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -t nat -F&lt;br /&gt;
ip6tables -t nat -F&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then delete all the user-defined chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -X&lt;br /&gt;
ip6tables -X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then set the policy to drop every packet that enters the system (make sure you are logged in via a video display and not SSH):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT DROP&lt;br /&gt;
ip6tables -P INPUT DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We append to chain INPUT on the loopback interface &amp;lt;code&amp;gt;lo&amp;lt;/code&amp;gt; to jump to target ACCEPT. This is important for applications that use local servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then append to chain INPUT on interface &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt; a rule to accept connections with states ESTABLISHED and RELATED:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then make sure that incomming TCP connections are SYN packets to prevent SYN flooding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We also drop packets with incoming fragments. This is only for IPv4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -f -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We also drop bogons:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We also reject malformed NULL packets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We can then store the firewall rules with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To make the changes permanent, we can enable and start the Systemd service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start iptables.service&lt;br /&gt;
systemctl enable iptables.service&lt;br /&gt;
systemctl status iptables.service&lt;br /&gt;
&lt;br /&gt;
systemctl start ip6tables.service&lt;br /&gt;
systemctl enable ip6tables.service&lt;br /&gt;
systemctl status ip6tables.service&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
The service fail2ban is a service for detecting login attempts and blocking it.&lt;br /&gt;
&lt;br /&gt;
We install it with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S fail2ban&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Using &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; we can sandbox the fail2ban service with capabilities. To do so, we create a new file &amp;lt;code&amp;gt;/etc/systemd/system/fail2ban.service.d/capabilities.conf&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
PrivateDevices=yes&lt;br /&gt;
PrivateTmp=yes&lt;br /&gt;
ProtectHome=read-only&lt;br /&gt;
ProtectSystem=strict&lt;br /&gt;
NoNewPrivileges=yes&lt;br /&gt;
ReadWritePaths=-/var/run/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/lib/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/log/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/spool/postfix/maildrop&lt;br /&gt;
ReadWritePaths=-/run/xtables.lock&lt;br /&gt;
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Create configuration file &amp;lt;code&amp;gt;/etc/fail2ban/fail2ban.local&amp;lt;/code&amp;gt; with the correct logtarget path:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[Definition]&lt;br /&gt;
logtarget = /var/log/fail2ban/fail2ban.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Create the &amp;lt;code&amp;gt;/var/log/fail2ban/&amp;lt;/code&amp;gt; directory as root.&lt;br /&gt;
&lt;br /&gt;
We have to set up paths for Arch Linux in a &amp;lt;code&amp;gt;jail.local&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[INCLUDES]&lt;br /&gt;
before = paths-arch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Yay ==&lt;br /&gt;
&lt;br /&gt;
With yay, we can keep also the AUR packages up to date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://aur.archlinux.org/yay.git&lt;br /&gt;
tar xvzf yay.tar.gz&lt;br /&gt;
cd yay&lt;br /&gt;
makepkg -s&lt;br /&gt;
pacman -U yay*.pkg.tar.xz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= SSH access =&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The first service we would like to set up is SSH. We first configure the SSH daemon itself in file &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;PermitRootLogin no&lt;br /&gt;
TCPKeepAlive no&lt;br /&gt;
ClientAliveInterval 60&lt;br /&gt;
Ciphers aes256-ctr,aes192-ctr,aes128-ctr&lt;br /&gt;
MACs hmac-sha2-512,hmac-sha2-256&lt;br /&gt;
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then restart the daemon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart sshd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== The firewall ==&lt;br /&gt;
&lt;br /&gt;
We have to open port 22 for SSH in our firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
We add the following jails in &amp;lt;code&amp;gt;/etc/fail2ban/jail.d/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installing Nextcloud =&lt;br /&gt;
&lt;br /&gt;
The version to install is 19.0.0. We are going to install it on top of &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MariaDB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
&lt;br /&gt;
As a first step, we are going to install MariaDB with package &amp;lt;code&amp;gt;mariadb&amp;lt;/code&amp;gt;. Before we start the service, we run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
systemctl start mariadb&amp;lt;/source&amp;gt;&lt;br /&gt;
Then add the database (substitute the password with a proper one):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CREATE DATABASE nextcloud DEFAULT CHARACTER SET &#039;utf8mb4&#039; COLLATE &#039;utf8mb4_general_ci&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON nextcloud.* TO &#039;nextcloud&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;password&#039;;&lt;br /&gt;
FLUSH PRIVILEGES;&amp;lt;/source&amp;gt;&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
Install PHP with package &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;. We need to do additional configuration, in &amp;lt;code&amp;gt;/etc/php/php.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;date.timezone = Europe/Amsterdam&lt;br /&gt;
memory_limit = 512M&amp;lt;/source&amp;gt;&lt;br /&gt;
For PHP we need to install the following modules:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! module&lt;br /&gt;
! package&lt;br /&gt;
! comments&lt;br /&gt;
|-&lt;br /&gt;
| ctype&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| curl&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| dom&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| GD&lt;br /&gt;
| php-gd&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| iconv&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| json&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| libxml&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mbstring&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| openssl&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| posix&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| session&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SimpleXML&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| xmlreader&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| xmlwriter&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zip&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zlib&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pdo&amp;lt;sub&amp;gt;mysql&amp;lt;/sub&amp;gt;&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| mysqli&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| fileinfo&lt;br /&gt;
| php&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bz2&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| intl&lt;br /&gt;
| php-intl&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| bcmath&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| gmp&lt;br /&gt;
| php&lt;br /&gt;
| enable in php.ini&lt;br /&gt;
|-&lt;br /&gt;
| imagick&lt;br /&gt;
| php-imagick&lt;br /&gt;
| enable in conf.d/imagick.ini&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For further support for &amp;lt;code&amp;gt;imagick&amp;lt;/code&amp;gt;, it is wise to install the following packages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S ghostscript librsvg libwmf ocl-icd openexr openjpeg2 pango&amp;lt;/source&amp;gt;&lt;br /&gt;
We enable OPCache in &amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;zend_extension=opcache&amp;lt;/source&amp;gt;&lt;br /&gt;
And we set the following options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;opcache.enable=1&lt;br /&gt;
opcache.interned_strings_buffer=8&lt;br /&gt;
opcache.max_accelerated_files=10000&lt;br /&gt;
opcache.memory_consumption=128&lt;br /&gt;
opcache.save_comments=1&lt;br /&gt;
opcache.revalidate_freq=1&amp;lt;/source&amp;gt;&lt;br /&gt;
We enable APCu by installing &amp;lt;code&amp;gt;php-apcu&amp;lt;/code&amp;gt; and enabling it in &amp;lt;code&amp;gt;/etc/php/conf.d/apcu.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;extension=apcu.so&amp;lt;/source&amp;gt;&lt;br /&gt;
== Nginx ==&lt;br /&gt;
&lt;br /&gt;
We install &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt; and set it up to obtain certificates by enabling the service, and open port 80:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
systemctl enable nginx&lt;br /&gt;
systemctl start nginx&amp;lt;/source&amp;gt;&lt;br /&gt;
We get a message that the &amp;lt;code&amp;gt;max_types_hash_size&amp;lt;/code&amp;gt; is not enough. In &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; add in the &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; block:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;types_hash_max_size 4096;&amp;lt;/source&amp;gt;&lt;br /&gt;
We are now ready to install certificates.&lt;br /&gt;
&lt;br /&gt;
=== Let&#039;s Encrypt certificates ===&lt;br /&gt;
&lt;br /&gt;
Install the following packages to acquire certificates: &amp;lt;code&amp;gt;certbot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;certbot-nginx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;certbot --nginx&amp;lt;/source&amp;gt;&lt;br /&gt;
We fill in:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| email address&lt;br /&gt;
| &amp;amp;lt;your email address&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| terms&lt;br /&gt;
| agree&lt;br /&gt;
|-&lt;br /&gt;
| share info&lt;br /&gt;
| no&lt;br /&gt;
|-&lt;br /&gt;
| domain&lt;br /&gt;
| cloud.mydomain.net&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It aquires the certificates but cannot find the server block for this domain.&lt;br /&gt;
&lt;br /&gt;
=== PHP CGI ===&lt;br /&gt;
&lt;br /&gt;
Install package &amp;lt;code&amp;gt;php-fpm&amp;lt;/code&amp;gt; and in the configuration file &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt; uncomment &amp;lt;code&amp;gt;env[PATH]&amp;lt;/code&amp;gt;. Also set up &amp;lt;code&amp;gt;env[TMP]&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt; and make sure the directory is writable for the Nginx user.&lt;br /&gt;
&lt;br /&gt;
We also set the following values in &amp;lt;code&amp;gt;/etc/php/php-fpm.d/www.conf&amp;lt;/code&amp;gt;, taken from the documentation and all values divided by 2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pm.max_children = 60;&lt;br /&gt;
pm.start_servers = 6;&lt;br /&gt;
pm.min_spare_servers = 3;&lt;br /&gt;
pm.max_spare_servers = 9;&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start php-fpm&lt;br /&gt;
systemctl enable php-fpm&amp;lt;/source&amp;gt;&lt;br /&gt;
== Nextcloud ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S nextcloud&amp;lt;/source&amp;gt;&lt;br /&gt;
We install the following pacman hook in &amp;lt;code&amp;gt;/etc/pacman.d/hooks/nextcloud.hook&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[Trigger]&lt;br /&gt;
Operation = Install&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Type = Package&lt;br /&gt;
Target = nextcloud&lt;br /&gt;
Target = nextcloud-app-*&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Update Nextcloud installation&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/runuser -u http -- /usr/bin/php /usr/share/webapps/nextcloud/occ upgrade&amp;lt;/source&amp;gt;&lt;br /&gt;
Create a server block in the &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;upstream php-handler {&lt;br /&gt;
    #server 127.0.0.1:9000;&lt;br /&gt;
    server unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    listen [::]:80;&lt;br /&gt;
    server_name cloud.mydomain.net;&lt;br /&gt;
    # enforce https&lt;br /&gt;
    return 301 https://$server_name:443$request_uri;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl http2;&lt;br /&gt;
    listen [::]:443 ssl http2;&lt;br /&gt;
    server_name cloud.mydomain.net;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/cloud.mydomain.net/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/cloud.mydomain.net/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    # Add headers to serve security related headers&lt;br /&gt;
    # Before enabling Strict-Transport-Security headers please read into this&lt;br /&gt;
    # topic first.&lt;br /&gt;
    # add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains; preload;&amp;quot; always;&lt;br /&gt;
    add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains;&amp;quot; always;&lt;br /&gt;
    #&lt;br /&gt;
    # WARNING: Only add the preload option once you read about&lt;br /&gt;
    # the consequences in https://hstspreload.org/. This option&lt;br /&gt;
    # will add the domain to a hardcoded list that is shipped&lt;br /&gt;
    # in all major browsers and getting removed from this list&lt;br /&gt;
    # could take several months.&lt;br /&gt;
    add_header Referrer-Policy &amp;quot;no-referrer&amp;quot; always;&lt;br /&gt;
    add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;br /&gt;
    add_header X-Download-Options &amp;quot;noopen&amp;quot; always;&lt;br /&gt;
    add_header X-Frame-Options &amp;quot;SAMEORIGIN&amp;quot; always;&lt;br /&gt;
    add_header X-Permitted-Cross-Domain-Policies &amp;quot;none&amp;quot; always;&lt;br /&gt;
    add_header X-Robots-Tag &amp;quot;none&amp;quot; always;&lt;br /&gt;
    add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
    # Remove X-Powered-By, which is an information leak&lt;br /&gt;
    fastcgi_hide_header X-Powered-By;&lt;br /&gt;
&lt;br /&gt;
    # Path to the root of your installation&lt;br /&gt;
    root /usr/share/webapps/nextcloud;&lt;br /&gt;
&lt;br /&gt;
    location = /robots.txt {&lt;br /&gt;
        allow all;&lt;br /&gt;
        log_not_found off;&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # The following 2 rules are only needed for the user_webfinger app.&lt;br /&gt;
    # Uncomment it if you&#039;re planning to use this app.&lt;br /&gt;
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;&lt;br /&gt;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;&lt;br /&gt;
&lt;br /&gt;
    # The following rule is only needed for the Social app.&lt;br /&gt;
    # Uncomment it if you&#039;re planning to use this app.&lt;br /&gt;
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;&lt;br /&gt;
&lt;br /&gt;
    location = /.well-known/carddav {&lt;br /&gt;
      return 301 $scheme://$host:$server_port/remote.php/dav;&lt;br /&gt;
    }&lt;br /&gt;
    location = /.well-known/caldav {&lt;br /&gt;
      return 301 $scheme://$host:$server_port/remote.php/dav;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # set max upload size&lt;br /&gt;
    client_max_body_size 512M;&lt;br /&gt;
    fastcgi_buffers 64 4K;&lt;br /&gt;
&lt;br /&gt;
    # Enable gzip but do not remove ETag headers&lt;br /&gt;
    gzip on;&lt;br /&gt;
    gzip_vary on;&lt;br /&gt;
    gzip_comp_level 4;&lt;br /&gt;
    gzip_min_length 256;&lt;br /&gt;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;&lt;br /&gt;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;&lt;br /&gt;
&lt;br /&gt;
    # Uncomment if your server is build with the ngx_pagespeed module&lt;br /&gt;
    # This module is currently not supported.&lt;br /&gt;
    #pagespeed off;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        rewrite ^ /index.php;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {&lt;br /&gt;
        deny all;&lt;br /&gt;
    }&lt;br /&gt;
    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {&lt;br /&gt;
        deny all;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy)\.php(?:$|\/) {&lt;br /&gt;
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;&lt;br /&gt;
        set $path_info $fastcgi_path_info;&lt;br /&gt;
        try_files $fastcgi_script_name =404;&lt;br /&gt;
        include fastcgi_params;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        fastcgi_param PATH_INFO $path_info;&lt;br /&gt;
        fastcgi_param HTTPS on;&lt;br /&gt;
        # Avoid sending the security headers twice&lt;br /&gt;
        fastcgi_param modHeadersAvailable true;&lt;br /&gt;
        # Enable pretty urls&lt;br /&gt;
        fastcgi_param front_controller_active true;&lt;br /&gt;
        fastcgi_pass php-handler;&lt;br /&gt;
        fastcgi_intercept_errors on;&lt;br /&gt;
        fastcgi_request_buffering off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {&lt;br /&gt;
        try_files $uri/ =404;&lt;br /&gt;
        index index.php;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # Adding the cache control header for js, css and map files&lt;br /&gt;
    # Make sure it is BELOW the PHP block&lt;br /&gt;
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {&lt;br /&gt;
        try_files $uri /index.php$request_uri;&lt;br /&gt;
        add_header Cache-Control &amp;quot;public, max-age=15778463&amp;quot;;&lt;br /&gt;
        # Add headers to serve security related headers (It is intended to&lt;br /&gt;
        # have those duplicated to the ones above)&lt;br /&gt;
        # Before enabling Strict-Transport-Security headers please read into&lt;br /&gt;
        # this topic first.&lt;br /&gt;
        #add_header Strict-Transport-Security &amp;quot;max-age=15768000; includeSubDomains; preload;&amp;quot; always;&lt;br /&gt;
        #&lt;br /&gt;
        # WARNING: Only add the preload option once you read about&lt;br /&gt;
        # the consequences in https://hstspreload.org/. This option&lt;br /&gt;
        # will add the domain to a hardcoded list that is shipped&lt;br /&gt;
        # in all major browsers and getting removed from this list&lt;br /&gt;
        # could take several months.&lt;br /&gt;
        add_header Referrer-Policy &amp;quot;no-referrer&amp;quot; always;&lt;br /&gt;
        add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;br /&gt;
        add_header X-Download-Options &amp;quot;noopen&amp;quot; always;&lt;br /&gt;
        add_header X-Frame-Options &amp;quot;SAMEORIGIN&amp;quot; always;&lt;br /&gt;
        add_header X-Permitted-Cross-Domain-Policies &amp;quot;none&amp;quot; always;&lt;br /&gt;
        add_header X-Robots-Tag &amp;quot;none&amp;quot; always;&lt;br /&gt;
        add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
        # Optional: Don&#039;t log access to assets&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {&lt;br /&gt;
        try_files $uri /index.php$request_uri;&lt;br /&gt;
        # Optional: Don&#039;t log access to other assets&lt;br /&gt;
        access_log off;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
We have to create a data directory for Nextcloud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir /var/nextcloud&lt;br /&gt;
chown http:http /var/nextcloud&lt;br /&gt;
chmod 750 /var/nextcloud&amp;lt;/source&amp;gt;&lt;br /&gt;
We also have to change permissions for the apps directories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p /usr/share/webapps/nextcloud/data&lt;br /&gt;
chown -R http:http /usr/share/webapps/nextcloud/{apps,data}&lt;br /&gt;
chmod 750 /usr/share/webapps/nextcloud/{apps,data}&amp;lt;/source&amp;gt;&lt;br /&gt;
We have to give &amp;lt;code&amp;gt;php-fpm&amp;lt;/code&amp;gt; permissions. We do this with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl edit php-fpm.service&amp;lt;/source&amp;gt;&lt;br /&gt;
This will save the contents in &amp;lt;code&amp;gt;/etc/systemd/system/php-fpm.service.d/override.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
ReadWritePaths = /usr/share/webapps/nextcloud/apps&lt;br /&gt;
ReadWritePaths = /usr/share/webapps/nextcloud/data&lt;br /&gt;
ReadWritePaths = /etc/webapps/nextcloud/config&lt;br /&gt;
&lt;br /&gt;
# Replace the following path with the Nextcloud data directory&lt;br /&gt;
ReadWritePaths = /var/nextcloud&amp;lt;/source&amp;gt;&lt;br /&gt;
We then do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart php-fpm&amp;lt;/source&amp;gt;&lt;br /&gt;
We can then open the firewall on port 80 and 443:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl stop fail2ban&lt;br /&gt;
iptables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
iptables -A INPUT -i ens3 -p tcp --dport 443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -p tcp --dport 443 -j ACCEPT&lt;br /&gt;
iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
systemctl start fail2ban&amp;lt;/source&amp;gt;&lt;br /&gt;
== Postinstall ==&lt;br /&gt;
&lt;br /&gt;
It turns out that the cache was not enabled. We do that by adding the following key to &amp;lt;code&amp;gt;/etc/webapps/nextcloud/config/config.php&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&#039;memcache.local&#039; =&amp;gt; &#039;\OC\Memcache\APCu&#039;,&amp;lt;/source&amp;gt;&lt;br /&gt;
Install the following apps:&lt;br /&gt;
&lt;br /&gt;
* talk&lt;br /&gt;
* deck&lt;br /&gt;
* notes&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
&lt;br /&gt;
The services that are run are:&lt;br /&gt;
&lt;br /&gt;
* mariadb&lt;br /&gt;
* nginx&lt;br /&gt;
* php-fpm&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226145</id>
		<title>Install Nextcloud on Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Install_Nextcloud_on_Arch_Linux&amp;diff=226145"/>
		<updated>2020-06-23T20:15:03Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Basic setup of Arch Linux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Comment =&lt;br /&gt;
&lt;br /&gt;
For some reason the &amp;lt;source&amp;gt; tags don&#039;t work, will fix it later.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This document describes how to set up Nextcloud on a virtual private server (VPS) hosted by a cloud service provider that provides images for Arch Linux. We assume there is a DNS record in place that points the address &amp;lt;code&amp;gt;cloud.mydomain.net&amp;lt;/code&amp;gt; to the IP address provided by the cloud service provider.&lt;br /&gt;
&lt;br /&gt;
= Basic setup Arch Linux =&lt;br /&gt;
&lt;br /&gt;
== Initial setup ==&lt;br /&gt;
&lt;br /&gt;
Since the system comes preinstalled with Arch Linux on it, the first thing to do is to update the system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -Syu&lt;br /&gt;
&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
pacman -S base base-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Add an administration user ==&lt;br /&gt;
&lt;br /&gt;
We add a day-to-day administrator account:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;useradd -m -g users -s /bin/bash admin&lt;br /&gt;
passwd admin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Make sure that &amp;lt;code&amp;gt;pacman&amp;lt;/code&amp;gt; can be executed as user &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;visudo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
And add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;admin ALL=(ALL) NOPASSWD: /usr/bin/pacman&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Create a swap partition ==&lt;br /&gt;
&lt;br /&gt;
The swap partition has already been activated, so there is nothing to do.&lt;br /&gt;
&lt;br /&gt;
== Configure the language and locales ==&lt;br /&gt;
&lt;br /&gt;
In file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;en_US.UTF-8 UTF-8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Then execute:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;locale-gen&lt;br /&gt;
&lt;br /&gt;
echo LANG=en_US.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
export LANG=en_US.UTF-8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Add the correct time zone, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;commonlisp&amp;quot;&amp;gt;ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Time configuration ==&lt;br /&gt;
&lt;br /&gt;
Since Arch sits in a virtual machine, we assume that the time is always correct.&lt;br /&gt;
&lt;br /&gt;
== Random number generation ==&lt;br /&gt;
&lt;br /&gt;
Random number generation is important for security, so we install the following tools:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S rng-tools&lt;br /&gt;
&lt;br /&gt;
systemctl start rngd&lt;br /&gt;
systemctl enable rngd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To check the level of entropy we can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cat /proc/sys/kernel/random/entropy_available&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Since it runs on a virtual machine, we are not really sure how representative the entropy is.&lt;br /&gt;
&lt;br /&gt;
We can also run the following tests which should have very few failures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cat /dev/random | rngtest -c 1000&lt;br /&gt;
cat /dev/urandom | rngtest -c 1000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;rng-tools&amp;lt;/code&amp;gt; service is preferred over &amp;lt;code&amp;gt;haveged&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting the hostname ==&lt;br /&gt;
&lt;br /&gt;
Assuming we have a hostname &amp;lt;code&amp;gt;mydomainname.net&amp;lt;/code&amp;gt; that points to our server&#039;s IP address:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hostname&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;127.0.1.1 cloud.mydomainname.net&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
After a reboot, we can check whether everything is set with the command &amp;lt;code&amp;gt;hostname -f&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting up the network ==&lt;br /&gt;
&lt;br /&gt;
The network has been set up fine by the cloud provider.&lt;br /&gt;
&lt;br /&gt;
== Setting up the firewall ==&lt;br /&gt;
&lt;br /&gt;
We use &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt; to set up the firewall. A chain is a set of rules. The chain INPUT is predefined for packets that enter the system.&lt;br /&gt;
&lt;br /&gt;
First we set the policy for chain INPUT to target ACCEPT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT ACCEPT&lt;br /&gt;
ip6tables -P INPUT ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then flush all the chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -F&lt;br /&gt;
ip6tables -F&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A table in this context is a packet matching table. There are five predefined tables. The default table &#039;&#039;filter&#039;&#039;, the tables &#039;&#039;nat&#039;&#039;, &#039;&#039;mangle&#039;&#039;, &#039;&#039;raw&#039;&#039;, and &#039;&#039;security&#039;&#039;. We flush the table &#039;&#039;nat&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -t nat -F&lt;br /&gt;
ip6tables -t nat -F&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then delete all the user-defined chains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -X&lt;br /&gt;
ip6tables -X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then set the policy to drop every packet that enters the system (make sure you are logged in via a video display and not SSH):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -P INPUT DROP&lt;br /&gt;
ip6tables -P INPUT DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We append to chain INPUT on the loopback interface &amp;lt;code&amp;gt;lo&amp;lt;/code&amp;gt; to jump to target ACCEPT. This is important for applications that use local servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then append to chain INPUT on interface &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt; a rule to accept connections with states ESTABLISHED and RELATED:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -i ens3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then make sure that incomming TCP connections are SYN packets to prevent SYN flooding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We also drop packets with incoming fragments. This is only for IPv4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -f -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We also drop bogons:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We also reject malformed NULL packets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We can then store the firewall rules with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To make the changes permanent, we can enable and start the Systemd service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl start iptables.service&lt;br /&gt;
systemctl enable iptables.service&lt;br /&gt;
systemctl status iptables.service&lt;br /&gt;
&lt;br /&gt;
systemctl start ip6tables.service&lt;br /&gt;
systemctl enable ip6tables.service&lt;br /&gt;
systemctl status ip6tables.service&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
The service fail2ban is a service for detecting login attempts and blocking it.&lt;br /&gt;
&lt;br /&gt;
We install it with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;pacman -S fail2ban&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Using &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; we can sandbox the fail2ban service with capabilities. To do so, we create a new file &amp;lt;code&amp;gt;/etc/systemd/system/fail2ban.service.d/capabilities.conf&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[Service]&lt;br /&gt;
PrivateDevices=yes&lt;br /&gt;
PrivateTmp=yes&lt;br /&gt;
ProtectHome=read-only&lt;br /&gt;
ProtectSystem=strict&lt;br /&gt;
NoNewPrivileges=yes&lt;br /&gt;
ReadWritePaths=-/var/run/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/lib/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/log/fail2ban&lt;br /&gt;
ReadWritePaths=-/var/spool/postfix/maildrop&lt;br /&gt;
ReadWritePaths=-/run/xtables.lock&lt;br /&gt;
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Create configuration file &amp;lt;code&amp;gt;/etc/fail2ban/fail2ban.local&amp;lt;/code&amp;gt; with the correct logtarget path:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[Definition]&lt;br /&gt;
logtarget = /var/log/fail2ban/fail2ban.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Create the &amp;lt;code&amp;gt;/var/log/fail2ban/&amp;lt;/code&amp;gt; directory as root.&lt;br /&gt;
&lt;br /&gt;
We have to set up paths for Arch Linux in a &amp;lt;code&amp;gt;jail.local&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[INCLUDES]&lt;br /&gt;
before = paths-arch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Yay ==&lt;br /&gt;
&lt;br /&gt;
With yay, we can keep also the AUR packages up to date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://aur.archlinux.org/yay.git&lt;br /&gt;
tar xvzf yay.tar.gz&lt;br /&gt;
cd yay&lt;br /&gt;
makepkg -s&lt;br /&gt;
pacman -U yay*.pkg.tar.xz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= SSH access =&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The first service we would like to set up is SSH. We first configure the SSH daemon itself in file &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;PermitRootLogin no&lt;br /&gt;
TCPKeepAlive no&lt;br /&gt;
ClientAliveInterval 60&lt;br /&gt;
Ciphers aes256-ctr,aes192-ctr,aes128-ctr&lt;br /&gt;
MACs hmac-sha2-512,hmac-sha2-256&lt;br /&gt;
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
We then restart the daemon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl restart sshd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== The firewall ==&lt;br /&gt;
&lt;br /&gt;
We have to open port 22 for SSH in our firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
ip6tables-save &amp;gt; /etc/iptables/ip6tables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
&lt;br /&gt;
We add the following jails in &amp;lt;code&amp;gt;/etc/fail2ban/jail.d/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226129</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=226129"/>
		<updated>2020-06-23T19:35:38Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 7 June 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 7 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install [https://nextcloud.com/ Nextcloud] on the VPS.&lt;br /&gt;
&lt;br /&gt;
= Saturday 6 June 2020 =&lt;br /&gt;
&lt;br /&gt;
Install Arch Linux on a virtual private server to host [https://nextcloud.com/ Nextcloud].&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=225625</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=225625"/>
		<updated>2020-06-21T12:09:41Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Wednesday 27 May 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Wednesday 27 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Meeting with Benedikt, Holger and Jos Poortvliet from [https://nextcloud.com/ Nextcloud].  We discussed the ideas that we have and asked whether Nextcloud has some form of integration with git and can provide an infrastructure for our ideas on versioning.  Nextcloud is essentially a file service with many apps such as Talk providing video conferencing (we used it for the meeting and it worked well).  Nextcloud is a fork of Owncloud and years ago I investigated whether Owncloud could help me get rid of Google services but at the time I found it a bit too limited.  However, Nextcloud has improved a lot now and it looks very interesting.  Jos Poortvliet mentioned that Nextcloud wants to focus on &#039;flows&#039; with which you can collaborate on files and discuss it in a chat service.  Nextcloud provides its own way of versioning but doesn&#039;t have git integration.  This looks like a really interesting infrastructure for collaboration and we decided to try it out.  I will set up a Nextcloud instance on my server in the near future to try it out.&lt;br /&gt;
&lt;br /&gt;
= Monday 25 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Wednesday 27 May Benedikt, Holger, and I will meet with Jos Poortvliet from [https://nextcloud.com/ Nextcloud] to discuss our ideas on [[Improving Versioning]].  I Improved the page a bit and sent a link to Jos.&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222340</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222340"/>
		<updated>2020-05-25T19:52:29Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Wednesday 6 May 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Wednesday 6 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Video conference call with Holger and Benedikt about the Hamburg STEAM Camp and the project on [[Improving Versioning]] (previously known as [[Semantic Versioning]]). Benedikt would try to set up a meeting with a representative of NextCloud to investigate if collaboration would be possible in this area.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222339</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222339"/>
		<updated>2020-05-25T19:49:41Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 26 April 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Thursday 23 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Video call with Benedikt and Holger about STEAM Camp Hamburg. Unfortunately, the STEAM has been canceled due to the Corona crisis.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222338</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222338"/>
		<updated>2020-05-25T19:48:12Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Saturday 9 May 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 17 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Recording creating a schematic in KiCAD. This is longer than I wanted. I noticed that longer video clips make the editing time also longer, and not in a linear way...&lt;br /&gt;
&lt;br /&gt;
= Sunday 10 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Teaching myself FreeCAD. Notice that the OSE version of FreeCAD is old, either from 2016 or 2018. I believe this is because of the Assembly 2 workbench that is not supported any longer and only works properly in 0.16 from 2016. I&#039;ve read that they are working on integrating an Assembly workbench natively in FreeCAD. I realized that the assembly modules that OSE currently has are probably not going to be portable to any new version. Assembly 3 and Assembly 4 are not backwards compatible. &lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222337</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222337"/>
		<updated>2020-05-25T19:41:32Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Saturday 9 May 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Saturday 9 May 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on the KiCAD 101. Improve the voice-overs. I may need to get a better microphone, and camera as well for that matter. Add notes for the second module on the Pierce oscillator.&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222336</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=222336"/>
		<updated>2020-05-25T19:37:45Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 26 April 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 26 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Working on various clips for the OSE KiCAD 101. Trying to make title templates in Kdenlive to speed up creating different modules. Recording voice overs for the tutorials. Making the minimal Arduino and making it work with the blink program.&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Talk:Semantic_Versioning&amp;diff=222304</id>
		<title>Talk:Semantic Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Talk:Semantic_Versioning&amp;diff=222304"/>
		<updated>2020-05-25T17:08:43Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Pieter moved page Talk:Semantic Versioning to Talk:Improving Versioning: The title &amp;quot;Semantic Versioning&amp;quot; is too specific for the proposal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Talk:Improving Versioning]]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Talk:Improving_Versioning&amp;diff=222303</id>
		<title>Talk:Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Talk:Improving_Versioning&amp;diff=222303"/>
		<updated>2020-05-25T17:08:43Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Pieter moved page Talk:Semantic Versioning to Talk:Improving Versioning: The title &amp;quot;Semantic Versioning&amp;quot; is too specific for the proposal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Structure Nextcloud Meeting:&lt;br /&gt;
&lt;br /&gt;
- introduction (we &amp;quot;ose wiki-boost) and nextcloud)&lt;br /&gt;
&lt;br /&gt;
- dgml/fab city/circular economy&lt;br /&gt;
&lt;br /&gt;
- we need light weight content development system (wiki with + features) &lt;br /&gt;
&lt;br /&gt;
- goals/requirements&lt;br /&gt;
&lt;br /&gt;
- wishlist&lt;br /&gt;
&lt;br /&gt;
- discussion/feedback from nextcloud (NC) (what nc can deliver)&lt;br /&gt;
&lt;br /&gt;
- open end / we come back to NC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From [[User:Groques]]: For what it&#039;s worth, I fully support the [[Semantic Versioning]] proposal and think it&#039;s great. Although, I also have a software development background, so I&#039;m already familiar with the concept, and am probably biased.&lt;br /&gt;
&lt;br /&gt;
Semantic versioning was really developed for software. It&#039;s worth exploring &#039;&#039;&#039;if&#039;&#039;&#039; there are cases where it doesn&#039;t apply well to &#039;&#039;&#039;hardware&#039;&#039;&#039;. For example, what&#039;s considered a &amp;quot;breaking change&amp;quot; or would require a major version bump for hardware? The lines in hardware may not be as well-defined as they are in software.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Semantic_Versioning&amp;diff=222302</id>
		<title>Semantic Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Semantic_Versioning&amp;diff=222302"/>
		<updated>2020-05-25T17:08:43Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Pieter moved page Semantic Versioning to Improving Versioning: The title &amp;quot;Semantic Versioning&amp;quot; is too specific for the proposal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Improving Versioning]]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222301</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222301"/>
		<updated>2020-05-25T17:08:43Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Pieter moved page Semantic Versioning to Improving Versioning: The title &amp;quot;Semantic Versioning&amp;quot; is too specific for the proposal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime - potentially &amp;quot;indefinite&amp;quot;.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a relatively low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* relative ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
Although we list qualities here, these qualities are debatable. For example, the wiki&#039;s ease of use is relative and highly depends on the user&#039;s prior experience with editing wikis. For example, since editing and viewing the rendered results requires extra clicks, the workflow is not ideal. Embedding of external resources is brittle and requires copy-and-pasting of HTML-snippets (and the rendering of these external links depends on the browser&#039;s privacy settings).&lt;br /&gt;
In addition, although Google Presentations are indeed easy-to-use, keeping formatting consistent can be challenging and time-consuming.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name deficiencies.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is on a per-page basis and not really meant for versioning. (It is rather a mechanism to make and compare snap-shots.)  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example. Furthermore, there is no mechanism to add in-place comments (and comment on comments), which seems desirable for a collaborative workflow and resolving merge conflicts in the wiki is not intuitive.&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
It is debatable to what degree vendor lock-in is still acceptable as there are also examples without much reliance on a particular cloud service. For example, using GitHub may be acceptable if the repository is mirrored in some form. GitHub&#039;s issue tracker may be leveraged because it gives out-of-the-box, user-friendly functionality, but with the understanding that it may go away any time (e.g., because of DMCA take-down.)&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Based on the current qualities and problems we can define a set of requirements:&lt;br /&gt;
&lt;br /&gt;
=== 1) No major change in the status quo ===&lt;br /&gt;
The current way of working with the wiki has obvious benefits.  Changing the way OSE works in a major way is likely to be unnecessary and a whole community has to make a big change.&lt;br /&gt;
&lt;br /&gt;
=== 2) Keep the wiki as a central point ===&lt;br /&gt;
The wiki is a proven technology with a low entrance threshold.  It brings a community together in a central place.  However, central points have drawbacks, certainly in an open-source project.&lt;br /&gt;
&lt;br /&gt;
=== 3) Do not rely on the wiki as a central point ===&lt;br /&gt;
The danger of a central point is that if the wiki goes offline, lots of very interesting information, a legacy, will be lost.  It may be possible to protect for this.&lt;br /&gt;
&lt;br /&gt;
 Can we download, and backup ALL of the wiki or parts, like one can with wikipedia? Magnetic Tape Cartriges, or archival optical disks are cheap/tb and can last for a long time, two of thos physical in seperate places, and a cloud, and we should be good? (plus frequent backups).  Also any way to trigger a wayback machine &amp;quot;copy&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
=== 4) Apply proper versioning ===&lt;br /&gt;
A good approach would be to apply versioning in such a way that a version change reflects the severity of the change.&lt;br /&gt;
&lt;br /&gt;
=== 5) Lifetime releases ===&lt;br /&gt;
True consolidation of versions in the form of releases (releases of the documentation) that will never be lost and available for eternity or at least for the lifetime of the machine.&lt;br /&gt;
&lt;br /&gt;
=== 6) Versioning supporting modularity ===&lt;br /&gt;
The GVCS machines are highly modular.  There should be a proper system in place that can keep track of the various version numbers of the sub-releases.&lt;br /&gt;
&lt;br /&gt;
=== 7) No reliance on proprietary cloud services ===&lt;br /&gt;
For an open project as OSE, it would be preferable not to rely on proprietary software, also not on cloud services.&lt;br /&gt;
&lt;br /&gt;
=== 8) Support textual format as much as possible ===&lt;br /&gt;
Proper versioning works best with textual formats.  For versioning in binary formats one needs support from the application that produces the binary format, whereas versioning on textual formats can be done with any tool.  This means that versioning becomes universal.&lt;br /&gt;
&lt;br /&gt;
=== 9) Google Presentations ease-of-use ===&lt;br /&gt;
For documentation of the machines, the build manuals, we would like to have the same ease-of-use as Google Presentations offers.&lt;br /&gt;
&lt;br /&gt;
=== 10) Automatic indexing ===&lt;br /&gt;
For the machines, the modules that are part of the machines it would be helpful if there were some form of automatic indexing.  Essentially, it would be good to have more structure on the wiki.&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
If one agrees that an important objective of OSE is to produce documentation for building machines of the GVCS, then we can look at other fields that deal with structured information.  In that case it makes sense to look at software engineering that already has a significant open-source initiative.&lt;br /&gt;
&lt;br /&gt;
=== Semantic versioning ===&lt;br /&gt;
Typically, [https://semver.org/ semantic versioning] is used in the field of software engineering.  With semantic versioning, a version number has three numbers, for example 2.3.4.  With these three numbers one can convey how big a change is.  For example from 2.x.x to 3.0.0 is a major change, from 2.3.x to 2.4.0 is a minor change, for example changing a z-sensor on a 3D-printer.  A change from 2.3.4 to 2.3.5 is a very minor change, typically to solve a problem.  An example is to replace an axis-stop with a new version that works better than the previous version.&lt;br /&gt;
&lt;br /&gt;
This scheme is most dominant in software engineering and it may be wise to learn from it and adopt it.  This would satisfy requirement 4.&lt;br /&gt;
&lt;br /&gt;
 In addition to semantic versioning, which is linear, we also have to think about accommodating &amp;quot;alternatives/options/configurations&amp;quot;. For example, the &amp;quot;same&amp;quot; printer has different components for power supply depending on the region (e.g., US has a US-plug and GFCI, most of Europe has a Europlug, etc.). Printer versions have gone back and forth between 2-pin/3-pin endstops, but it may make sense to have both configurations as user-selectable option (and depending on the choice a matching firmware configuration is needed).&lt;br /&gt;
&lt;br /&gt;
=== Distributed versioning systems ===&lt;br /&gt;
Software engineering projecs typically use dedicated versioning systems.  There are centralized versioning systems such as the old [https://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and the still used [https://en.wikipedia.org/wiki/Apache_Subversion SVN].  In these systems committing a change to the software registers the change on a central CVS or SVN server.  This is not ideal for open source projects because if an open source project becomes less popular and someone decides to turn off the server, all version history is gone.&lt;br /&gt;
&lt;br /&gt;
Therefore, more popular today are distributed versioning systems such as [https://en.wikipedia.org/wiki/Mercurial Mercurial] or [https://en.wikipedia.org/wiki/Git Git].  Especially Git is very popular.  Distributed versioning systems work in a different way.  Each user &amp;quot;clones&amp;quot; or receives a copy of the complete version history of the project.  If a centralized repository is discontinued, any user can reignite the project.  In addition, committing changes and registering these changes to a repository is decoupled.&lt;br /&gt;
&lt;br /&gt;
An extra feature of for example git is submodules.  A submodule is a Git repository inside a Git repository.  The parent repository keeps track of a specific commit of a child repository.  This mechanism can help us to keep track of modules, for example, version 1.0.0 of the D3D-Universal uses version 0.8.2 of the Universal Axis.  Version 1.5.0 of the D3D-Universal however has changed to version 1.0.2 of the Universal Axis.&lt;br /&gt;
&lt;br /&gt;
Git repositories typically have a &#039;&#039;master&#039;&#039; &amp;quot;branch&amp;quot;, where a branch can be considered a chain of &#039;&#039;commits&#039;&#039;.  A commit is a change in the repository made by a user, for example fixing a typo, update a version number, or big changes such as removing many files.  Many people can collaborate on a project by creating their own branch, for example &#039;add-second-z-axis&#039;, or &#039;fix-z-sensor-problem&#039;.  The people working on these branches commit in these branches and at some point they are ready and want to merge their branch into the master branch.  This is essentially updating the master branch to add the new feature.  The merge itself is also considered a commit.  For example if both &#039;add-second-z-axis&#039; and &#039;fix-z-sensor-problem&#039; are ready and merged into master, the team could decide that this could become a new version.  They can then &#039;tag&#039; the current commit with the version number, for example &#039;v1.3.0&#039;.&lt;br /&gt;
&lt;br /&gt;
 It seems using Git would also require some kind of (more or less) formalized process/workflow that spells out who can do what changes. Git is workflow-agnostic (a mixed blessing) and there are [https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows reference workflows] that could be used or adapted. (For example, FreeCAD uses the [https://wiki.freecadweb.org/Source_code_management &amp;quot;dictator and lieutenants workflow&amp;quot;].)&lt;br /&gt;
&lt;br /&gt;
The benefit of Git is that people can collaborate in a structured way, it supports semantic versioning.  The repositories are decentralized which means that losing the history of a project is unlikely.  Adopting Git would satisfy requirements 6.  It would help requirement 3 and 4.  However, it may be a disruptive change opposing requirement 1.&lt;br /&gt;
&lt;br /&gt;
=== Lifetime releases ===&lt;br /&gt;
There are multiple ways to satisfy requirement 5, lifetime releases.  First, proper versioning (requirement 4) has to be established.  One way to create releases for eternity is by using [https://zenodo.org/ Zenodo].  Zenodo is a project by CERN with funding from the European Union.  It is a data repository using the infrastructure of the Large Hadron Collider.  It allows you to take a snapshot of a Git repository and associate a unique [https://en.wikipedia.org/wiki/Digital_object_identifier DOI] to it.  This basically ensures that releases will be around for eternity.&lt;br /&gt;
&lt;br /&gt;
Another solution is to use the [https://ipfs.io/ InterPlanetary File System] where we can store and possibly &#039;pin&#039; versions for eternity.  This relies on having multiple copies of the versions hosted by different nodes in the network.&lt;br /&gt;
&lt;br /&gt;
=== Generating wiki pages ===&lt;br /&gt;
As the benefit of the wiki is clear, we need some way of bringing all of the above together.  A proposal is to move serious development of the machines to a dedicated Git repository, for example &#039;univeral-axis&#039; and &#039;d3d-universal&#039;.  The Git repositories contain a LICENSE file, a README, a CONTRIBUTING, a Changelog file, a VERSION file, and a Makefile, just as in a open-source software project.  The README explains how the repository works, for what machine the repository is, etc.  The CONTRIBUTING file defines a set of guidelines to aid users in contributing content.  The Makefile is essentially a script that keeps track of dependencies between files and &#039;builds&#039; the project, we will come back to this later.  The other files are self-explanatory.&lt;br /&gt;
&lt;br /&gt;
The main content of the repository consists of documentation in textual format together with the CAD files of the project.  With all this content we can &#039;build&#039; the project which means in this situation that we generate documents for the machines.  An example would be to &#039;make&#039; the build manual or &#039;make&#039; the wiki page of the project, or &#039;make&#039; the BOM.  The make script would ideally automatically generate images from the CAD files to be used in the documents that this project generates. (This seems feasible for FreeCAD [[https://wiki.freecadweb.org/Std_ViewScreenShot]], since it can be scripted and run headless.)&lt;br /&gt;
&lt;br /&gt;
As such, we can generate a wiki page and add that to the wiki ensuring that the information on the wiki remains consistent.  We could also automatically create an index for the wiki for several of these project, satisfying requirement 10.&lt;br /&gt;
&lt;br /&gt;
Ideally, we could even try to support to automatically incorporate editing actions on the wiki page back into the git repository to make sure that regular users can still contribute in a user-friendly way. (This can be seen as a form of [https://en.wikipedia.org/wiki/Round-trip_engineering round-trip engineering].)&lt;br /&gt;
&lt;br /&gt;
Unfortunately, all of this, does not fully satisfy requirement 1.  However, the benefits may outweigh the change.  It does satisfy requirement 2 and because of the decentralized nature of Git repositories it satisfies requirement 3.  Git is an extremely powerful tool but therefore also difficult to use.  However, the basic required commands are easy to use and learn with proper documentation and tutorials.  Therefore, the overall ease of use is diminished (requirement 9).&lt;br /&gt;
&lt;br /&gt;
=== Textual format ===&lt;br /&gt;
To make this all work, it would be ideal if most of the content in the repository is textual since it helps keeping track of changes easily.  Binary files increase the size of the repository (every new commit with a binary file increases the size of the repository with the size of the file) and it is impossible to see what change was made.  Unfortunately FreeCAD files are also binary, but because it is essentially a ZIP file, we could make Git a bit smarter to allow proper versioning on these files as well.&lt;br /&gt;
&lt;br /&gt;
To satisfy requirement 7, moving away from Google while maintaining the same ease-of-use (requirement 9) together with supporting a textual format (requirement 8) is an open question.  One could think of using the [https://en.wikipedia.org/wiki/Markdown Markdown] format in combination with [https://pandoc.org/ Pandoc] to convert it to various other formats.  Another option is [https://orgmode.org/ Org mode] that has excellent integration with the [https://www.gnu.org/software/emacs/ Emacs] editor.&lt;br /&gt;
&lt;br /&gt;
=== Mirror the OSE Wiki ===&lt;br /&gt;
To satisfy requirement 3, one may mirror the OSE wiki on separate server or an ipfs. Then, if the main OSE wiki went offline, it could be reignited.&lt;br /&gt;
&lt;br /&gt;
== Concrete Steps ==&lt;br /&gt;
A proposal is to investigate all of this as part of the STEAM Camp Hamburg.  A good use case is to apply the above methodology to the D3D-Univeral.  After this experiment, we can evaluate this methodology compared to the current workflow.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Useful Links=&lt;br /&gt;
*[https://www.youtube.com/watch?v=gShRBsahzXg A Youtube Video on USB&#039;s Recent Failure at Naming Standards Reflecting Change, and Making Sense]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222275</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222275"/>
		<updated>2020-05-25T15:56:31Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* 3) Do not rely on the wiki as a central point */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime - potentially &amp;quot;indefinite&amp;quot;.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a relatively low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* relative ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
Although we list qualities here, these qualities are debatable. For example, the wiki&#039;s ease of use is relative and highly depends on the user&#039;s prior experience with editing wikis. For example, since editing and viewing the rendered results requires extra clicks, the workflow is not ideal. Embedding of external resources is brittle and requires copy-and-pasting of HTML-snippets (and the rendering of these external links depends on the browser&#039;s privacy settings).&lt;br /&gt;
In addition, although Google Presentations are indeed easy-to-use, keeping formatting consistent can be challenging and time-consuming.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name deficiencies.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is on a per-page basis and not really meant for versioning. (It is rather a mechanism to make and compare snap-shots.)  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example. Furthermore, there is no mechanism to add in-place comments (and comment on comments), which seems desirable for a collaborative workflow and resolving merge conflicts in the wiki is not intuitive.&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
It is debatable to what degree vendor lock-in is still acceptable as there are also examples without much reliance on a particular cloud service. For example, using GitHub may be acceptable if the repository is mirrored in some form. GitHub&#039;s issue tracker may be leveraged because it gives out-of-the-box, user-friendly functionality, but with the understanding that it may go away any time (e.g., because of DMCA take-down.)&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Based on the current qualities and problems we can define a set of requirements:&lt;br /&gt;
&lt;br /&gt;
=== 1) No major change in the status quo ===&lt;br /&gt;
The current way of working with the wiki has obvious benefits.  Changing the way OSE works in a major way is likely to be unnecessary and a whole community has to make a big change.&lt;br /&gt;
&lt;br /&gt;
=== 2) Keep the wiki as a central point ===&lt;br /&gt;
The wiki is a proven technology with a low entrance threshold.  It brings a community together in a central place.  However, central points have drawbacks, certainly in an open-source project.&lt;br /&gt;
&lt;br /&gt;
=== 3) Do not rely on the wiki as a central point ===&lt;br /&gt;
The danger of a central point is that if the wiki goes offline, lots of very interesting information, a legacy, will be lost.  It may be possible to protect for this.&lt;br /&gt;
&lt;br /&gt;
 Can we download, and backup ALL of the wiki or parts, like one can with wikipedia? Magnetic Tape Cartriges, or archival optical disks are cheap/tb and can last for a long time, two of thos physical in seperate places, and a cloud, and we should be good? (plus frequent backups).  Also any way to trigger a wayback machine &amp;quot;copy&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
=== 4) Apply proper versioning ===&lt;br /&gt;
A good approach would be to apply versioning in such a way that a version change reflects the severity of the change.&lt;br /&gt;
&lt;br /&gt;
=== 5) Lifetime releases ===&lt;br /&gt;
True consolidation of versions in the form of releases (releases of the documentation) that will never be lost and available for eternity or at least for the lifetime of the machine.&lt;br /&gt;
&lt;br /&gt;
=== 6) Versioning supporting modularity ===&lt;br /&gt;
The GVCS machines are highly modular.  There should be a proper system in place that can keep track of the various version numbers of the sub-releases.&lt;br /&gt;
&lt;br /&gt;
=== 7) No reliance on proprietary cloud services ===&lt;br /&gt;
For an open project as OSE, it would be preferable not to rely on proprietary software, also not on cloud services.&lt;br /&gt;
&lt;br /&gt;
=== 8) Support textual format as much as possible ===&lt;br /&gt;
Proper versioning works best with textual formats.  For versioning in binary formats one needs support from the application that produces the binary format, whereas versioning on textual formats can be done with any tool.  This means that versioning becomes universal.&lt;br /&gt;
&lt;br /&gt;
=== 9) Google Presentations ease-of-use ===&lt;br /&gt;
For documentation of the machines, the build manuals, we would like to have the same ease-of-use as Google Presentations offers.&lt;br /&gt;
&lt;br /&gt;
=== 10) Automatic indexing ===&lt;br /&gt;
For the machines, the modules that are part of the machines it would be helpful if there were some form of automatic indexing.  Essentially, it would be good to have more structure on the wiki.&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
If one agrees that an important objective of OSE is to produce documentation for building machines of the GVCS, then we can look at other fields that deal with structured information.  In that case it makes sense to look at software engineering that already has a significant open-source initiative.&lt;br /&gt;
&lt;br /&gt;
=== Semantic versioning ===&lt;br /&gt;
Typically, [https://semver.org/ semantic versioning] is used in the field of software engineering.  With semantic versioning, a version number has three numbers, for example 2.3.4.  With these three numbers one can convey how big a change is.  For example from 2.x.x to 3.0.0 is a major change, from 2.3.x to 2.4.0 is a minor change, for example changing a z-sensor on a 3D-printer.  A change from 2.3.4 to 2.3.5 is a very minor change, typically to solve a problem.  An example is to replace an axis-stop with a new version that works better than the previous version.&lt;br /&gt;
&lt;br /&gt;
This scheme is most dominant in software engineering and it may be wise to learn from it and adopt it.  This would satisfy requirement 4.&lt;br /&gt;
&lt;br /&gt;
 In addition to semantic versioning, which is linear, we also have to think about accommodating &amp;quot;alternatives/options/configurations&amp;quot;. For example, the &amp;quot;same&amp;quot; printer has different components for power supply depending on the region (e.g., US has a US-plug and GFCI, most of Europe has a Europlug, etc.). Printer versions have gone back and forth between 2-pin/3-pin endstops, but it may make sense to have both configurations as user-selectable option (and depending on the choice a matching firmware configuration is needed).&lt;br /&gt;
&lt;br /&gt;
=== Distributed versioning systems ===&lt;br /&gt;
Software engineering projecs typically use dedicated versioning systems.  There are centralized versioning systems such as the old [https://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and the still used [https://en.wikipedia.org/wiki/Apache_Subversion SVN].  In these systems committing a change to the software registers the change on a central CVS or SVN server.  This is not ideal for open source projects because if an open source project becomes less popular and someone decides to turn off the server, all version history is gone.&lt;br /&gt;
&lt;br /&gt;
Therefore, more popular today are distributed versioning systems such as [https://en.wikipedia.org/wiki/Mercurial Mercurial] or [https://en.wikipedia.org/wiki/Git Git].  Especially Git is very popular.  Distributed versioning systems work in a different way.  Each user &amp;quot;clones&amp;quot; or receives a copy of the complete version history of the project.  If a centralized repository is discontinued, any user can reignite the project.  In addition, committing changes and registering these changes to a repository is decoupled.&lt;br /&gt;
&lt;br /&gt;
An extra feature of for example git is submodules.  A submodule is a Git repository inside a Git repository.  The parent repository keeps track of a specific commit of a child repository.  This mechanism can help us to keep track of modules, for example, version 1.0.0 of the D3D-Universal uses version 0.8.2 of the Universal Axis.  Version 1.5.0 of the D3D-Universal however has changed to version 1.0.2 of the Universal Axis.&lt;br /&gt;
&lt;br /&gt;
Git repositories typically have a &#039;&#039;master&#039;&#039; &amp;quot;branch&amp;quot;, where a branch can be considered a chain of &#039;&#039;commits&#039;&#039;.  A commit is a change in the repository made by a user, for example fixing a typo, update a version number, or big changes such as removing many files.  Many people can collaborate on a project by creating their own branch, for example &#039;add-second-z-axis&#039;, or &#039;fix-z-sensor-problem&#039;.  The people working on these branches commit in these branches and at some point they are ready and want to merge their branch into the master branch.  This is essentially updating the master branch to add the new feature.  The merge itself is also considered a commit.  For example if both &#039;add-second-z-axis&#039; and &#039;fix-z-sensor-problem&#039; are ready and merged into master, the team could decide that this could become a new version.  They can then &#039;tag&#039; the current commit with the version number, for example &#039;v1.3.0&#039;.&lt;br /&gt;
&lt;br /&gt;
 It seems using Git would also require some kind of (more or less) formalized process/workflow that spells out who can do what changes. Git is workflow-agnostic (a mixed blessing) and there are [https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows reference workflows] that could be used or adapted. (For example, FreeCAD uses the [https://wiki.freecadweb.org/Source_code_management &amp;quot;dictator and lieutenants workflow&amp;quot;].)&lt;br /&gt;
&lt;br /&gt;
The benefit of Git is that people can collaborate in a structured way, it supports semantic versioning.  The repositories are decentralized which means that losing the history of a project is unlikely.  Adopting Git would satisfy requirements 6.  It would help requirement 3 and 4.  However, it may be a disruptive change opposing requirement 1.&lt;br /&gt;
&lt;br /&gt;
=== Lifetime releases ===&lt;br /&gt;
There are multiple ways to satisfy requirement 5, lifetime releases.  First, proper versioning (requirement 4) has to be established.  One way to create releases for eternity is by using [https://zenodo.org/ Zenodo].  Zenodo is a project by CERN with funding from the European Union.  It is a data repository using the infrastructure of the Large Hadron Collider.  It allows you to take a snapshot of a Git repository and associate a unique [https://en.wikipedia.org/wiki/Digital_object_identifier DOI] to it.  This basically ensures that releases will be around for eternity.&lt;br /&gt;
&lt;br /&gt;
Another solution is to use the [https://ipfs.io/ InterPlanetary File System] where we can store and possibly &#039;pin&#039; versions for eternity.  This relies on having multiple copies of the versions hosted by different nodes in the network.&lt;br /&gt;
&lt;br /&gt;
=== Generating wiki pages ===&lt;br /&gt;
As the benefit of the wiki is clear, we need some way of bringing all of the above together.  A proposal is to move serious development of the machines to a dedicated Git repository, for example &#039;univeral-axis&#039; and &#039;d3d-universal&#039;.  The Git repositories contain a LICENSE file, a README, a CONTRIBUTING, a Changelog file, a VERSION file, and a Makefile, just as in a open-source software project.  The README explains how the repository works, for what machine the repository is, etc.  The CONTRIBUTING file defines a set of guidelines to aid users in contributing content.  The Makefile is essentially a script that keeps track of dependencies between files and &#039;builds&#039; the project, we will come back to this later.  The other files are self-explanatory.&lt;br /&gt;
&lt;br /&gt;
The main content of the repository consists of documentation in textual format together with the CAD files of the project.  With all this content we can &#039;build&#039; the project which means in this situation that we generate documents for the machines.  An example would be to &#039;make&#039; the build manual or &#039;make&#039; the wiki page of the project, or &#039;make&#039; the BOM.  The make script would ideally automatically generate images from the CAD files to be used in the documents that this project generates. (This seems feasible for FreeCAD [[https://wiki.freecadweb.org/Std_ViewScreenShot]], since it can be scripted and run headless.)&lt;br /&gt;
&lt;br /&gt;
As such, we can generate a wiki page and add that to the wiki ensuring that the information on the wiki remains consistent.  We could also automatically create an index for the wiki for several of these project, satisfying requirement 10.&lt;br /&gt;
&lt;br /&gt;
Ideally, we could even try to support to automatically incorporate editing actions on the wiki page back into the git repository to make sure that regular users can still contribute in a user-friendly way. (This can be seen as a form of [https://en.wikipedia.org/wiki/Round-trip_engineering round-trip engineering].)&lt;br /&gt;
&lt;br /&gt;
Unfortunately, all of this, does not fully satisfy requirement 1.  However, the benefits may outweigh the change.  It does satisfy requirement 2 and because of the decentralized nature of Git repositories it satisfies requirement 3.  Git is an extremely powerful tool but therefore also difficult to use.  However, the basic required commands are easy to use and learn with proper documentation and tutorials.  Therefore, the overall ease of use is diminished (requirement 9).&lt;br /&gt;
&lt;br /&gt;
=== Textual format ===&lt;br /&gt;
To make this all work, it would be ideal if most of the content in the repository is textual since it helps keeping track of changes easily.  Binary files increase the size of the repository (every new commit with a binary file increases the size of the repository with the size of the file) and it is impossible to see what change was made.  Unfortunately FreeCAD files are also binary, but because it is essentially a ZIP file, we could make Git a bit smarter to allow proper versioning on these files as well.&lt;br /&gt;
&lt;br /&gt;
To satisfy requirement 7, moving away from Google while maintaining the same ease-of-use (requirement 9) together with supporting a textual format (requirement 8) is an open question.  One could think of using the [https://en.wikipedia.org/wiki/Markdown Markdown] format in combination with [https://pandoc.org/ Pandoc] to convert it to various other formats.  Another option is [https://orgmode.org/ Org mode] that has excellent integration with the [https://www.gnu.org/software/emacs/ Emacs] editor.&lt;br /&gt;
&lt;br /&gt;
=== Mirror the OSE Wiki ===&lt;br /&gt;
To satisfy requirement 3, one may mirror the OSE wiki on separate server or an ipfs. Then, if the main OSE wiki went offline, it could be reignited.&lt;br /&gt;
&lt;br /&gt;
== Concrete Steps ==&lt;br /&gt;
A proposal is to investigate all of this as part of the STEAM Camp Hamburg.  A good use case is to apply the above methodology to the D3D-Univeral.  After this experiment, we can evaluate this methodology compared to the current workflow.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Useful Links=&lt;br /&gt;
*[https://www.youtube.com/watch?v=gShRBsahzXg A Youtube Video on USB&#039;s Recent Failure at Naming Standards Reflecting Change, and Making Sense]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222271</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222271"/>
		<updated>2020-05-25T15:51:10Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Problem definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime - potentially &amp;quot;indefinite&amp;quot;.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a relatively low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* relative ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
Although we list qualities here, these qualities are debatable. For example, the wiki&#039;s ease of use is relative and highly depends on the user&#039;s prior experience with editing wikis. For example, since editing and viewing the rendered results requires extra clicks, the workflow is not ideal. Embedding of external resources is brittle and requires copy-and-pasting of HTML-snippets (and the rendering of these external links depends on the browser&#039;s privacy settings).&lt;br /&gt;
In addition, although Google Presentations are indeed easy-to-use, keeping formatting consistent can be challenging and time-consuming.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name deficiencies.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is on a per-page basis and not really meant for versioning. (It is rather a mechanism to make and compare snap-shots.)  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example. Furthermore, there is no mechanism to add in-place comments (and comment on comments), which seems desirable for a collaborative workflow and resolving merge conflicts in the wiki is not intuitive.&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
It is debatable to what degree vendor lock-in is still acceptable as there are also examples without much reliance on a particular cloud service. For example, using GitHub may be acceptable if the repository is mirrored in some form. GitHub&#039;s issue tracker may be leveraged because it gives out-of-the-box, user-friendly functionality, but with the understanding that it may go away any time (e.g., because of DMCA take-down.)&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Based on the current qualities and problems we can define a set of requirements:&lt;br /&gt;
&lt;br /&gt;
=== 1) No major change in the status quo ===&lt;br /&gt;
The current way of working with the wiki has obvious benefits.  Changing the way OSE works in a major way is likely to be unnecessary and a whole community has to make a big change.&lt;br /&gt;
&lt;br /&gt;
=== 2) Keep the wiki as a central point ===&lt;br /&gt;
The wiki is a proven technology with a low entrance threshold.  It brings a community together in a central place.  However, central points have drawbacks, certainly in an open-source project.&lt;br /&gt;
&lt;br /&gt;
=== 3) Do not rely on the wiki as a central point ===&lt;br /&gt;
The danger of a central point is that if the wiki goes offline, lots of very interesting information, a legacy, will be lost.  It may be possible to protect for this.&lt;br /&gt;
&#039;&#039;&#039;Can we download, and backup ALL of the wiki or parts, like one can with wikipedia? Magnetic Tape Cartriges, or archival optical disks are cheap/tb and can last for a long time, two of thos physical in seperate places, and a cloud, and we should be good? (plus frequent backups).  Also any way to trigger a wayback machine &amp;quot;copy&amp;quot; ? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 4) Apply proper versioning ===&lt;br /&gt;
A good approach would be to apply versioning in such a way that a version change reflects the severity of the change.&lt;br /&gt;
&lt;br /&gt;
=== 5) Lifetime releases ===&lt;br /&gt;
True consolidation of versions in the form of releases (releases of the documentation) that will never be lost and available for eternity or at least for the lifetime of the machine.&lt;br /&gt;
&lt;br /&gt;
=== 6) Versioning supporting modularity ===&lt;br /&gt;
The GVCS machines are highly modular.  There should be a proper system in place that can keep track of the various version numbers of the sub-releases.&lt;br /&gt;
&lt;br /&gt;
=== 7) No reliance on proprietary cloud services ===&lt;br /&gt;
For an open project as OSE, it would be preferable not to rely on proprietary software, also not on cloud services.&lt;br /&gt;
&lt;br /&gt;
=== 8) Support textual format as much as possible ===&lt;br /&gt;
Proper versioning works best with textual formats.  For versioning in binary formats one needs support from the application that produces the binary format, whereas versioning on textual formats can be done with any tool.  This means that versioning becomes universal.&lt;br /&gt;
&lt;br /&gt;
=== 9) Google Presentations ease-of-use ===&lt;br /&gt;
For documentation of the machines, the build manuals, we would like to have the same ease-of-use as Google Presentations offers.&lt;br /&gt;
&lt;br /&gt;
=== 10) Automatic indexing ===&lt;br /&gt;
For the machines, the modules that are part of the machines it would be helpful if there were some form of automatic indexing.  Essentially, it would be good to have more structure on the wiki.&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
If one agrees that an important objective of OSE is to produce documentation for building machines of the GVCS, then we can look at other fields that deal with structured information.  In that case it makes sense to look at software engineering that already has a significant open-source initiative.&lt;br /&gt;
&lt;br /&gt;
=== Semantic versioning ===&lt;br /&gt;
Typically, [https://semver.org/ semantic versioning] is used in the field of software engineering.  With semantic versioning, a version number has three numbers, for example 2.3.4.  With these three numbers one can convey how big a change is.  For example from 2.x.x to 3.0.0 is a major change, from 2.3.x to 2.4.0 is a minor change, for example changing a z-sensor on a 3D-printer.  A change from 2.3.4 to 2.3.5 is a very minor change, typically to solve a problem.  An example is to replace an axis-stop with a new version that works better than the previous version.&lt;br /&gt;
&lt;br /&gt;
This scheme is most dominant in software engineering and it may be wise to learn from it and adopt it.  This would satisfy requirement 4.&lt;br /&gt;
&lt;br /&gt;
 In addition to semantic versioning, which is linear, we also have to think about accommodating &amp;quot;alternatives/options/configurations&amp;quot;. For example, the &amp;quot;same&amp;quot; printer has different components for power supply depending on the region (e.g., US has a US-plug and GFCI, most of Europe has a Europlug, etc.). Printer versions have gone back and forth between 2-pin/3-pin endstops, but it may make sense to have both configurations as user-selectable option (and depending on the choice a matching firmware configuration is needed).&lt;br /&gt;
&lt;br /&gt;
=== Distributed versioning systems ===&lt;br /&gt;
Software engineering projecs typically use dedicated versioning systems.  There are centralized versioning systems such as the old [https://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and the still used [https://en.wikipedia.org/wiki/Apache_Subversion SVN].  In these systems committing a change to the software registers the change on a central CVS or SVN server.  This is not ideal for open source projects because if an open source project becomes less popular and someone decides to turn off the server, all version history is gone.&lt;br /&gt;
&lt;br /&gt;
Therefore, more popular today are distributed versioning systems such as [https://en.wikipedia.org/wiki/Mercurial Mercurial] or [https://en.wikipedia.org/wiki/Git Git].  Especially Git is very popular.  Distributed versioning systems work in a different way.  Each user &amp;quot;clones&amp;quot; or receives a copy of the complete version history of the project.  If a centralized repository is discontinued, any user can reignite the project.  In addition, committing changes and registering these changes to a repository is decoupled.&lt;br /&gt;
&lt;br /&gt;
An extra feature of for example git is submodules.  A submodule is a Git repository inside a Git repository.  The parent repository keeps track of a specific commit of a child repository.  This mechanism can help us to keep track of modules, for example, version 1.0.0 of the D3D-Universal uses version 0.8.2 of the Universal Axis.  Version 1.5.0 of the D3D-Universal however has changed to version 1.0.2 of the Universal Axis.&lt;br /&gt;
&lt;br /&gt;
Git repositories typically have a &#039;&#039;master&#039;&#039; &amp;quot;branch&amp;quot;, where a branch can be considered a chain of &#039;&#039;commits&#039;&#039;.  A commit is a change in the repository made by a user, for example fixing a typo, update a version number, or big changes such as removing many files.  Many people can collaborate on a project by creating their own branch, for example &#039;add-second-z-axis&#039;, or &#039;fix-z-sensor-problem&#039;.  The people working on these branches commit in these branches and at some point they are ready and want to merge their branch into the master branch.  This is essentially updating the master branch to add the new feature.  The merge itself is also considered a commit.  For example if both &#039;add-second-z-axis&#039; and &#039;fix-z-sensor-problem&#039; are ready and merged into master, the team could decide that this could become a new version.  They can then &#039;tag&#039; the current commit with the version number, for example &#039;v1.3.0&#039;.&lt;br /&gt;
&lt;br /&gt;
 It seems using Git would also require some kind of (more or less) formalized process/workflow that spells out who can do what changes. Git is workflow-agnostic (a mixed blessing) and there are [https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows reference workflows] that could be used or adapted. (For example, FreeCAD uses the [https://wiki.freecadweb.org/Source_code_management &amp;quot;dictator and lieutenants workflow&amp;quot;].)&lt;br /&gt;
&lt;br /&gt;
The benefit of Git is that people can collaborate in a structured way, it supports semantic versioning.  The repositories are decentralized which means that losing the history of a project is unlikely.  Adopting Git would satisfy requirements 6.  It would help requirement 3 and 4.  However, it may be a disruptive change opposing requirement 1.&lt;br /&gt;
&lt;br /&gt;
=== Lifetime releases ===&lt;br /&gt;
There are multiple ways to satisfy requirement 5, lifetime releases.  First, proper versioning (requirement 4) has to be established.  One way to create releases for eternity is by using [https://zenodo.org/ Zenodo].  Zenodo is a project by CERN with funding from the European Union.  It is a data repository using the infrastructure of the Large Hadron Collider.  It allows you to take a snapshot of a Git repository and associate a unique [https://en.wikipedia.org/wiki/Digital_object_identifier DOI] to it.  This basically ensures that releases will be around for eternity.&lt;br /&gt;
&lt;br /&gt;
Another solution is to use the [https://ipfs.io/ InterPlanetary File System] where we can store and possibly &#039;pin&#039; versions for eternity.  This relies on having multiple copies of the versions hosted by different nodes in the network.&lt;br /&gt;
&lt;br /&gt;
=== Generating wiki pages ===&lt;br /&gt;
As the benefit of the wiki is clear, we need some way of bringing all of the above together.  A proposal is to move serious development of the machines to a dedicated Git repository, for example &#039;univeral-axis&#039; and &#039;d3d-universal&#039;.  The Git repositories contain a LICENSE file, a README, a CONTRIBUTING, a Changelog file, a VERSION file, and a Makefile, just as in a open-source software project.  The README explains how the repository works, for what machine the repository is, etc.  The CONTRIBUTING file defines a set of guidelines to aid users in contributing content.  The Makefile is essentially a script that keeps track of dependencies between files and &#039;builds&#039; the project, we will come back to this later.  The other files are self-explanatory.&lt;br /&gt;
&lt;br /&gt;
The main content of the repository consists of documentation in textual format together with the CAD files of the project.  With all this content we can &#039;build&#039; the project which means in this situation that we generate documents for the machines.  An example would be to &#039;make&#039; the build manual or &#039;make&#039; the wiki page of the project, or &#039;make&#039; the BOM.  The make script would ideally automatically generate images from the CAD files to be used in the documents that this project generates. (This seems feasible for FreeCAD [[https://wiki.freecadweb.org/Std_ViewScreenShot]], since it can be scripted and run headless.)&lt;br /&gt;
&lt;br /&gt;
As such, we can generate a wiki page and add that to the wiki ensuring that the information on the wiki remains consistent.  We could also automatically create an index for the wiki for several of these project, satisfying requirement 10.&lt;br /&gt;
&lt;br /&gt;
Ideally, we could even try to support to automatically incorporate editing actions on the wiki page back into the git repository to make sure that regular users can still contribute in a user-friendly way. (This can be seen as a form of [https://en.wikipedia.org/wiki/Round-trip_engineering round-trip engineering].)&lt;br /&gt;
&lt;br /&gt;
Unfortunately, all of this, does not fully satisfy requirement 1.  However, the benefits may outweigh the change.  It does satisfy requirement 2 and because of the decentralized nature of Git repositories it satisfies requirement 3.  Git is an extremely powerful tool but therefore also difficult to use.  However, the basic required commands are easy to use and learn with proper documentation and tutorials.  Therefore, the overall ease of use is diminished (requirement 9).&lt;br /&gt;
&lt;br /&gt;
=== Textual format ===&lt;br /&gt;
To make this all work, it would be ideal if most of the content in the repository is textual since it helps keeping track of changes easily.  Binary files increase the size of the repository (every new commit with a binary file increases the size of the repository with the size of the file) and it is impossible to see what change was made.  Unfortunately FreeCAD files are also binary, but because it is essentially a ZIP file, we could make Git a bit smarter to allow proper versioning on these files as well.&lt;br /&gt;
&lt;br /&gt;
To satisfy requirement 7, moving away from Google while maintaining the same ease-of-use (requirement 9) together with supporting a textual format (requirement 8) is an open question.  One could think of using the [https://en.wikipedia.org/wiki/Markdown Markdown] format in combination with [https://pandoc.org/ Pandoc] to convert it to various other formats.  Another option is [https://orgmode.org/ Org mode] that has excellent integration with the [https://www.gnu.org/software/emacs/ Emacs] editor.&lt;br /&gt;
&lt;br /&gt;
=== Mirror the OSE Wiki ===&lt;br /&gt;
To satisfy requirement 3, one may mirror the OSE wiki on separate server or an ipfs. Then, if the main OSE wiki went offline, it could be reignited.&lt;br /&gt;
&lt;br /&gt;
== Concrete Steps ==&lt;br /&gt;
A proposal is to investigate all of this as part of the STEAM Camp Hamburg.  A good use case is to apply the above methodology to the D3D-Univeral.  After this experiment, we can evaluate this methodology compared to the current workflow.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Useful Links=&lt;br /&gt;
*[https://www.youtube.com/watch?v=gShRBsahzXg A Youtube Video on USB&#039;s Recent Failure at Naming Standards Reflecting Change, and Making Sense]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222267</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=222267"/>
		<updated>2020-05-25T15:45:53Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Qualities of the current situation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime - potentially &amp;quot;indefinite&amp;quot;.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a relatively low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* relative ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
Although we list qualities here, these qualities are debatable. For example, the wiki&#039;s ease of use is relative and highly depends on the user&#039;s prior experience with editing wikis. For example, since editing and viewing the rendered results requires extra clicks, the workflow is not ideal. Embedding of external resources is brittle and requires copy-and-pasting of HTML-snippets (and the rendering of these external links depends on the browser&#039;s privacy settings).&lt;br /&gt;
In addition, although Google Presentations are indeed easy-to-use, keeping formatting consistent can be challenging and time-consuming.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name deficiencies.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is on a per-page basis and not really meant for versioning. (It is rather a mechanism to make and compare snap-shots.)  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example.&lt;br /&gt;
&lt;br /&gt;
 Furthermore, there is no mechanism to add in-place comments (and comment on comments), which seems desirable for a collaborative workflow.&lt;br /&gt;
&lt;br /&gt;
 Resolving merge conflicts in the wiki is not intuitive and seems a nightmare!!&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
 More generally speaking, it may be useful to evaluate what degree of vendor lock-in in still acceptable. For example, using GitHub may be acceptable if the repository is mirrored in some form. GitHub&#039;s issue tracker may be leveraged because it gives out-of-the-box, user-friendly functionality, but with the understanding that it may go away any time (e.g., because of DMCA take-down.)&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Based on the current qualities and problems we can define a set of requirements:&lt;br /&gt;
&lt;br /&gt;
=== 1) No major change in the status quo ===&lt;br /&gt;
The current way of working with the wiki has obvious benefits.  Changing the way OSE works in a major way is likely to be unnecessary and a whole community has to make a big change.&lt;br /&gt;
&lt;br /&gt;
=== 2) Keep the wiki as a central point ===&lt;br /&gt;
The wiki is a proven technology with a low entrance threshold.  It brings a community together in a central place.  However, central points have drawbacks, certainly in an open-source project.&lt;br /&gt;
&lt;br /&gt;
=== 3) Do not rely on the wiki as a central point ===&lt;br /&gt;
The danger of a central point is that if the wiki goes offline, lots of very interesting information, a legacy, will be lost.  It may be possible to protect for this.&lt;br /&gt;
&#039;&#039;&#039;Can we download, and backup ALL of the wiki or parts, like one can with wikipedia? Magnetic Tape Cartriges, or archival optical disks are cheap/tb and can last for a long time, two of thos physical in seperate places, and a cloud, and we should be good? (plus frequent backups).  Also any way to trigger a wayback machine &amp;quot;copy&amp;quot; ? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 4) Apply proper versioning ===&lt;br /&gt;
A good approach would be to apply versioning in such a way that a version change reflects the severity of the change.&lt;br /&gt;
&lt;br /&gt;
=== 5) Lifetime releases ===&lt;br /&gt;
True consolidation of versions in the form of releases (releases of the documentation) that will never be lost and available for eternity or at least for the lifetime of the machine.&lt;br /&gt;
&lt;br /&gt;
=== 6) Versioning supporting modularity ===&lt;br /&gt;
The GVCS machines are highly modular.  There should be a proper system in place that can keep track of the various version numbers of the sub-releases.&lt;br /&gt;
&lt;br /&gt;
=== 7) No reliance on proprietary cloud services ===&lt;br /&gt;
For an open project as OSE, it would be preferable not to rely on proprietary software, also not on cloud services.&lt;br /&gt;
&lt;br /&gt;
=== 8) Support textual format as much as possible ===&lt;br /&gt;
Proper versioning works best with textual formats.  For versioning in binary formats one needs support from the application that produces the binary format, whereas versioning on textual formats can be done with any tool.  This means that versioning becomes universal.&lt;br /&gt;
&lt;br /&gt;
=== 9) Google Presentations ease-of-use ===&lt;br /&gt;
For documentation of the machines, the build manuals, we would like to have the same ease-of-use as Google Presentations offers.&lt;br /&gt;
&lt;br /&gt;
=== 10) Automatic indexing ===&lt;br /&gt;
For the machines, the modules that are part of the machines it would be helpful if there were some form of automatic indexing.  Essentially, it would be good to have more structure on the wiki.&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
If one agrees that an important objective of OSE is to produce documentation for building machines of the GVCS, then we can look at other fields that deal with structured information.  In that case it makes sense to look at software engineering that already has a significant open-source initiative.&lt;br /&gt;
&lt;br /&gt;
=== Semantic versioning ===&lt;br /&gt;
Typically, [https://semver.org/ semantic versioning] is used in the field of software engineering.  With semantic versioning, a version number has three numbers, for example 2.3.4.  With these three numbers one can convey how big a change is.  For example from 2.x.x to 3.0.0 is a major change, from 2.3.x to 2.4.0 is a minor change, for example changing a z-sensor on a 3D-printer.  A change from 2.3.4 to 2.3.5 is a very minor change, typically to solve a problem.  An example is to replace an axis-stop with a new version that works better than the previous version.&lt;br /&gt;
&lt;br /&gt;
This scheme is most dominant in software engineering and it may be wise to learn from it and adopt it.  This would satisfy requirement 4.&lt;br /&gt;
&lt;br /&gt;
 In addition to semantic versioning, which is linear, we also have to think about accommodating &amp;quot;alternatives/options/configurations&amp;quot;. For example, the &amp;quot;same&amp;quot; printer has different components for power supply depending on the region (e.g., US has a US-plug and GFCI, most of Europe has a Europlug, etc.). Printer versions have gone back and forth between 2-pin/3-pin endstops, but it may make sense to have both configurations as user-selectable option (and depending on the choice a matching firmware configuration is needed).&lt;br /&gt;
&lt;br /&gt;
=== Distributed versioning systems ===&lt;br /&gt;
Software engineering projecs typically use dedicated versioning systems.  There are centralized versioning systems such as the old [https://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and the still used [https://en.wikipedia.org/wiki/Apache_Subversion SVN].  In these systems committing a change to the software registers the change on a central CVS or SVN server.  This is not ideal for open source projects because if an open source project becomes less popular and someone decides to turn off the server, all version history is gone.&lt;br /&gt;
&lt;br /&gt;
Therefore, more popular today are distributed versioning systems such as [https://en.wikipedia.org/wiki/Mercurial Mercurial] or [https://en.wikipedia.org/wiki/Git Git].  Especially Git is very popular.  Distributed versioning systems work in a different way.  Each user &amp;quot;clones&amp;quot; or receives a copy of the complete version history of the project.  If a centralized repository is discontinued, any user can reignite the project.  In addition, committing changes and registering these changes to a repository is decoupled.&lt;br /&gt;
&lt;br /&gt;
An extra feature of for example git is submodules.  A submodule is a Git repository inside a Git repository.  The parent repository keeps track of a specific commit of a child repository.  This mechanism can help us to keep track of modules, for example, version 1.0.0 of the D3D-Universal uses version 0.8.2 of the Universal Axis.  Version 1.5.0 of the D3D-Universal however has changed to version 1.0.2 of the Universal Axis.&lt;br /&gt;
&lt;br /&gt;
Git repositories typically have a &#039;&#039;master&#039;&#039; &amp;quot;branch&amp;quot;, where a branch can be considered a chain of &#039;&#039;commits&#039;&#039;.  A commit is a change in the repository made by a user, for example fixing a typo, update a version number, or big changes such as removing many files.  Many people can collaborate on a project by creating their own branch, for example &#039;add-second-z-axis&#039;, or &#039;fix-z-sensor-problem&#039;.  The people working on these branches commit in these branches and at some point they are ready and want to merge their branch into the master branch.  This is essentially updating the master branch to add the new feature.  The merge itself is also considered a commit.  For example if both &#039;add-second-z-axis&#039; and &#039;fix-z-sensor-problem&#039; are ready and merged into master, the team could decide that this could become a new version.  They can then &#039;tag&#039; the current commit with the version number, for example &#039;v1.3.0&#039;.&lt;br /&gt;
&lt;br /&gt;
 It seems using Git would also require some kind of (more or less) formalized process/workflow that spells out who can do what changes. Git is workflow-agnostic (a mixed blessing) and there are [https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows reference workflows] that could be used or adapted. (For example, FreeCAD uses the [https://wiki.freecadweb.org/Source_code_management &amp;quot;dictator and lieutenants workflow&amp;quot;].)&lt;br /&gt;
&lt;br /&gt;
The benefit of Git is that people can collaborate in a structured way, it supports semantic versioning.  The repositories are decentralized which means that losing the history of a project is unlikely.  Adopting Git would satisfy requirements 6.  It would help requirement 3 and 4.  However, it may be a disruptive change opposing requirement 1.&lt;br /&gt;
&lt;br /&gt;
=== Lifetime releases ===&lt;br /&gt;
There are multiple ways to satisfy requirement 5, lifetime releases.  First, proper versioning (requirement 4) has to be established.  One way to create releases for eternity is by using [https://zenodo.org/ Zenodo].  Zenodo is a project by CERN with funding from the European Union.  It is a data repository using the infrastructure of the Large Hadron Collider.  It allows you to take a snapshot of a Git repository and associate a unique [https://en.wikipedia.org/wiki/Digital_object_identifier DOI] to it.  This basically ensures that releases will be around for eternity.&lt;br /&gt;
&lt;br /&gt;
Another solution is to use the [https://ipfs.io/ InterPlanetary File System] where we can store and possibly &#039;pin&#039; versions for eternity.  This relies on having multiple copies of the versions hosted by different nodes in the network.&lt;br /&gt;
&lt;br /&gt;
=== Generating wiki pages ===&lt;br /&gt;
As the benefit of the wiki is clear, we need some way of bringing all of the above together.  A proposal is to move serious development of the machines to a dedicated Git repository, for example &#039;univeral-axis&#039; and &#039;d3d-universal&#039;.  The Git repositories contain a LICENSE file, a README, a CONTRIBUTING, a Changelog file, a VERSION file, and a Makefile, just as in a open-source software project.  The README explains how the repository works, for what machine the repository is, etc.  The CONTRIBUTING file defines a set of guidelines to aid users in contributing content.  The Makefile is essentially a script that keeps track of dependencies between files and &#039;builds&#039; the project, we will come back to this later.  The other files are self-explanatory.&lt;br /&gt;
&lt;br /&gt;
The main content of the repository consists of documentation in textual format together with the CAD files of the project.  With all this content we can &#039;build&#039; the project which means in this situation that we generate documents for the machines.  An example would be to &#039;make&#039; the build manual or &#039;make&#039; the wiki page of the project, or &#039;make&#039; the BOM.  The make script would ideally automatically generate images from the CAD files to be used in the documents that this project generates. (This seems feasible for FreeCAD [[https://wiki.freecadweb.org/Std_ViewScreenShot]], since it can be scripted and run headless.)&lt;br /&gt;
&lt;br /&gt;
As such, we can generate a wiki page and add that to the wiki ensuring that the information on the wiki remains consistent.  We could also automatically create an index for the wiki for several of these project, satisfying requirement 10.&lt;br /&gt;
&lt;br /&gt;
Ideally, we could even try to support to automatically incorporate editing actions on the wiki page back into the git repository to make sure that regular users can still contribute in a user-friendly way. (This can be seen as a form of [https://en.wikipedia.org/wiki/Round-trip_engineering round-trip engineering].)&lt;br /&gt;
&lt;br /&gt;
Unfortunately, all of this, does not fully satisfy requirement 1.  However, the benefits may outweigh the change.  It does satisfy requirement 2 and because of the decentralized nature of Git repositories it satisfies requirement 3.  Git is an extremely powerful tool but therefore also difficult to use.  However, the basic required commands are easy to use and learn with proper documentation and tutorials.  Therefore, the overall ease of use is diminished (requirement 9).&lt;br /&gt;
&lt;br /&gt;
=== Textual format ===&lt;br /&gt;
To make this all work, it would be ideal if most of the content in the repository is textual since it helps keeping track of changes easily.  Binary files increase the size of the repository (every new commit with a binary file increases the size of the repository with the size of the file) and it is impossible to see what change was made.  Unfortunately FreeCAD files are also binary, but because it is essentially a ZIP file, we could make Git a bit smarter to allow proper versioning on these files as well.&lt;br /&gt;
&lt;br /&gt;
To satisfy requirement 7, moving away from Google while maintaining the same ease-of-use (requirement 9) together with supporting a textual format (requirement 8) is an open question.  One could think of using the [https://en.wikipedia.org/wiki/Markdown Markdown] format in combination with [https://pandoc.org/ Pandoc] to convert it to various other formats.  Another option is [https://orgmode.org/ Org mode] that has excellent integration with the [https://www.gnu.org/software/emacs/ Emacs] editor.&lt;br /&gt;
&lt;br /&gt;
=== Mirror the OSE Wiki ===&lt;br /&gt;
To satisfy requirement 3, one may mirror the OSE wiki on separate server or an ipfs. Then, if the main OSE wiki went offline, it could be reignited.&lt;br /&gt;
&lt;br /&gt;
== Concrete Steps ==&lt;br /&gt;
A proposal is to investigate all of this as part of the STEAM Camp Hamburg.  A good use case is to apply the above methodology to the D3D-Univeral.  After this experiment, we can evaluate this methodology compared to the current workflow.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=Useful Links=&lt;br /&gt;
*[https://www.youtube.com/watch?v=gShRBsahzXg A Youtube Video on USB&#039;s Recent Failure at Naming Standards Reflecting Change, and Making Sense]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=217840</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=217840"/>
		<updated>2020-04-19T11:05:28Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 19 April 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
&lt;br /&gt;
= Sunday 19 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added a proposal for [[Semantic Versioning]].&lt;br /&gt;
&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217838</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217838"/>
		<updated>2020-04-19T10:56:05Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Proposal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name problems.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is not really meant for versioning.  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example.&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Based on the current qualities and problems we can define a set of requirements:&lt;br /&gt;
&lt;br /&gt;
=== 1) No major change in the status quo ===&lt;br /&gt;
The current way of working with the wiki has obvious benefits.  Changing the way OSE works in a major way is likely to be unnecessary and a whole community has to make a big change.&lt;br /&gt;
&lt;br /&gt;
=== 2) Keep the wiki as a central point ===&lt;br /&gt;
The wiki is a proven technology with a low entrance threshold.  It brings a community together in a central place.  However, central points have drawbacks, certainly in an open-source project.&lt;br /&gt;
&lt;br /&gt;
=== 3) Do not rely on the wiki as a central point ===&lt;br /&gt;
The danger of a central point is that if the wiki goes offline, lots of very interesting information, a legacy, will be lost.  It may be possible to protect for this.&lt;br /&gt;
&lt;br /&gt;
=== 4) Apply proper versioning ===&lt;br /&gt;
A good approach would be to apply versioning in such a way that a version change reflects the severity of the change.&lt;br /&gt;
&lt;br /&gt;
=== 5) Lifetime releases ===&lt;br /&gt;
True consolidation of versions in the form of releases (releases of the documentation) that will never be lost and available for eternity or at least for the lifetime of the machine.&lt;br /&gt;
&lt;br /&gt;
=== 6) Versioning supporting modularity ===&lt;br /&gt;
The GVCS machines are highly modular.  There should be a proper system in place that can keep track of the various version numbers of the sub-releases.&lt;br /&gt;
&lt;br /&gt;
=== 7) No reliance on proprietary cloud services ===&lt;br /&gt;
For an open project as OSE, it would be preferable not to rely on proprietary software, also not on cloud services.&lt;br /&gt;
&lt;br /&gt;
=== 8) Support textual format as much as possible ===&lt;br /&gt;
Proper versioning works best with textual formats.  For versioning in binary formats one needs support from the application that produces the binary format, whereas versioning on textual formats can be done with any tool.  This means that versioning becomes universal.&lt;br /&gt;
&lt;br /&gt;
=== 9) Google Presentations ease-of-use ===&lt;br /&gt;
For documentation of the machines, the build manuals, we would like to have the same ease-of-use as Google Presentations offers.&lt;br /&gt;
&lt;br /&gt;
=== 10) Automatic indexing ===&lt;br /&gt;
For the machines, the modules that are part of the machines it would be helpful if there were some form of automatic indexing.  Essentially, it would be good to have more structure on the wiki.&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
If one agrees that an important objective of OSE is to produce documentation for building machines of the GVCS, then we can look at other fields that deal with structured information.  In that case it makes sense to look at software engineering that already has a significant open-source initiative.&lt;br /&gt;
&lt;br /&gt;
=== Semantic versioning ===&lt;br /&gt;
Typically, [https://semver.org/ semantic versioning] is used in the field of software engineering.  With semantic versioning, a version number has three numbers, for example 2.3.4.  With these three numbers one can convey how big a change is.  For example from 2.x.x to 3.0.0 is a major change, from 2.3.x to 2.4.0 is a minor change, for example changing a z-sensor on a 3D-printer.  A change from 2.3.4 to 2.3.5 is a very minor change, typically to solve a problem.  An example is to replace an axis-stop with a new version that works better than the previous version.&lt;br /&gt;
&lt;br /&gt;
This scheme is most dominant in software engineering and it may be wise to learn from it and adopt it.  This would satisfy requirement 4.&lt;br /&gt;
&lt;br /&gt;
=== Distributed versioning systems ===&lt;br /&gt;
Software engineering projecs typically use dedicated versioning systems.  There are centralized versioning systems such as the old [https://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and the still used [https://en.wikipedia.org/wiki/Apache_Subversion SVN].  In these systems committing a change to the software registers the change on a central CVSor SVN server.  This is not ideal for open source projects because if an open source project becomes less popular and someone decides to turn off the server, all version history is gone.&lt;br /&gt;
&lt;br /&gt;
Therefore, more popular today are distributed versioning systems such as [https://en.wikipedia.org/wiki/Mercurial Mercurial] or [https://en.wikipedia.org/wiki/Git Git].  Especially Git is very popular.  Distributed versioning systems work in a different way.  Each user &amp;quot;clones&amp;quot; or receives a copy of the complete version history of the project.  If a centralized repository is discontinued, any user can reignite the project.  In addition, committing changes and registering these changes to a repository is decoupled.&lt;br /&gt;
&lt;br /&gt;
An extra feature of for example git is submodules.  A submodule is a Git repository inside a Git repository.  The parent repository keeps track of a specific commit of a child repository.  This mechanism can help us to keep track of modules, for example, version 1.0.0 of the D3D-Universal uses version 0.8.2 of the Universal Axis.  Version 1.5.0 of the D3D-Universal however has changed to version 1.0.2 of the Universal Axis.&lt;br /&gt;
&lt;br /&gt;
Git repositories typically have a &#039;&#039;master&#039;&#039; &amp;quot;branch&amp;quot;, where a branch can be considered a chain of &#039;&#039;commits&#039;&#039;.  A commit is a change in the repository made by a user, for example fixing a typo, update a version number, or big changes such as removing many files.  Many people can collaborate on a project by creating their own branch, for example &#039;add-second-z-axis&#039;, or &#039;fix-z-sensor-problem&#039;.  The people working on these branches commit in these branches and at some point they are ready and want to merge their branch into the master branch.  This is essentially updating the master branch to add the new feature.  The merge itself is also considered a commit.  For example if both &#039;add-second-z-axis&#039; and &#039;fix-z-sensor-problem&#039; are ready and merged into master, the team could decide that this could become a new version.  They can then &#039;tag&#039; the current commit with the version number, for example &#039;v1.3.0&#039;.&lt;br /&gt;
&lt;br /&gt;
The benefit of Git is that people can collaborate in a structured way, it supports semantic versioning.  The repositories are decentralized which means that losing the history of a project is unlikely.  Adopting Git would satisfy requirements 6.  It would help requirement 3 and 4.  However, it may be a disruptive change opposing requirement 1.&lt;br /&gt;
&lt;br /&gt;
=== Lifetime releases ===&lt;br /&gt;
There are multiple ways to satisfy requirement 5, lifetime releases.  First, proper versioning (requirement 4) has to be established.  One way to create releases for eternity is by using [https://zenodo.org/ Zenodo].  Zenodo is a project by CERN with funding from the European Union.  It is a data repository using the infrastructure of the Large Hadron Collider.  It allows you to take a snapshot of a Git repository and associate a unique [https://en.wikipedia.org/wiki/Digital_object_identifier DOI] to it.  This basically ensures that releases will be around for eternity.&lt;br /&gt;
&lt;br /&gt;
Another solution is to use the [https://ipfs.io/ InterPlanetary File System] where we can store and possibly &#039;pin&#039; versions for eternity.  This relies on having multiple copies of the versions hosted by different nodes in the network.&lt;br /&gt;
&lt;br /&gt;
=== Generating wiki pages ===&lt;br /&gt;
As the benefit of the wiki is clear, we need some way of bringing all of the above together.  A proposal is to move serious development of the machines to a dedicated Git repository, for example &#039;univeral-axis&#039; and &#039;d3d-universal&#039;.  The Git repositories contain a LICENSE file, a README, a CONTRIBUTING, a Changelog file, a VERSION file, and a Makefile, just as in a open-source software project.  The README explains how the repository works, for what machine the repository is, etc.  The CONTRIBUTING file defines a set of guidelines to aid users in contributing content.  The Makefile is essentially a script that keeps track of dependencies between files and &#039;builds&#039; the project, we will come back to this later.  The other files are self-explanatory.&lt;br /&gt;
&lt;br /&gt;
The main content of the repository consists of documentation in textual format together with the CAD files of the project.  With all this content we can &#039;build&#039; the project which means in this situation that we generate documents for the machines.  An example would be to &#039;make&#039; the build manual or &#039;make&#039; the wiki page of the project, or &#039;make&#039; the BOM.  The make script would ideally automatically generate images from the CAD files to be used in the documents that this project generates.&lt;br /&gt;
&lt;br /&gt;
As such, we can generate a wiki page and add that to the wiki ensuring that the information on the wiki remains consistent.  We could also automatically create an index for the wiki for several of these project, satisfying requirement 10.&lt;br /&gt;
&lt;br /&gt;
Ideally, we could even try to support to automatically incorporate editing actions on the wiki page back into the git repository to make sure that regular users can still contribute in a user-friendly way.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, all of this, does not fully satisfy requirement 1.  However, the benefits may outweigh the change.  It does satisfy requirement 2 and because of the decentralized nature of Git repositories it satisfies requirement 3.  Git is an extremely powerful tool but therefore also difficult to use.  However, the basic required commands are easy to use and learn with proper documentation and tutorials.  Therefore, the overall ease of use is diminished (requirement 9).&lt;br /&gt;
&lt;br /&gt;
=== Textual format ===&lt;br /&gt;
To make this all work, it would be ideal if most of the content in the repository is textual since it helps keeping track of changes easily.  Binary files increase the size of the repository (every new commit with a binary file increases the size of the repository with the size of the file) and it is impossible to see what change was made.  Unfortunately FreeCAD files are also binary, but because it is essentially a ZIP file, we could make Git a bit smarter to allow proper versioning on these files as well.&lt;br /&gt;
&lt;br /&gt;
To satisfy requirement 7, moving away from Google while maintaining the same ease-of-use (requirement 9) together with supporting a textual format (requirement 8) is an open question.  One could think of using the [https://en.wikipedia.org/wiki/Markdown Markdown] format in combination with [https://pandoc.org/ Pandoc] to convert it to various other formats.  Another option is [https://orgmode.org/ Org mode] that has excellent integration with the [https://www.gnu.org/software/emacs/ Emacs] editor.&lt;br /&gt;
&lt;br /&gt;
== Concrete Steps ==&lt;br /&gt;
A proposal is to investigate all of this as part of the STEAM Camp Hamburg.  A good use case is to apply the above methodology to the D3D-Univeral.  After this experiment, we can evaluate this methodology compared to the current workflow.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217836</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217836"/>
		<updated>2020-04-19T10:54:03Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name problems.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is not really meant for versioning.  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example.&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Based on the current qualities and problems we can define a set of requirements:&lt;br /&gt;
&lt;br /&gt;
=== 1) No major change in the status quo ===&lt;br /&gt;
The current way of working with the wiki has obvious benefits.  Changing the way OSE works in a major way is likely to be unnecessary and a whole community has to make a big change.&lt;br /&gt;
&lt;br /&gt;
=== 2) Keep the wiki as a central point ===&lt;br /&gt;
The wiki is a proven technology with a low entrance threshold.  It brings a community together in a central place.  However, central points have drawbacks, certainly in an open-source project.&lt;br /&gt;
&lt;br /&gt;
=== 3) Do not rely on the wiki as a central point ===&lt;br /&gt;
The danger of a central point is that if the wiki goes offline, lots of very interesting information, a legacy, will be lost.  It may be possible to protect for this.&lt;br /&gt;
&lt;br /&gt;
=== 4) Apply proper versioning ===&lt;br /&gt;
A good approach would be to apply versioning in such a way that a version change reflects the severity of the change.&lt;br /&gt;
&lt;br /&gt;
=== 5) Lifetime releases ===&lt;br /&gt;
True consolidation of versions in the form of releases (releases of the documentation) that will never be lost and available for eternity or at least for the lifetime of the machine.&lt;br /&gt;
&lt;br /&gt;
=== 6) Versioning supporting modularity ===&lt;br /&gt;
The GVCS machines are highly modular.  There should be a proper system in place that can keep track of the various version numbers of the sub-releases.&lt;br /&gt;
&lt;br /&gt;
=== 7) No reliance on proprietary cloud services ===&lt;br /&gt;
For an open project as OSE, it would be preferable not to rely on proprietary software, also not on cloud services.&lt;br /&gt;
&lt;br /&gt;
=== 8) Support textual format as much as possible ===&lt;br /&gt;
Proper versioning works best with textual formats.  For versioning in binary formats one needs support from the application that produces the binary format, whereas versioning on textual formats can be done with any tool.  This means that versioning becomes universal.&lt;br /&gt;
&lt;br /&gt;
=== 9) Google Presentations ease-of-use ===&lt;br /&gt;
For documentation of the machines, the build manuals, we would like to have the same ease-of-use as Google Presentations offers.&lt;br /&gt;
&lt;br /&gt;
=== 10) Automatic indexing ===&lt;br /&gt;
For the machines, the modules that are part of the machines it would be helpful if there were some form of automatic indexing.  Essentially, it would be good to have more structure on the wiki.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217834</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217834"/>
		<updated>2020-04-19T10:51:48Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Problem definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;br /&gt;
&lt;br /&gt;
== Problem definition ==&lt;br /&gt;
Although there are certainly good things to say about the current situation, unfortunately it is also possible to name problems.  One of the problems of the wiki is that it contains lots of information in a more or less unstructered way.  Navigation is reliant on links between pages, there is machine information, firmwares, &amp;quot;meta&amp;quot; topics such as this, etc.  A common complaint is that users find it hard to find their way and get overwhelmed with the content.&lt;br /&gt;
&lt;br /&gt;
Although a wiki keeps track of changes, it is not really meant for versioning.  To the best of my knowledge, it is not impossible to mark a page as being in a state that should be consolidated, for a machine release for example.&lt;br /&gt;
&lt;br /&gt;
A problem with the way machines are versioned is that the version number does not reflect how severe a change is.  Does a minor change lead to a new version number, for example a new Z-sensor on a 3D-printer?  Perhaps it does, it may get version 20.04, but if next month the layout of the axes change, it may get version 20.05, whereas it is a major change.  And 3D-printer 20.05 may make use of an improved universal axes but which version?  Do we consistently change the 3D-printer version if the universal axis version number changes?  Managing these version numbers requires lots of discipline in the current situation.&lt;br /&gt;
&lt;br /&gt;
The build manuals are drafted in Google Presentations but this has drawbacks.  Firstly, editing requires a Google account.  Secondly, the application is a proprietary cloud application from a major company that has so many resources that they can build an extremely high quality cloud application.  However, this results in high degree of [https://en.wikipedia.org/wiki/Vendor_lock-in vendor lock-in].  Google cloud services are highly volatile, see the [https://en.wikipedia.org/wiki/Google_Reader#Discontinuation discontinuation of Google Reader], [https://en.wikipedia.org/wiki/Google%2B Google +], and the number of video conferencing applications that may or may not be merged: Google Meet, Google DUO, Google Hangouts, Google chat, and all of these may or may not be integrated with Gmail.  The point is that being reliant on such a large, volatile company where services may be canceled, terms of service may change is not a very &amp;quot;open&amp;quot; way of working.&lt;br /&gt;
&lt;br /&gt;
More practical issues are the following: The internal format is not exposed to the user.  The format is binary instead of textual which makes tracking changes more cumbersome and reliant on the used application.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217832</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217832"/>
		<updated>2020-04-19T10:48:37Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Qualities of the current situation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;br /&gt;
&lt;br /&gt;
== Qualities of the current situation ==&lt;br /&gt;
The current system in place has various good features.  The OSE wiki has pages for each project where information and build manuals are stored.  A wiki is proven method with a low entrance threshold for users.  The wiki logs changes to the pages and people making the changes.  Major benefits are:&lt;br /&gt;
* one central point of entry&lt;br /&gt;
* anyone can join&lt;br /&gt;
* ease of use&lt;br /&gt;
* logs activity with changes&lt;br /&gt;
* proven technology&lt;br /&gt;
&lt;br /&gt;
Many of the build manuals are created in Google Presentations.  This is a highly easy-to-use cloud application.  Anyone can view the presentation and download it in various formats such as Microsoft Powerpoint, Libre Office, or PDF.  It also supports templates to provide a fixed style and the application keeps track of versions although these versions are not available to the public as opposed to the wiki pages.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217831</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217831"/>
		<updated>2020-04-19T10:47:40Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Several projects in OSE become viable products, for example the D3D Universal and D3D Pro are being sold as kits.  However, the nature of OSE is that many projects are in a high rate of development and versions may change much in a short amount of time.  For example, the D3D Universal changed considerably from the summer of 2019 to January 2020 and possibly as a result the documentation on the wiki was not consistent.&lt;br /&gt;
&lt;br /&gt;
On this page we will try to address some the issues.  We will first elaborate on the context, then we will discuss what is good in the current situation.  We will then define the problem and finally outline a set of ideas and requirement to improve on the status quo.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
Many machines are reaching a state that makes them a viable product.  For others to be able to use them, we need proper documentation that is consistent over versions.  The machines are highly modular which means that some version of machine A uses some version of project B.  If B advances, it may no longer be a fit to A.  As such, it is necessary to maintain bookkeeping about which version of a different component is used.&lt;br /&gt;
&lt;br /&gt;
We could ask ourselves what OSE&#039;s core business is.  An acceptable answer would be producing the machines of the GVCS.  However, a more refined answer would be that OSE produces documentation to build the machines of the GVCS.  To be able to repair them, it is necessary to understand it, hence the documentation.&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the OSE machines is that they should be usable over a lifetime.  However, this would also require for the documentation to be available over a lifetime.  It is not clear whether that is guaranteed currently.&lt;br /&gt;
&lt;br /&gt;
Another question is then: What does it mean that the machine is available over a lifetime?  Is the machine (rather its documentation) built now available in 20 years?  Is the documentation of that specific version available?  The machines built now are versioned using year and month.  Or is only the current documentation available of the machine in the current state?&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217830</id>
		<title>Improving Versioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Improving_Versioning&amp;diff=217830"/>
		<updated>2020-04-19T10:45:46Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Add a summary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
* proposal to address issues with consistent versions of machines&lt;br /&gt;
* OSE&#039;s core business is actually producing documentation for machines available over a lifetime&lt;br /&gt;
* Good about the current situation&lt;br /&gt;
** proven technology, easy-to-use centralized wiki&lt;br /&gt;
** easy to use Google Presentations cloud application for build manuals&lt;br /&gt;
* Problems with the current situation&lt;br /&gt;
** wiki unstructured and overwhelming&lt;br /&gt;
** no real versioning in wiki and Google Presentations&lt;br /&gt;
** reliance on volatile, proprietary Google cloud services&lt;br /&gt;
** binary format for Google Presentations prevents proper versioning&lt;br /&gt;
* Requirements&lt;br /&gt;
# no major change in current workflow&lt;br /&gt;
# keep the wiki as central point&lt;br /&gt;
# do not rely on the wiki as a central point&lt;br /&gt;
# apply proper versioning reflecting severity of change&lt;br /&gt;
# true consolidation of machines with lifetime releases&lt;br /&gt;
# versioning supporting modularity&lt;br /&gt;
# no reliance on proprietary software/cloud services&lt;br /&gt;
# support textual format as much as possible for universal versioning&lt;br /&gt;
# same ease-of-use as Google Presentations&lt;br /&gt;
# automatic index for machines, modules, projects on the wiki&lt;br /&gt;
* Proposal&lt;br /&gt;
** adopt semantic versioning&lt;br /&gt;
** adopt Git with submodules&lt;br /&gt;
** create lifetime releases with Zenodo or IPFS&lt;br /&gt;
** automatically generate wiki pages, build manuals from Git repositories&lt;br /&gt;
** find a way to use a textual format as an easy-to-use replacement for Google Presentations&lt;br /&gt;
* Concrete steps&lt;br /&gt;
** Investigate the above in the Hamburg STEAM Camp&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=217196</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=217196"/>
		<updated>2020-04-14T18:33:41Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 12 April 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.  In discussion with Marcin about [[Teaching Module Requirements for STEAM Camps|requirements]] for video courses.  Looks like a great list.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=217191</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=217191"/>
		<updated>2020-04-14T18:24:38Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 12 April 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hint|Please post your DIY arduino Pictures at [[DIY_Arduino]] or here}}&lt;br /&gt;
= Sunday 12 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Preparing KiCAD 101 video course.  Thinking out the different modules.  Learning the Kdenlive program.  Making a list of things to order.  Record a couple of clips to try out.  Thinking about handouts that should go with the video.&lt;br /&gt;
&lt;br /&gt;
= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.&lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=216028</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=216028"/>
		<updated>2020-04-05T18:54:33Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 29 March 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 5 April 2020 =&lt;br /&gt;
&lt;br /&gt;
Added missing files to the log as was suggested by Marcin.  Investigated how to do a proper KiCAD tutorial with an Arduino.  I realized I don&#039;t have a good video camera, so I looked into how to make the Raspberry Pi Tablet from the 2020 January STEAM Camp.  I was hoping to build the tablet in a day or so, but as I understand it is still in a high state of development, so it probably won&#039;t help me with a video camera.  I could make a stand for my phone which would actually be a good FreeCAD exercise.  &lt;br /&gt;
&lt;br /&gt;
= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215996</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215996"/>
		<updated>2020-04-05T09:04:04Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 2 February 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
As per the hint, the KiCAD project for the stripboard Arduino is: [[File:Kicad-project-stripboard-arduino.tar.gz]].  From this file the following pdfs were created:&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=File:Kicad-project-stripboard-arduino.tar.gz&amp;diff=215995</id>
		<title>File:Kicad-project-stripboard-arduino.tar.gz</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=File:Kicad-project-stripboard-arduino.tar.gz&amp;diff=215995"/>
		<updated>2020-04-05T09:00:44Z</updated>

		<summary type="html">&lt;p&gt;Pieter: A KiCAD project for a stripboard Arduino.  Note that this was created with KiCAD 5.1.5 which cannot be opened with the KiCAD version of OSE Linux.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A KiCAD project for a stripboard Arduino.  Note that this was created with KiCAD 5.1.5 which cannot be opened with the KiCAD version of OSE Linux.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215994</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215994"/>
		<updated>2020-04-05T08:52:48Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Saturday 1 February 2020, add files on which we were working */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
For reference, as per the hint, the files are:&lt;br /&gt;
* [[File:Dimmer.tar.gz]]&lt;br /&gt;
* [[File:flatcam-dimmer.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=File:Flatcam-dimmer.tar.gz&amp;diff=215993</id>
		<title>File:Flatcam-dimmer.tar.gz</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=File:Flatcam-dimmer.tar.gz&amp;diff=215993"/>
		<updated>2020-04-05T08:51:55Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Output from the Dimmer KiCAD project that was used in FlatCAM to create isolation routing gcode.  The SVG files are also included.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Output from the Dimmer KiCAD project that was used in FlatCAM to create isolation routing gcode.  The SVG files are also included.&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215118</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215118"/>
		<updated>2020-03-29T14:11:56Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 29 March 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Open Source Software Projects ==&lt;br /&gt;
At one of Marcin&#039;s presentations at the CEB Microhouse Build in Belize, he&lt;br /&gt;
mentioned that many open source software projects show little collaboration.  I&lt;br /&gt;
agree with that but I want to share my view on that given my (actually not so&lt;br /&gt;
extensive) experience on contributing to open source software.&lt;br /&gt;
&lt;br /&gt;
=== Summary: ===&lt;br /&gt;
* Software is very complex limiting collaboration.  A good metaphor for understanding the complexity of contributing to a software project: it is like learning a new language.&lt;br /&gt;
* An interesting way to solve this is put forward by Pieter Hintjens (name and location of the presentation (the Netherlands) are a coincidence, the speaker is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
** [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
Below you can find a more detailed summary of the talk, but this is these are the main brief takeaways:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code&lt;br /&gt;
# Make progress before agreement&lt;br /&gt;
# Problems before solutions&lt;br /&gt;
# Contracts before internals&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  We can do this by collaborating and embracing failure.&lt;br /&gt;
&lt;br /&gt;
=== Full text ===&lt;br /&gt;
I believe an important reason why many open source software projects show&lt;br /&gt;
limited collaboration is not that people do not want to contribute but that the&lt;br /&gt;
software is so complex that it is very difficult to just jump in.  My opinion&lt;br /&gt;
is that software in general is very complex.  In essence, a software project is&lt;br /&gt;
a very high density piece of information with many different subtle connections&lt;br /&gt;
between many parts of the code where changing even one character can break&lt;br /&gt;
everything.  Due to this enormous complexity it usually requires a serious&lt;br /&gt;
investment to contribute code.&lt;br /&gt;
&lt;br /&gt;
The following is an example of how subtle the interactions in code can be.  The&lt;br /&gt;
if-statement below checks whether something has some feature and based on this&lt;br /&gt;
feature it does something.&lt;br /&gt;
&lt;br /&gt;
    if has_feature_a {&lt;br /&gt;
      do_something_with_a&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_b {&lt;br /&gt;
      do_something_with_b&lt;br /&gt;
    }&lt;br /&gt;
    else if has_feature_a AND has_feature_b {&lt;br /&gt;
      do_something_entirely_different&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      do_something_default&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This looks like perfectly reasonable code, but careful examination shows you&lt;br /&gt;
that the order of if-statements has meaning here: to make it correct, the third&lt;br /&gt;
if-statement should move to the top because if something has feature a and b,&lt;br /&gt;
it also satisfies the check for having only feature a.  I&#039;ve seen this going&lt;br /&gt;
wrong even though there were explicit comments indicating that the order of&lt;br /&gt;
if-statements was relevant.  These kinds of subtle interactions between pieces&lt;br /&gt;
of code make software very complex.&lt;br /&gt;
&lt;br /&gt;
Another example to illustrate how complex software is, in this case when high&lt;br /&gt;
performance is required: Contributing to an FFT library for GPUs boiled down to&lt;br /&gt;
writing a program that generated many different constants and templates in the&lt;br /&gt;
form of code.  These constants and templates would become the source files of&lt;br /&gt;
the FFT library.  These source files would compile to the FFT library and&lt;br /&gt;
running the FFT library would compile binaries from the templates at run time&lt;br /&gt;
for the GPU that would then execute on the GPU.&lt;br /&gt;
&lt;br /&gt;
Essentially, there is a program that creates a program that creates a program&lt;br /&gt;
for doing FFTs, so there are three level of indirections.  The second program&lt;br /&gt;
was added to the source files of the FFT library, the first program was simply&lt;br /&gt;
discarded and the third program is generated on the fly by the FFT library.  A&lt;br /&gt;
problem in the third program can have its origin in the first program,&lt;br /&gt;
something that may be very difficult to trace.&lt;br /&gt;
&lt;br /&gt;
Software projects are usually written in a specific kind of programming&lt;br /&gt;
language.  The idea is that if programmers know this programming language, they&lt;br /&gt;
can jump right in, but in my opinion that is almost never the case.  Actually,&lt;br /&gt;
if a programming language is sufficiently expressive, it is possible to use the&lt;br /&gt;
programming language to create a new domain-specific language to express the&lt;br /&gt;
problem that a specific software project tries to solve.  In my opinion&lt;br /&gt;
starting to collaborate on a software project can be compared to learning a new&lt;br /&gt;
language, a language to learn the problems that this software project tries to&lt;br /&gt;
solve.  Perhaps, it is not so difficult as learning a spoken foreign language&lt;br /&gt;
but it provides a good frame of reference to understand the complexity of&lt;br /&gt;
contributing to a software project.&lt;br /&gt;
&lt;br /&gt;
==== Building Open Source Communities ====&lt;br /&gt;
An interesting way to solve this is put forward by Pieter Hintjens (name and&lt;br /&gt;
location of the presentation (the Netherlands) are a coincidence, the speaker&lt;br /&gt;
is Belgian).  These ideas may be interesting to OSE as well:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=uzxcILudFWM Building Open Source Communities]&lt;br /&gt;
&lt;br /&gt;
A summary of the talk:&lt;br /&gt;
&lt;br /&gt;
There are four rules to build an open source community:&lt;br /&gt;
&lt;br /&gt;
# Put people before code &amp;lt;br /&amp;gt; If there are no contributors, the project is dead.  People are much more important than the code.&lt;br /&gt;
# Make progress before agreement &amp;lt;br /&amp;gt; The approach is to not do code reviews but instead just merge a contribution even if it breaks everything.  The reason is that reaching an agreement is too time consuming.  Reaching agreement is a form of synchronization and synchronization limits parallelism which limits productivity.&lt;br /&gt;
# Problems before solutions &amp;lt;br /&amp;gt; An important question for a contribution is: What problem is it solving.  If there is no clear answer, discard it.&lt;br /&gt;
# Contracts before internals &amp;lt;br /&amp;gt; First make how something should interface with something else, so think as much as possible in contracts.  Licenses are a social contract for the community and share-alike patches are the most convenient because you never have to think about the license of a contribution.&lt;br /&gt;
&lt;br /&gt;
There should be some rules, such as about coding style, how to patch, but more important is that an open project has one important rule:&lt;br /&gt;
&lt;br /&gt;
* Anyone has the &#039;&#039;&#039;right&#039;&#039;&#039; to be a contributor&lt;br /&gt;
&lt;br /&gt;
Often &#039;core maintainers&#039; are the enemies of communities because they have power&lt;br /&gt;
to enforce rules.  For the community it is much better that maintainers are not&lt;br /&gt;
special.&lt;br /&gt;
&lt;br /&gt;
An interesting question and answer:&lt;br /&gt;
&lt;br /&gt;
* How can we understand what a community wants?&lt;br /&gt;
&lt;br /&gt;
We have to think of people as an ant colony that is more intelligent as a whole&lt;br /&gt;
than the sum of the individual ants.  By itself, an ant is lost and so is a&lt;br /&gt;
human.  We have to put aside egos and work more together like an ant colony&lt;br /&gt;
does, essentially embracing failure.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=User_talk:Eric&amp;diff=215117</id>
		<title>User talk:Eric</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User_talk:Eric&amp;diff=215117"/>
		<updated>2020-03-29T09:15:35Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Message for Eric&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Welcome to &#039;&#039;Open Source Ecology&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
We hope you will contribute much and well.&lt;br /&gt;
You will probably want to read the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents help pages].&lt;br /&gt;
Again, welcome and have fun! [[User:Marcin|Marcin]] ([[User talk:Marcin|talk]]) 08:45, 20 October 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eric, I&#039;ve been following your wiki contributions, really interesting stuff, thank you for contributing.&lt;br /&gt;
&lt;br /&gt;
Just a few minor suggestions, I noticed you don&#039;t use the wiki markup very much, particularly two features:&lt;br /&gt;
&lt;br /&gt;
# numbered lists&lt;br /&gt;
# signature tag when doing discussions&lt;br /&gt;
&lt;br /&gt;
For numbered lists put a hash mark in front of items, instead of manually numbering things (edit this talk page to see how I did the list above).&lt;br /&gt;
&lt;br /&gt;
For tagging your comments in talk pages there is a button above the textarea (second from the end) with help text reading: &amp;quot;Your signature with timestamp&amp;quot;. If you click that it will automatically insert some characters that get replaced with your name, date, etc upon saving the changes.&lt;br /&gt;
&lt;br /&gt;
Definitely take some time to read the markup help pages, there is a lot of cool stuff you can do with wiki markup: https://www.mediawiki.org/wiki/Help:Formatting&lt;br /&gt;
&lt;br /&gt;
Thanks and have fun! --[[User:Lex Berezhny|Lex Berezhny]] ([[User talk:Lex Berezhny|talk]]) 23:44, 15 November 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lex, Thank You!&lt;br /&gt;
&lt;br /&gt;
I am definitely still a novice in this whole text/webpage/wikipage formatting thing so your help is greatly appreciated!&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 06:45, 16 November 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
We are in OSE meeting now, you should join if you can:&lt;br /&gt;
&lt;br /&gt;
https://meet.jit.si/OpenSourceEcology&lt;br /&gt;
&lt;br /&gt;
--[[User:Lex Berezhny|Lex Berezhny]] ([[User talk:Lex Berezhny|talk]]) 21:01, 21 November 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Im writing this as a template for myself.&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 22:48, 24 Febuary 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== wiki work ==&lt;br /&gt;
&lt;br /&gt;
great work on the wiki Eric. if you are looking for a  little project you could go through and make sure that each of these genealogy pages are listed in order of newest to oldest [[Genealogy_Directory]] Also might try to make them all styled with bullets or whatever the same way. Also, feel free to try out OpenSCAD if you want to jump in on the circular knitting machine code :D I can help with tips and tricks.&lt;br /&gt;
--[[User:Dorkmo|Dorkmo]] ([[User talk:Dorkmo|talk]]) 21:50, 10 March 2018 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Thanks!  I can definetly do the organizational stuff.  For now I am trying to make &amp;quot;Construction Sets&amp;quot; for just about everything we have made or will make.  I am also doing some stuff like making sure all information pages go into a page similar to constructions ses but for knowledge.  Organizing the geneologies fits nicely into this so I will definetly do that.&lt;br /&gt;
&lt;br /&gt;
I am a student so my work is kind of sporadic.  Once I am done with all the stuff listed in the above bit I will probably do a smaller design or to of mine on this page as a sort of learning exercise. I think I will do this [[Open Source Vacuum Cleaner]] project, or maybe design a dremel tool holder to make a basic [[D3D 3 Axis CNC Mill]].&lt;br /&gt;
&lt;br /&gt;
Then once I am done with the above things I will probably join the official dev team and do stuff with that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anyhow how does OpenSCAD work? From what I gathered (and may be completely wrong in thinking) it is a CAD software where you directly interface with the code, instead of a program like FreeCAD where you use the interface of the software (unless you get all fancy in FreeCAD at least).&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think I will be of much help on that front (YET at least).  Although, It seems like you are doing a fine job on it without me getting in there so I guess I will leave it at that. Sorry if I ranted a bit there, and keep up the great work!&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 01:14, 10 March 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I&#039;m just writing this as a sort of test of this   f a n c y   n e w   s e r v e r   before I do anything else.&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 01:10, 24 May 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I&#039;m Back!&lt;br /&gt;
&lt;br /&gt;
Had some health related stuff to deal with, but i&#039;m good to go now.  I&#039;m going to start by reading through the changelogs and watching the meetings, but hopefully I will be caught up soon!&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 12:38, 17 November 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Happy New Year!&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 22:57, 1 January 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hi Eric, thanks for offering to help get materials together for expo events. I would most appreciate help getting together a few signs/displays and information sheets, mainly I need the graphics/documents. I would like to get an Open Source Ecology sign and a display of the 50 machines of GVCS, with a high quality graphic I can get these printed. A hand out for at least the D3D would also be good for tabling. I added some sections https://wiki.opensourceecology.org/wiki/OSE_Participation_in_Makerfaires#Tabling_supplies&lt;br /&gt;
and if you can collect good graphics that would be super helpful.&lt;br /&gt;
&lt;br /&gt;
[[User:Poli|Poli]] ([[User talk:Poli|talk]]) 03:03, 7 February 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Have a long weekend at last, so I&#039;m diving into these posters.  With the 50 Machines, some of them are very outdated looking (ie the 3D Printer looks like the original reprap, not the D3D).  Should I correct this?  Everything else is going nicely.&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 21:57, 18 January 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I ordered a poster already, so that is set. It is just a sign so people have an organization name, I used this image http://www.sharingame.org/media/Global_Village_Construction_Set-1024x712.jpg . I am trying to get together a few explanation graphics to lead people through the concepts required to understanding how a 3D printer works. &lt;br /&gt;
https://wiki.opensourceecology.org/wiki/D3D_Enterprise_Training_Program#Curriculum_for_education&lt;br /&gt;
&lt;br /&gt;
So a figure showing how xyz coordinates are used in making 3D models and generating gcode is my next deliverable&lt;br /&gt;
&lt;br /&gt;
[[User:Poli|Poli]] ([[User talk:Poli|talk]]) 02:58, 19 February 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== circular knitic ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lol yeah! re: the arduino shields, it is very silly and expensive use of materials, but its working for now, woot. i&#039;ll upload a picture later for the lulz&lt;br /&gt;
-Poli&lt;br /&gt;
&lt;br /&gt;
I want liquid helium and a black market nuclear Turbo-electric submarine next...&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 3:35, 2 March 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Just got back from a talk at UNF with my school&#039;s &amp;quot;Great Decisions&amp;quot; club.  The guest speakers were James Fallowss and Deborah Fallows.  They spoke about their book &amp;quot;Our Towns&amp;quot;.  This book explores troubled cities in the USA, but also how those  same cities came back.  There are a lot of similarities in philosophy, as well as some potentially useful ideas/methods in it.  All in all it was a great speach, and I will now try to get some of  it&#039;s bullet points down, and possibly find a reccording of it (They have broadcasts, but I don&#039;t know if it is private etc).&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 00:56, 9 April 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Just got settled in for my first semester (summer B) of University at the University of North Florida (or UNF).  Tommorow my classes start, but I will try to send an inquiry about using the schools fab-lab for OSE work (I toured it a few years back; pretty extensive, although I will probably stick to the welder, hand torch, and their 3D Printer, as their industral Multi Axis CNC is way too expensive and important for my needs as of now.  I will try to keep everyone updated about all this excitment! (PS I also got a laptop with some REAL processing power for University + Immediately Afterwards, Huge improvement in render times, which is refreshing, I may also try a dual boot Windows+OSE Linux later)&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 22:19, 23 June 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Just got signed up for the Personal Protective Equipment mini-course/quiz needed to gain acess to UNF&#039;s Machine Shop Part of their Fab-Lab!  I&#039;ll finish that after homework today or tomorrow, so I should be able to use it quite soon.  Their FDM + Vaccuum Former Section did get moved, as I suspected, so that requires a different inquiry...  Learning how to torch, turn, and weld components should keep me busy until then!&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) (14:44), (2) (July) (2019) (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
FINALLY finished all of that Fab Lab Saftey Stuff, it was kind of on the back burner for a while.  Projects need to get cleared and have some level of legitimacy/relivance to them in order to use the space (which is all okay, I was planning on only using machines stuff when they were not currently being used for full on engineering projects)&lt;br /&gt;
&lt;br /&gt;
I may try and found an OSE club at UNF then.  It would probably fallshort of being a full on OSE campus, but I can see some possible ways it could go:&lt;br /&gt;
&lt;br /&gt;
*Open Source Golfcarts for Maitenence Staff Etc&lt;br /&gt;
*Open Source Power Tools for Maitenence Staff Etc&lt;br /&gt;
*Open Source Construction Vehicles for Construction and for Maitenence Staff Etc&lt;br /&gt;
*Open Source Bikes/Velomobiles for sale/rent&lt;br /&gt;
*UNF (3D) Print Service (As we already have UNF Printing for paper goods)&lt;br /&gt;
*We have an onsite garden that supplies the cafeteria today I will see if they would be intrested in anything, such as a micro trac, a greenhouse and/or aquaponics system, and maybe a D3D Farmbot&lt;br /&gt;
*Collaboration with local affordable housing groups like habitat for humanity with a CEB press and/or Open Source Power Tools, and/or Open Source Construction Vehicles&lt;br /&gt;
*Host a Makerfaire&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 13:10, 20 August 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
So this past thursday, I was  at a completgely different counterprotest against the schools soapbox preacher guy, and I met a computer science major.  We struck up conversation, and I brought up OSE. They seemed intrested, and may join soon.  They probaably have class today, I only have class monday through thursday.  I will try to contact them later today or tomorrow to see if they are sttill intrested, and help them set up an account etc.&lt;br /&gt;
&lt;br /&gt;
--[[User:Eric|Eric]] ([[User talk:Eric|talk]]) 12:53, 19 October 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Hi Eric,&lt;br /&gt;
&lt;br /&gt;
As requested by Marcin, I consolidated the notes on marketing on various places, see my [[Pieter log#Notes on Marketing|notes on marketing]].  Looking forward to learn about your ideas.&lt;br /&gt;
&lt;br /&gt;
--[[User:Pieter|Pieter]] ([[User talk:Pieter|talk]]) 09:14, 29 March 2020 (UTC)&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215116</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215116"/>
		<updated>2020-03-29T09:04:02Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 29 March 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
Consolidated the notes on marketing below in:&lt;br /&gt;
*[[Marketing]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Target_Audience_for_STEAM_Camps&amp;diff=215115</id>
		<title>Target Audience for STEAM Camps</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Target_Audience_for_STEAM_Camps&amp;diff=215115"/>
		<updated>2020-03-29T09:03:15Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Intro=&lt;br /&gt;
We estimate the market size for relocalization towards circular economies to be around $30T, the size of the primary and secondary sectors of the economy (see [[Google Presentation]] for tipping point calculation towards a collaborative, open economy). As such, this affords the possibility of large scale collaboration towards transforming the economy towards open and collaborative, as in the [[OSE Vision]]. The [[Open Source Microfactory Mastermind]] would be a dedicated groups of open, collaborative developers who are interested in being owner-operators of enterprises in a local, circular economy. They collaborate globally, and have lofty ideals, and build locally so they don&#039;t sit on armchair theory.&lt;br /&gt;
&lt;br /&gt;
Areas of OSE development include the [[Open Source Microfactory STEAM Camps]] for broadscale participation in collaborative design, the [[Summer of Extreme Design-Build]] focusing on larger-scale prototyping, and [[Incentive Challenges]] for [[Distributive Enterprise]] development.&lt;br /&gt;
&lt;br /&gt;
For the STEAM Camps, we are recruiting instructors and marketing to participants. &#039;&#039;&#039;The working question is clear definition of the target audience.&#039;&#039;&#039; Here are some notes. Also see [[Marketing]].&lt;br /&gt;
&lt;br /&gt;
=Open Source Microfactory Mastermind=&lt;br /&gt;
What we work on and how we work:&lt;br /&gt;
#We agree on a product roadmap&lt;br /&gt;
#Product strategy - we develop product strategy for each product&lt;br /&gt;
#Marketing strategy -&lt;br /&gt;
#Owner Operators - producers in local economies who move up in management over time&lt;br /&gt;
#Any investor is required to also be an operator until finalized production is defined&lt;br /&gt;
#Community not for community sake but for transformative movement entrepreneurship&lt;br /&gt;
#Teacher/builder/researcher. No basic research - applied product research for accountability to closed loop material cycles at the community scale&lt;br /&gt;
#Open source version of Fab City&lt;br /&gt;
#Collaborative version of Fab Academy&lt;br /&gt;
#People who envision common products being made in their own community, so that we reach the circular economy&lt;br /&gt;
#Distributed, open marketing templates, like Clickfunnels but open source and distributive&lt;br /&gt;
#Profile - disposable income higher than average. Looking for meaningful work with purpose. Sideline to full time. Interested in sharing knowledge. Has courage sufficient to share source code of economic value (product design, production engineering, product strategy, business plan). Is interested in ethical systems transformation without compromising to adapt to system (The Unreasonable Man) Understands societal critique without invoking victim mentality (They are out to get you. Who are &#039;They&#039;?) See Juice Rap News 30.&lt;br /&gt;
#Possible profile - libre hacker ethical cooperator (distinct from supercooperators, who have no limits to working outside of their own cultural base)&lt;br /&gt;
#Possible profile - open-minded Fab shop owner who wants to diversify their range of services, but needs to learn more about open collarative protocols&lt;br /&gt;
#Possible profile - &#039;&#039;&#039;People with tech background but don&#039;t have hands-on skills. 20&#039;s or early 30s in tech sector. With motivation to have meaningful impact.&#039;&#039;&#039;&lt;br /&gt;
#Possible profile - ethical entrepreneur who questions structural evil and has a successful business that participates in [[Structural Evil]] to the least extent possible.&lt;br /&gt;
#Someone who is well versed in systems-based conceptualization of structural evil, and has the ambition to transform it more than the ambition to benefit from it. Has the wisdom to distinguish enterprise that can move the dial (ethical scalability), vs pursuing fringe movements that do not consider systems thinking or are violent in their nature.&lt;br /&gt;
&lt;br /&gt;
=Growing an audience=&lt;br /&gt;
&lt;br /&gt;
The target audience for the full OSE mission may be a very limited one.  Instead, it may be wise to think in terms of wider audiences, such as people that are interested in how thinks work.  For example, there is an interesting and popular YouTube channel that tries to understand how things work: [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything].  Focusing on such an audience and introduce them gradually to the principles of OSE may be a good approach.  See the following [[Pieter log#Notes on Marketing|notes on marketing]].&lt;br /&gt;
&lt;br /&gt;
=Targeting an audience on YouTube=&lt;br /&gt;
&lt;br /&gt;
The following page describes how to target an audience on YouTube: [[YouTube#Targeting a specific audience|Targeting a specific audience]].&lt;br /&gt;
&lt;br /&gt;
=Feedback - Don Jacobsmeyer=&lt;br /&gt;
&lt;br /&gt;
You’ve articulated some of the “what”, you haven’t talked about the “who”. I’d encourage you to humanize this audience. Give one a name, talk about them by name. Let’s say Frank. &lt;br /&gt;
&lt;br /&gt;
Frank has X skills and Y social interests. He’s fascinated by the potential for ABC but hasn’t come across a highly actionable model to take X + Y and create a small scale version of ABC. So instead he finds himself toiling away on DEF which just frustrates him further because there’s no self fulfillment in it. &lt;br /&gt;
&lt;br /&gt;
Try to insert your other concepts in this narrative and see where it goes.  &lt;br /&gt;
&lt;br /&gt;
=Frank has X skills and Y interests...=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please write down below something that describes your goals, motivations, and needs - and how OSE&#039;s STEAM Camps or [[Summer X 2020]] can meet those needs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Profiles for different people:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Jeremy&#039;&#039;&#039; - Entrepreneur with a major DIY mindset.  I am looking for meaningful work that can impact society in a positive and ethical manner.  I have a large amount of discretionary time available 6 months per year.  I am interested in sharing knowledge, teaching and inspiring those around me with the incredible potential of OSE and Open Source Hardware.  I want to broaden others&#039; understanding of the world and to inspire young people with the myriad of possibilities that OSE projects/hardware makes available.  I hope to establish a makerspace/microfactory locally through bootstrapping and partnerships in my community.  The end goal is a self funding non-profit dedicated to advancing open source hardware development by involving and educating in the local community.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Don&#039;&#039;&#039; - &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Randy&#039;&#039;&#039; -  We hoard financial, material, and proprietary intellectual resources for financial gain.  Knowledge, comfort, energy and wealth have been created from intense generational effort and investment.  This benefited everyone somewhat.  How can we best use our discretionary time, attention, material and financial resources and clever ideas?  Entire continents lack even marginal shelter, food production, healthcare, water and power. Patent protection has attracted massive investment capital and innovators.  Open Source invites collaboration and sharing instead of hiding and hoarding.  It attracts a different group of participants.  This initiative is not attempting to build a few essential devices.  It aims to change the relative composition of users and producers in the local and worldwide economy for the benefit of all.  &lt;br /&gt;
&lt;br /&gt;
As a financial professional, mba, cpa, I have worked with established corporations, and a new company developing hydrogen energy and computer hardware and software.  I co-founded a consulting company with clients such as United Technologies, GE Plastics, Cytec, Mississippi Chemical, Rubbermaid, and Chrysler.  We observed and documented all manufacturing equipment.  I helped re-write the Constitution of the State of Hawaii as an elected delegate in 1978. I have an MA in Curriculum &amp;amp; Development, and taught math in urban public middle and high schools. I love supporting the vision of Marcin, Catarina, and others I have met as we continue to iterate and improve Open Source documentation, devices, structures, events, and participants. If you examine a graph of exponential growth, for a long time it appears as though there is almost no growth.  Suddenly growth explodes.  Open Source will follow that curve.  Open Source is practical, accessible, and inevitable.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Vasco&#039;&#039;&#039; &lt;br /&gt;
- &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Ian&#039;&#039;&#039; - I&#039;m a technologist and educator currently on the leadership team of a small charter-like high school. I am also the digital technology teacher at the school.  I am passionate about equipping youth (specifically indigenous youth) with the tools to create their own career pathways, having the technical skills to solve real-world problems and ultimately building the future that them, their family and communities want. I believe the OSE has the right vision and skill to empower a generation of collaborative innovators on a global scale that together could achieve any level of self-determined aspirations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Daniel&#039;&#039;&#039; - I&#039;d like to be able to build things. For myself, my family and friends, for my local community and for the wider society. Being able to build gives me an agency in the world that I am hungry for. It is a gateway to unleashed creativity, self-sufficiency and a more meaningful life. &lt;br /&gt;
&lt;br /&gt;
I&#039;d also like others to have the same opportunity. To get back in touch with their own creative power. To work together to actively solve the problems we face, rather than just tweet about it. Let&#039;s wake up and realise that the abundance we seek is within our grasp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Benoit&#039;&#039;&#039; - participant in [[Summer X 2020]] - I&#039;m interested in learning how things work and being able to replicate without the help of any black box. Replication (can be called reinventing the wheel) is interesting because it validates your understanding and gives more autonomy - relying too much on the technology of a hyper-specialized civilization is a bit like believing in magic. &lt;br /&gt;
&lt;br /&gt;
Also I enjoy it very much. So I got acquainted with some maths/algorithms, DIY signal processing, robotics, reverse eng, electronics; things that can be done in front a computer for the most part. At some point, interacting with the real world becomes necessary; with a limit set of resources and without a very broad set of skills it gets very difficult. &lt;br /&gt;
&lt;br /&gt;
In order to build useful and interesting machines/processes and make this knowledge available, without jumping through so many hoops, I&#039;m keen on learning manual skills, applied engineering and whatever else at the OSE STEAM Camp. Hopefully I&#039;ll also be useful with my less hardware oriented skills.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Jessica&#039;&#039;&#039; - Jessica is an urbanist, designer, sculptor, and community catalyst.  A licensed landscape architect,raised in the northern forests, trained in the legacy arts of stone carving and metallurgy, she understands the world as a continuum, and strives not to critique existing &#039;&#039;modus operandi&#039;&#039; but to replace them with something entirely new.  She teaches ecological systems to architecture and landscape architecture students where an understanding of how the abiotc, biotic, built/ social, and disturbance patterns create the unevenness of space we experience becomes a tool for design from global to detail scales. &lt;br /&gt;
&lt;br /&gt;
In her design practice that has taken her around the globe, she seeks models other than the traditional client and consultant roles to build, apply, and develop the most creative solutions imaginable to serve the community of &#039;&#039;place&#039;&#039;.  This has been the most challenging at home where progressive ideas are thrown around as political tactics and market forces are the rip tide to equity.  &lt;br /&gt;
&lt;br /&gt;
She has been looking for others who know what an engaged design process means and can do to empower a community.  In need of collaborators and expertise in electronics and programming to develop she trusts her intuition about OSE STEAM Camp and intends to share her experience and provide training for others who are interested in making the collective the five legged bottom line.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Mutton&#039;&#039;&#039; - Mutton is a movement entrepreneur interested in solving all of the world&#039;s most pressing grand challenges. He is fascinated by the potential of collaborative development, and thinks that all of the world&#039;s problems can be solved by first identifying them, and creating a school in which students work explicitly on tackling these problems. His mental model states that we must start at the level of how the world provides an economic basis for people - literally turning abundant dirt and twigs into the lifestuff of modern civilization. &lt;br /&gt;
&lt;br /&gt;
He has been looking for a way to fund a school based on a promise of distributed, relocalized, circular economies, and has discovered that people are willing to pay for applied, hands-on, entrepreneurial education. But right now, Mutton is missing the organizational support to translate his vision to build his school. He further wants to have no investors who are not direct stakeholders (either students or teachers) in the school - making startup harder. He has found that finding such direct stakeholders is difficult, so he decided to join the OSE STEAM Camps program to find more aligned people, so he can staff the school that he wants and populate it with students.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Jeff&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Target Audience Braindump]]&lt;br /&gt;
*Announcement for STEAM Camp instructors by [[Andreas Log]] - how do we vet that through the above? [https://docs.google.com/document/d/169v3knwWDK0OhecMQTPpzW6e-mVABCA82UOvMlfiqPk/edit#]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=YouTube&amp;diff=215114</id>
		<title>YouTube</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=YouTube&amp;diff=215114"/>
		<updated>2020-03-29T09:01:39Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Targeting a specific audience */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OSE YouTube channel is OpenSourceEcology: https://YouTube.com/user/OpenSourceEcology&lt;br /&gt;
&lt;br /&gt;
== Adding Annotations and Links ==&lt;br /&gt;
&lt;br /&gt;
[https://support.google.com/youtube/answer/6035690?rd=1 Google Support]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Social Media]]&lt;br /&gt;
&lt;br /&gt;
==Embedding Youtube in the Wiki==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;560&amp;quot; height=&amp;quot;315&amp;quot; src=&amp;quot;&lt;br /&gt;
https://www.youtube.com/embed/NWRtvaJ8iHo&lt;br /&gt;
&amp;quot; frameborder=&amp;quot;0&amp;quot; allow=&amp;quot;autoplay; encrypted-media&amp;quot; allowfullscreen&amp;gt;&lt;br /&gt;
&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Targeting a specific audience==&lt;br /&gt;
&lt;br /&gt;
This section discusses some ways that may help to target a specific audience on YouTube.  For general information about target audiences, see [[Target Audience for STEAM Camps]].  &lt;br /&gt;
&lt;br /&gt;
For example, an audience that is aligned with OSE is the audience for the YouTube channel:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything]&lt;br /&gt;
&lt;br /&gt;
A naive way to bring OSE under the attention of this audience is to create a description of an OSE YouTube video that aligns with the audience of How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view the OSE video may receive recommendations of HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending the OSE video to HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, this may not be very effective.  Instead, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Marketing&amp;diff=215113</id>
		<title>Marketing</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Marketing&amp;diff=215113"/>
		<updated>2020-03-29T08:56:24Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Organization}}&lt;br /&gt;
&lt;br /&gt;
==Marketing==&lt;br /&gt;
A list of various [[OSE]] marketing related pages.&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
&#039;&#039;&#039;Active&#039;&#039;&#039;&lt;br /&gt;
*[[TED Talk]]&lt;br /&gt;
*[[Brochure]]&lt;br /&gt;
*[[Kickstarter Publicity Plan]]&lt;br /&gt;
*[[Target Audience for STEAM Camps]]&lt;br /&gt;
*[[YouTube#Targeting a specific audience|Targeting a specific audience on YouTube]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Message&#039;&#039;&#039;&lt;br /&gt;
*[[Core message]]&lt;br /&gt;
*[[:Category:Slides]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Archive&#039;&#039;&#039;&lt;br /&gt;
*[[Marketing Strategy]]&lt;br /&gt;
*[[Marketing Distillations]]&lt;br /&gt;
*[[Marketing Research]]&lt;br /&gt;
*[[Marketing Materials]]&lt;br /&gt;
*[[GVCS Publicity Plan]]&lt;br /&gt;
*[[Marketing Archive]]&lt;br /&gt;
*[[Contacts]]&lt;br /&gt;
*[[Factor E Farm in 5 Minutes]]&lt;br /&gt;
*[[Marketing Brochure Old]]&lt;br /&gt;
*[[Supporting Information]]&lt;br /&gt;
*[[Key phrases]]&lt;br /&gt;
*[[Keywords]]&lt;br /&gt;
*[[Outreach 2010]]&lt;br /&gt;
*[[Talk:Marketing]]&lt;br /&gt;
*[[Distillations]]&lt;br /&gt;
*[[Publishing Guidelines]]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Media]]&lt;br /&gt;
*[[Press]]&lt;br /&gt;
*[[Interviews]]&lt;br /&gt;
*[[Development Strategy]]&lt;br /&gt;
*[[:Category:Collaboration Discussions]]&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Marketing Wikipedia:Marketing]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Marketing Operations Manual]]&lt;br /&gt;
*[[D3D Marketing]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Marketing]]&lt;br /&gt;
[[Category: PR]]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Target_Audience_for_STEAM_Camps&amp;diff=215112</id>
		<title>Target Audience for STEAM Camps</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Target_Audience_for_STEAM_Camps&amp;diff=215112"/>
		<updated>2020-03-29T08:53:49Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Growing an audience */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Intro=&lt;br /&gt;
We estimate the market size for relocalization towards circular economies to be around $30T, the size of the primary and secondary sectors of the economy (see [[Google Presentation]] for tipping point calculation towards a collaborative, open economy). As such, this affords the possibility of large scale collaboration towards transforming the economy towards open and collaborative, as in the [[OSE Vision]]. The [[Open Source Microfactory Mastermind]] would be a dedicated groups of open, collaborative developers who are interested in being owner-operators of enterprises in a local, circular economy. They collaborate globally, and have lofty ideals, and build locally so they don&#039;t sit on armchair theory.&lt;br /&gt;
&lt;br /&gt;
Areas of OSE development include the [[Open Source Microfactory STEAM Camps]] for broadscale participation in collaborative design, the [[Summer of Extreme Design-Build]] focusing on larger-scale prototyping, and [[Incentive Challenges]] for [[Distributive Enterprise]] development.&lt;br /&gt;
&lt;br /&gt;
For the STEAM Camps, we are recruiting instructors and marketing to participants. &#039;&#039;&#039;The working question is clear definition of the target audience.&#039;&#039;&#039; Here are some notes.&lt;br /&gt;
&lt;br /&gt;
=Open Source Microfactory Mastermind=&lt;br /&gt;
What we work on and how we work:&lt;br /&gt;
#We agree on a product roadmap&lt;br /&gt;
#Product strategy - we develop product strategy for each product&lt;br /&gt;
#Marketing strategy -&lt;br /&gt;
#Owner Operators - producers in local economies who move up in management over time&lt;br /&gt;
#Any investor is required to also be an operator until finalized production is defined&lt;br /&gt;
#Community not for community sake but for transformative movement entrepreneurship&lt;br /&gt;
#Teacher/builder/researcher. No basic research - applied product research for accountability to closed loop material cycles at the community scale&lt;br /&gt;
#Open source version of Fab City&lt;br /&gt;
#Collaborative version of Fab Academy&lt;br /&gt;
#People who envision common products being made in their own community, so that we reach the circular economy&lt;br /&gt;
#Distributed, open marketing templates, like Clickfunnels but open source and distributive&lt;br /&gt;
#Profile - disposable income higher than average. Looking for meaningful work with purpose. Sideline to full time. Interested in sharing knowledge. Has courage sufficient to share source code of economic value (product design, production engineering, product strategy, business plan). Is interested in ethical systems transformation without compromising to adapt to system (The Unreasonable Man) Understands societal critique without invoking victim mentality (They are out to get you. Who are &#039;They&#039;?) See Juice Rap News 30.&lt;br /&gt;
#Possible profile - libre hacker ethical cooperator (distinct from supercooperators, who have no limits to working outside of their own cultural base)&lt;br /&gt;
#Possible profile - open-minded Fab shop owner who wants to diversify their range of services, but needs to learn more about open collarative protocols&lt;br /&gt;
#Possible profile - &#039;&#039;&#039;People with tech background but don&#039;t have hands-on skills. 20&#039;s or early 30s in tech sector. With motivation to have meaningful impact.&#039;&#039;&#039;&lt;br /&gt;
#Possible profile - ethical entrepreneur who questions structural evil and has a successful business that participates in [[Structural Evil]] to the least extent possible.&lt;br /&gt;
#Someone who is well versed in systems-based conceptualization of structural evil, and has the ambition to transform it more than the ambition to benefit from it. Has the wisdom to distinguish enterprise that can move the dial (ethical scalability), vs pursuing fringe movements that do not consider systems thinking or are violent in their nature.&lt;br /&gt;
&lt;br /&gt;
=Growing an audience=&lt;br /&gt;
&lt;br /&gt;
The target audience for the full OSE mission may be a very limited one.  Instead, it may be wise to think in terms of wider audiences, such as people that are interested in how thinks work.  For example, there is an interesting and popular YouTube channel that tries to understand how things work: [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything].  Focusing on such an audience and introduce them gradually to the principles of OSE may be a good approach.  See the following [[Pieter log#Notes on Marketing|notes on marketing]].&lt;br /&gt;
&lt;br /&gt;
=Targeting an audience on YouTube=&lt;br /&gt;
&lt;br /&gt;
The following page describes how to target an audience on YouTube: [[YouTube#Targeting a specific audience|Targeting a specific audience]].&lt;br /&gt;
&lt;br /&gt;
=Feedback - Don Jacobsmeyer=&lt;br /&gt;
&lt;br /&gt;
You’ve articulated some of the “what”, you haven’t talked about the “who”. I’d encourage you to humanize this audience. Give one a name, talk about them by name. Let’s say Frank. &lt;br /&gt;
&lt;br /&gt;
Frank has X skills and Y social interests. He’s fascinated by the potential for ABC but hasn’t come across a highly actionable model to take X + Y and create a small scale version of ABC. So instead he finds himself toiling away on DEF which just frustrates him further because there’s no self fulfillment in it. &lt;br /&gt;
&lt;br /&gt;
Try to insert your other concepts in this narrative and see where it goes.  &lt;br /&gt;
&lt;br /&gt;
=Frank has X skills and Y interests...=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please write down below something that describes your goals, motivations, and needs - and how OSE&#039;s STEAM Camps or [[Summer X 2020]] can meet those needs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Profiles for different people:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Jeremy&#039;&#039;&#039; - Entrepreneur with a major DIY mindset.  I am looking for meaningful work that can impact society in a positive and ethical manner.  I have a large amount of discretionary time available 6 months per year.  I am interested in sharing knowledge, teaching and inspiring those around me with the incredible potential of OSE and Open Source Hardware.  I want to broaden others&#039; understanding of the world and to inspire young people with the myriad of possibilities that OSE projects/hardware makes available.  I hope to establish a makerspace/microfactory locally through bootstrapping and partnerships in my community.  The end goal is a self funding non-profit dedicated to advancing open source hardware development by involving and educating in the local community.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Don&#039;&#039;&#039; - &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Randy&#039;&#039;&#039; -  We hoard financial, material, and proprietary intellectual resources for financial gain.  Knowledge, comfort, energy and wealth have been created from intense generational effort and investment.  This benefited everyone somewhat.  How can we best use our discretionary time, attention, material and financial resources and clever ideas?  Entire continents lack even marginal shelter, food production, healthcare, water and power. Patent protection has attracted massive investment capital and innovators.  Open Source invites collaboration and sharing instead of hiding and hoarding.  It attracts a different group of participants.  This initiative is not attempting to build a few essential devices.  It aims to change the relative composition of users and producers in the local and worldwide economy for the benefit of all.  &lt;br /&gt;
&lt;br /&gt;
As a financial professional, mba, cpa, I have worked with established corporations, and a new company developing hydrogen energy and computer hardware and software.  I co-founded a consulting company with clients such as United Technologies, GE Plastics, Cytec, Mississippi Chemical, Rubbermaid, and Chrysler.  We observed and documented all manufacturing equipment.  I helped re-write the Constitution of the State of Hawaii as an elected delegate in 1978. I have an MA in Curriculum &amp;amp; Development, and taught math in urban public middle and high schools. I love supporting the vision of Marcin, Catarina, and others I have met as we continue to iterate and improve Open Source documentation, devices, structures, events, and participants. If you examine a graph of exponential growth, for a long time it appears as though there is almost no growth.  Suddenly growth explodes.  Open Source will follow that curve.  Open Source is practical, accessible, and inevitable.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Vasco&#039;&#039;&#039; &lt;br /&gt;
- &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Ian&#039;&#039;&#039; - I&#039;m a technologist and educator currently on the leadership team of a small charter-like high school. I am also the digital technology teacher at the school.  I am passionate about equipping youth (specifically indigenous youth) with the tools to create their own career pathways, having the technical skills to solve real-world problems and ultimately building the future that them, their family and communities want. I believe the OSE has the right vision and skill to empower a generation of collaborative innovators on a global scale that together could achieve any level of self-determined aspirations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Daniel&#039;&#039;&#039; - I&#039;d like to be able to build things. For myself, my family and friends, for my local community and for the wider society. Being able to build gives me an agency in the world that I am hungry for. It is a gateway to unleashed creativity, self-sufficiency and a more meaningful life. &lt;br /&gt;
&lt;br /&gt;
I&#039;d also like others to have the same opportunity. To get back in touch with their own creative power. To work together to actively solve the problems we face, rather than just tweet about it. Let&#039;s wake up and realise that the abundance we seek is within our grasp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Benoit&#039;&#039;&#039; - participant in [[Summer X 2020]] - I&#039;m interested in learning how things work and being able to replicate without the help of any black box. Replication (can be called reinventing the wheel) is interesting because it validates your understanding and gives more autonomy - relying too much on the technology of a hyper-specialized civilization is a bit like believing in magic. &lt;br /&gt;
&lt;br /&gt;
Also I enjoy it very much. So I got acquainted with some maths/algorithms, DIY signal processing, robotics, reverse eng, electronics; things that can be done in front a computer for the most part. At some point, interacting with the real world becomes necessary; with a limit set of resources and without a very broad set of skills it gets very difficult. &lt;br /&gt;
&lt;br /&gt;
In order to build useful and interesting machines/processes and make this knowledge available, without jumping through so many hoops, I&#039;m keen on learning manual skills, applied engineering and whatever else at the OSE STEAM Camp. Hopefully I&#039;ll also be useful with my less hardware oriented skills.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Jessica&#039;&#039;&#039; - Jessica is an urbanist, designer, sculptor, and community catalyst.  A licensed landscape architect,raised in the northern forests, trained in the legacy arts of stone carving and metallurgy, she understands the world as a continuum, and strives not to critique existing &#039;&#039;modus operandi&#039;&#039; but to replace them with something entirely new.  She teaches ecological systems to architecture and landscape architecture students where an understanding of how the abiotc, biotic, built/ social, and disturbance patterns create the unevenness of space we experience becomes a tool for design from global to detail scales. &lt;br /&gt;
&lt;br /&gt;
In her design practice that has taken her around the globe, she seeks models other than the traditional client and consultant roles to build, apply, and develop the most creative solutions imaginable to serve the community of &#039;&#039;place&#039;&#039;.  This has been the most challenging at home where progressive ideas are thrown around as political tactics and market forces are the rip tide to equity.  &lt;br /&gt;
&lt;br /&gt;
She has been looking for others who know what an engaged design process means and can do to empower a community.  In need of collaborators and expertise in electronics and programming to develop she trusts her intuition about OSE STEAM Camp and intends to share her experience and provide training for others who are interested in making the collective the five legged bottom line.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Mutton&#039;&#039;&#039; - Mutton is a movement entrepreneur interested in solving all of the world&#039;s most pressing grand challenges. He is fascinated by the potential of collaborative development, and thinks that all of the world&#039;s problems can be solved by first identifying them, and creating a school in which students work explicitly on tackling these problems. His mental model states that we must start at the level of how the world provides an economic basis for people - literally turning abundant dirt and twigs into the lifestuff of modern civilization. &lt;br /&gt;
&lt;br /&gt;
He has been looking for a way to fund a school based on a promise of distributed, relocalized, circular economies, and has discovered that people are willing to pay for applied, hands-on, entrepreneurial education. But right now, Mutton is missing the organizational support to translate his vision to build his school. He further wants to have no investors who are not direct stakeholders (either students or teachers) in the school - making startup harder. He has found that finding such direct stakeholders is difficult, so he decided to join the OSE STEAM Camps program to find more aligned people, so he can staff the school that he wants and populate it with students.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;#Jeff&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*[[Target Audience Braindump]]&lt;br /&gt;
*Announcement for STEAM Camp instructors by [[Andreas Log]] - how do we vet that through the above? [https://docs.google.com/document/d/169v3knwWDK0OhecMQTPpzW6e-mVABCA82UOvMlfiqPk/edit#]&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=YouTube&amp;diff=215111</id>
		<title>YouTube</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=YouTube&amp;diff=215111"/>
		<updated>2020-03-29T08:43:10Z</updated>

		<summary type="html">&lt;p&gt;Pieter: Targeting a specific audience&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OSE YouTube channel is OpenSourceEcology: https://YouTube.com/user/OpenSourceEcology&lt;br /&gt;
&lt;br /&gt;
== Adding Annotations and Links ==&lt;br /&gt;
&lt;br /&gt;
[https://support.google.com/youtube/answer/6035690?rd=1 Google Support]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Social Media]]&lt;br /&gt;
&lt;br /&gt;
==Embedding Youtube in the Wiki==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;560&amp;quot; height=&amp;quot;315&amp;quot; src=&amp;quot;&lt;br /&gt;
https://www.youtube.com/embed/NWRtvaJ8iHo&lt;br /&gt;
&amp;quot; frameborder=&amp;quot;0&amp;quot; allow=&amp;quot;autoplay; encrypted-media&amp;quot; allowfullscreen&amp;gt;&lt;br /&gt;
&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Targeting a specific audience==&lt;br /&gt;
&lt;br /&gt;
This section discusses some ways that may help to target a specific audience.  For example, an audience that is aligned with OSE is the audience for the YouTube channel:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything]&lt;br /&gt;
&lt;br /&gt;
A naive way to bring OSE under the attention of this audience is to create a description of an OSE YouTube video that aligns with the audience of How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view the OSE video may receive recommendations of HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending the OSE video to HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, this may not be very effective.  Instead, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215110</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=215110"/>
		<updated>2020-03-29T08:07:47Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Sunday 29 March 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 29 March 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize ==&lt;br /&gt;
&lt;br /&gt;
Another idea we developed during the Belize workshop is to have a Gantt chart available of all the steps.  This would show you the dependencies between all the tasks, what can be done in parallel, how many teams you need to have, etc.  To create this, we would need open source project planning software.&lt;br /&gt;
&lt;br /&gt;
= Sunday 22 March 2020=&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=214140</id>
		<title>Pieter log</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Pieter_log&amp;diff=214140"/>
		<updated>2020-03-22T20:22:39Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Saturday 22 March 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sunday 22 March =&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
Adding more feedback forms to the wiki:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
== Maintaining the log ==&lt;br /&gt;
&lt;br /&gt;
Maintaining this log based on all my written notes.  &lt;br /&gt;
&lt;br /&gt;
== Notes on Marketing ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been discussing marketing with Brett and Marcin on Thursday 26 February on the bus ride from Copper Bank to Belize City.  After having thought of this topic a bit, I came to the conclusion that I strongly believe that the full mission of OSE only appeals to a small group of people resulting in a small market.  It does not mean that the full mission is bad, it is just that I think many people are not yet ready for the full extent of the OSE ideas.&lt;br /&gt;
&lt;br /&gt;
However, I notice a trend towards using less of modern technology and towards more primitive technology, for example: traditional carpentry with hand tools, traditional barbers, etc.  This is something that appeals to me too and I have the feeling that for many people, life has become a bit too technological in the sense that we cannot understand it anymore.  Current technology almost seems too complex for people to handle and it seems that people want to either move back to something they can understand or that they want to understand current technology.&lt;br /&gt;
&lt;br /&gt;
I believe these people form a far larger market and if you try to appeal to just the interest of understanding technology you might capture a far greater audience.&lt;br /&gt;
&lt;br /&gt;
Examples of YouTube channels that tap into this interest are:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA Primitive Technology], a very fundamental approach to understanding technology&lt;br /&gt;
* [https://www.youtube.com/watch?v=kNp0HETeq6M&amp;amp;list=PLLXfVEsLI-qRC_MAQZcVxpjtF7I1-H6Gw How To Make Everything], a more pragmatic approach that recently started from the Stone Age to now&lt;br /&gt;
&lt;br /&gt;
These channels have lots of viewers and I&#039;m sure that many of them would be interested in understanding 3D-printers, understanding how to make your own PCB, understanding a light dimmer, making your own tablet, etc.&lt;br /&gt;
&lt;br /&gt;
In a sense what I&#039;m proposing is to &amp;quot;grow our audience&amp;quot;.  First we have to capture a larger audience that is open to understanding more of technology.  The two channels above show that there is a large audience for that.  After that, this audience can become aware of the bigger picture that OSE puts forward, namely that our lack of understanding leads to unfair competition, monopoly and an imbalance between people.  Actually, the current Corona crisis accentuates the current problem where we lack understanding of how ventilators work and of how many of them we need.  The following interesting article discusses that we don&#039;t know anymore how ventilators work, now that we really need them:&lt;br /&gt;
&lt;br /&gt;
https://www.vice.com/en_us/article/wxekgx/hospitals-need-to-repair-ventilators-manufacturers-are-making-that-impossible&lt;br /&gt;
&lt;br /&gt;
This article is an opportunity to show why we need OSE, perhaps we could contact the author to tell them that OSE works on an alternative economy where we wouldn&#039;t have these kinds of problems.&lt;br /&gt;
&lt;br /&gt;
Concretely my thoughts on capturing this greater audience are as follows:&lt;br /&gt;
&lt;br /&gt;
My initial, probably naive, guess was that you create a description of the YouTube video that aligns with the audiences of for example Primitive Technology (PT) or How To Make Everything (HTME).  Then if you add links in the description to these channels, people that view your video will start viewing the PT video or HTME videos.  Hopefully, YouTube&#039;s recommendation algorithm picks that up and reverses the relation and starts recommending your video to the PT or HTME audience.&lt;br /&gt;
&lt;br /&gt;
However, the following links are probably much better in providing insight in how to target a specific audience:&lt;br /&gt;
&lt;br /&gt;
* https://de.slideshare.net/AlexanderRus/how-to-rank-videos-on-youtube-and-in-google-search&lt;br /&gt;
* https://backlinko.com/how-to-rank-youtube-videos&lt;br /&gt;
&lt;br /&gt;
= Saturday 7 March 2020 =&lt;br /&gt;
&lt;br /&gt;
Transcribing the forms with suggestions for the CEB Microhouse Build in Belize and consolidating them:&lt;br /&gt;
&lt;br /&gt;
* [[Transcription Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
* [[Consolidation Suggestions CEB Microhouse Build in Belize]]&lt;br /&gt;
&lt;br /&gt;
=Wednesday 26 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 5 ==&lt;br /&gt;
&lt;br /&gt;
Parallelism was kind of gone.  Luke was mainly the lead in attaching the purlins.  After lunch I helped attaching the purlins and helped lift up the metal sheets.  The metal sheets were attached with screws with a rubber attachment to prevent water leaking through.&lt;br /&gt;
&lt;br /&gt;
During conversation with various people I&#039;ve received quite some references to things that I should check out:&lt;br /&gt;
&lt;br /&gt;
* Projects&lt;br /&gt;
** [https://en.wikipedia.org/wiki/GravityLight Gravity Light]&lt;br /&gt;
* Movies&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Force_Majeure_(film) Force Majeure (2014)]&lt;br /&gt;
** [https://en.wikipedia.org/wiki/Equilibrium_%28film%29 Equilibrium (2002)]&lt;br /&gt;
* Books&lt;br /&gt;
** The Zero Marginal Cost Society - Jeremy Rifkin&lt;br /&gt;
** Lo-TEK: Design by Radical Indigenism - Julia Watson&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also recommended many people to read the following book:&lt;br /&gt;
&lt;br /&gt;
* Factfulness - Hans Rosling&lt;br /&gt;
* [https://www.ted.com/talks/hans_rosling_the_best_stats_you_ve_ever_seen Hans Rosling TED talk]&lt;br /&gt;
&lt;br /&gt;
The book explains that the world is still a bad place but that it is much better than you think.  The title is a play on mindfulness and tries to bring you calmness with facts.  Being in Belize was very insightful after having read this book.  Belize is clearly a &amp;quot;level 3&amp;quot; country where the daily income is around $16 and many people can afford a car.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 25 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 4 ==&lt;br /&gt;
&lt;br /&gt;
Instead of carpentry I decided that I wanted to learn stucco.  Dustin showed a technique where you hold the hawk diagonally toward the wall and use the trowel to smear the stucco upwards on the wall.  Ultimately, I preferred Ethan&#039;s method.  Ethan explained that stucco stuck well to the wooden hawk but that it slid of the trowel because it was magnesium.  Ideally you want that to be more sticky as well.  You then smear it on with quite some pressure.  We had a good working method with two people applying the stucco and one person feeding the stucco onto the hawks of the two other ones.&lt;br /&gt;
&lt;br /&gt;
In the end of the day parallelism was kind of gone.  The trusses needed to be put up.  This was quite dangerous because they were very heavy.  With Scott I planned on how to back up the trailer and asked Gaby if she or Aidan could back it up.  In the end we decided that it was probably faster to carry the trusses and that&#039;s what we did.  We lifted four of the five trusses up the house and attached them.  Unfortunately something went wrong with the communication and the trusses were placed flush with the back wall, discarding the planned overlap of 2.5 and 1.5 inches on front and back.  Another thing that went wrong was that the j hooks sticking out of the bond beam were too close to the edge.  Because of this, we needed to chisel out part of the horizontal beam of the trusses to make place for the large bolts on top of the wood on top of the bond beam.&lt;br /&gt;
&lt;br /&gt;
=Monday 24 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 3 ==&lt;br /&gt;
&lt;br /&gt;
I wanted to do some carpentry but before that we had to come-up with a plan for the wire mesh on top of the wall.  On top of the wall we would pour the concrete for the bond beam and it would be best if the wire mesh would be inside the bond beam.  At first, the idea was to find stones with a similar height and put the wire mesh on top of those stones.  We would make two rows of these stones and the wire mesh would be on top of it.  Rebar could go on top of the wire mesh.  However, the frame of the bond beam was created with wooden cross-bars that would lie on top of the blocks.  Having a heightened piece of wire mesh would disallow the wooden cross-bars to be on top of the blocks creating gaps from which the concrete would escape.  The solution was to remove the stones underneath the wire mesh, put the frame with the wooden cross-bars on top of wire mesh, put the rebar on top of the wooden cross-bars and lift the wire mesh as much as possible by tying it to the rebar.  A big drawback of this approach is that once the concrete is poured in, the wooden cross-bars are still inside the concrete and at some point they may rot and start smelling.  This was not an ideal situation.&lt;br /&gt;
&lt;br /&gt;
For the carpentry I worked with Brett, Jamie, and Nathan to create eight trusses.  We found out that the wood was very unevenly cut, making this more difficult than necessary.  The wood was very hard and heavy and because of this we deviated from the plan by putting the vertical beam and the diagonal beam on top of the horizontal one instead of side-mounting the diagonal and vertical beam to the bottom one.  The reasoning was that the diagonal and vertical beam would rest on the horizontal one.  We had lots of discussions on the design, on how to deal with the uneven wood, and on what measurements to use.  We decided to have 1.5 inch overhang on the back and 2.5 inch on the front.  Because of all the discussions and the decisions to make we only had three done in the end of the day.&lt;br /&gt;
&lt;br /&gt;
Getting the nails into the wood was more difficult than expected.  We tried three techniques: pre-drilling holes, pre-screwing, and just hammering in the nails.  All was kind of the same.  What made a real difference was lubricating the nails with old motor oil.&lt;br /&gt;
&lt;br /&gt;
=Sunday 23 February 2020=&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 2 ==&lt;br /&gt;
&lt;br /&gt;
Finishing the walls first.  We then worked on the safety net.  The frame of the door already contained a piece of chicken wire.  The goal was to attach the roll of chicken wire to this piece of chicken wire and attach it to the strands of wire sticking out of the wall.  The foundation had pieces of metal sheet with holes sticking out on the inside and outside.  The chicken wire needed to attached to this as well.  Tying the chicken wire to the bottom metal, the door and window frames, and to the wires sticking out of the wall was very labor intensive.  We also used staples to nail the chicken wire to the wall.  Later, we learned that the spacing between the chicken wire and the wall is important for the stucco.  I wasn&#039;t aware that the chicken wire had 2 functions.  Essentially, we worked on this all day but couldn&#039;t get it finished.  &lt;br /&gt;
&lt;br /&gt;
In the end of the day I helped out pouring concrete on top of the door.  There was a frame for the concrete to be poured in, the frame contained rebar and the J hooks.  We used a chain of people to transport the concrete to the frame, poured it in, and &#039;stirred&#039; it to get the air out.&lt;br /&gt;
&lt;br /&gt;
= Saturday 22 February 2020 =&lt;br /&gt;
&lt;br /&gt;
== CEB Microhouse Build in Belize, Day 1 ==&lt;br /&gt;
&lt;br /&gt;
The first day of the CEB Microhouse Build in Belize.  We first listened to an introduction by Marcin.  We then visited the site and started the work.  The main task of today was building up the walls by laying bricks.  There were three kinds of bricks: unstabilized, 5% stabilization, and 10% stabilization.  We called the 10% stabilized blocks as such, but in actuality they were 8% stabilization.  The stabilization was done by mixing Portland concrete.  Besides these three variants, there was a pile of thin bricks for the floor.  In the pile of regular blocks there were thicker and thinner ones with which we could fill up gaps.  The first task was to figure out which bricks had to go where.  The four walls needed the bottom to be the most stabilized ones, so we were setting up block chains (a chain of persons handing over blocks) to distribute them to the four walls.&lt;br /&gt;
&lt;br /&gt;
After the slurry was made, we applied what we called the &amp;quot;drip-and-rip&amp;quot; technique: We dipped the block in slurry and laid them out.   We used a board on the back side of the wall (the inside of the house) to ensure a straight wall.  A problem with this set up was that the board needed to be lifted up for each row of bricks.  The beams to which the board was screwed was the typical Belizean hardwood which resulted in screws with a botched head causing us unable to remove the board.  We changed to a technique where would just rest the board on a screw and using an initial loose block to keep the board in place.  This technique had the drawback that you have to pay attention that the board is in place when starting a new row.  The benefit was that we didn&#039;t need to remove the screws on which the board rested.  Every two layers we laid out two cross-winded wires for the earthquake safety net.  We finished 75% of the wall.  &lt;br /&gt;
&lt;br /&gt;
A problem was that we couldn&#039;t control the height over the length of the wall.  Walls became easily higher on one side due to the amount of slurry on that side.  Another problem was the overlap between the various rows of blocks.  It was very difficult to keep the overlap consistent and we would need to find thinner blocks all the time to maintain overlap.  Perhaps a different pattern would have been better and stronger.&lt;br /&gt;
&lt;br /&gt;
=Sunday 2 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Please upload the KiCad file for the Arduino}}&lt;br /&gt;
&lt;br /&gt;
Yesterday, we finalized setting up the printer to perform the milling.  Today it is only a matter of running it.&lt;br /&gt;
&lt;br /&gt;
Holger showed me some nice etched boards that he plotted with the Universal.  Very impressive, but the quality is not good enough to really use.  There are many things to fine-tune.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the printer did not behave as expected.  After going over the whole process again, fine-tuning the set up and the process, we still couldn&#039;t make it work.  It turned out that the &amp;quot;Set home offsets&amp;quot; function did not behave as expected.  What I want is to tell the printer that the current position of the head should be regarded home, so in our case (0, 150, 0).  However, for some reason the Z-axis did not follow this and remained at the same height as before.  This caused the drill to move into the board.  We could actually see a nice cut going on.  After several more experiments, we came to the conclusion that we can&#039;t make it work properly if this &amp;quot;Set home offsets&amp;quot; doesn&#039;t work: it would mean endless tuning and together with the motors releasing power at unexpected times, this would not work.  To make this work, it is important to inspect the firmware and the meaning of &amp;quot;Set home offsets&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We finally made the Arduino work as expected using the schematic [[File:Schematic-arduino.pdf]].  We can press the reset button manually and then non-deterministically the board will reset.&lt;br /&gt;
&lt;br /&gt;
Outlook for after the STEAM Camp.  I will focus mainly on improving the Universal and then specifically on improving the print quality.  I want to fine-tune and calibrate the printer such that it can print parts for a second Z-axis.  After that, I want to improve the print-quality even further having more control over the positioning of the X-axis with the second Z-axis.  After that, I want to print all parts with the Universal itself, bootstrapping the printer so to speak.&lt;br /&gt;
&lt;br /&gt;
=Saturday 1 February 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|Thanks for uploading KiCad, SVG files, and tutorial. Please also upload your FlatCAM file, and Gcode (generated by Inkscape and FlatCam).}}&lt;br /&gt;
&lt;br /&gt;
I&#039;ve installed FlatCAM on Arch Linux, made sure that the already printed drill holder can hold the sensor (the hole was too small).  I tried to make it bigger with a Dremel, but it was much easier to saw a gap that can be easily increased with a screwdriver.  The holes for the nuts are also to small.  We pressed them in with a heat gun.  We connected the drill to 12V and it seems to work.&lt;br /&gt;
&lt;br /&gt;
Experimenting with a workflow from KiCad/FlatCAM to G-Code.  At first, we tried to apply it to the Arduino circuit, later we switched to the dimmer circuit that Holger was designing.  Helped out finalizing this design.&lt;br /&gt;
&lt;br /&gt;
In KiCad we export the back cupper layer of the circuit design to Gerber files.  We open this in FlatCAM and for some reason the y-axis is negative.  This will result in G-Code that the Universal cannot handle and this has to be rectified.  In the Project tab there is now one layer turned on and therefore visualized (the checkbox turns it on).  In addition, the layer is selected and this selected layer can be edited in tab &amp;quot;Selected&amp;quot;.  In the bottom part of this tab, we can adjust the negative y-axis problem by pressing &amp;quot;Offset auto&amp;quot;.  We can also move the circuit more to the center of the print bed by inserting values (60.0, 60.0) and press &amp;quot;Offset&amp;quot;.  I expected the Gerber files to be automatically mirrored for the back side, but this has to be done manually as well in section &amp;quot;Mirror&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that we have done this, we can apply isolation routing.  It is wise to check the feasibility of the routing by inserting the right diameter of the tool to use.  We used a 1.0 mm drill bit that was not completely stable at the tip, so the effective diameter is probably more than 1.0 mm. We can generate the isolation routing layer by choosing &amp;quot;Generate geometry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This will show the routing in the color red and in the &amp;quot;Project&amp;quot; tab a new layer has been added with the suffix &amp;quot;_iso&amp;quot;.  Now that we defined the isolation layer, we are ready to create a CNC job with G-Code.  We used the following values in &amp;quot;Create CNC Job&amp;quot;:&lt;br /&gt;
* Cut Z: we haven&#039;t experimented with this value yet.  The standard value of -0.002 seems very low.&lt;br /&gt;
* Travel Z: 4.0mm, the drill moves up 4 mm.&lt;br /&gt;
* Feed rate: 50, we let the drill move very slowly&lt;br /&gt;
* Tool dia: 1.0mm&lt;br /&gt;
&lt;br /&gt;
When we press &amp;quot;Generate&amp;quot;, we will get another layer with suffix &amp;quot;_cnc&amp;quot; that shows the path of the drill.  From here, we generate GCode.  We choose 30s for dwell and press &amp;quot;Export G-Code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This G-Code needs to be adapted a bit to let it work properly with the universal:&lt;br /&gt;
* In the beginning, the statement &amp;quot;F 50.0&amp;quot; has to be changed to &amp;quot;G0 F50.0&amp;quot;.  We also move this a bit backward to make the first move of the head (in the air) faster.&lt;br /&gt;
* In the end, the statement G00 X0Y0 has to be replaced with G00 X0Y75 to make sure that the head does not move to 0, 0 that we don&#039;t have.&lt;br /&gt;
We can now load the G-Code to SD-card and prepare the Universal:&lt;br /&gt;
&lt;br /&gt;
* Adjust the Z axis such that the drill is close to the print bed, 0.2 mm or so.  Adjust the Z-sensor such that it switches on without the drill touching the print bed.&lt;br /&gt;
* Do auto home&lt;br /&gt;
* Do bed-leveling&lt;br /&gt;
* Do auto home again&lt;br /&gt;
* Move Z up and place the material to cut&lt;br /&gt;
* Move Z down with the drill just touching the surface&lt;br /&gt;
* Set home offsets&lt;br /&gt;
* Move Z up 4 mm&lt;br /&gt;
&lt;br /&gt;
In the meantime I&#039;m helping Unai to get the breadboard Arduino working.  This turns out to be more difficult than thought.  For some reason we cannot get it to work properly.  We rewired everything to the specification [[File:Schematic-arduino.pdf]] but we ran out of time to really try.&lt;br /&gt;
&lt;br /&gt;
=Friday 31 January 2020=&lt;br /&gt;
&lt;br /&gt;
Found out that I used the front copper wires in KiCad instead the back copper wires.  I adjusted all lines.&lt;br /&gt;
&lt;br /&gt;
Found out how to create an SVG that we can use with the gcode exporter in InkScape.  Instead of plot, we do File -&amp;gt; Export SVG. &lt;br /&gt;
&lt;br /&gt;
To create a decent SVG that can be used for edging, we select the back copper layer, select Black and White, Current page size (which should be 150x150mm to make sure we can align the drill holes), and Print Mirrored.&lt;br /&gt;
&lt;br /&gt;
The KiCad files of the Arduino board with a small tutorial: [[File:Arduino-project-build-arduino.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are trying to create an outline of the copper paths to try to mill away the copper with the drill.  Michel is manually editing the SVG file as we cannot find a good way to do this automatically, again because of the poor quality of the KiCad svg.&lt;br /&gt;
&lt;br /&gt;
We found a way to get a clean SVG for generating gcode:&lt;br /&gt;
* In KiCad, we remember the track width that we chose (0.5 mm)&lt;br /&gt;
* We choose plot and plot the B.Cu layer in SVG format and mirror it with a default line width of 0.5 mm.&lt;br /&gt;
* Load the file in Inkscape&lt;br /&gt;
* Select all with C-a and ungroup everything with C-S-g&lt;br /&gt;
* Do Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Enable a stroke and make everything black&lt;br /&gt;
* The width in stroke style is 100%, we make that 0.5 mm by first choosing mm as the unit and then set the value to 0.5.&lt;br /&gt;
* Disable the fill.&lt;br /&gt;
&lt;br /&gt;
Berber had a much better way:&lt;br /&gt;
&lt;br /&gt;
Lines and circles may be different, so treat them differently&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Stroke Color (This works because all the other components only have fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* Group these with C-g&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style.  Take away the fill to get a nice circle.&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Actually, the above method still doesn&#039;t work.  We need objects that do not have fill and only stroke:&lt;br /&gt;
* Select all and ungroup multiple times&lt;br /&gt;
* Select a line, it will have a fill and a stroke&lt;br /&gt;
* Select all lines by Edit -&amp;gt; Select Same -&amp;gt; Fill and Stroke&lt;br /&gt;
* Convert them to only having a stroke by disabling the fill&lt;br /&gt;
* Group them with C-g&lt;br /&gt;
* Select one circle with this weird endcaps&lt;br /&gt;
* Select all of them with Edit -&amp;gt; Select Same -&amp;gt; Fill Color (this works because all the other components have no fill)&lt;br /&gt;
* Convert them to only having a fill by doing Path -&amp;gt; Stroke to Path&lt;br /&gt;
* We give them a stroke and disable the fill.&lt;br /&gt;
* We give them a stroke of 0.5mm in Stroke style by first selecting mm and then give the value 0.5&lt;br /&gt;
* To generate gcode it is necessary to ungroup everything (C-S-g).&lt;br /&gt;
&lt;br /&gt;
Converting this to an outline can be done in the following way:&lt;br /&gt;
* Select all, and ungroup&lt;br /&gt;
* C-k to combine&lt;br /&gt;
* Path -&amp;gt; Stroke to Path (or C-A-c)&lt;br /&gt;
* Remove the fill and enable a stroke&lt;br /&gt;
* Set the stroke style to 0.2 mm&lt;br /&gt;
&lt;br /&gt;
For some reason some dots are still in the way that need to be removed manually.  Since we have a workflow from KiCad to SVG to gcode, it may be worth investing in letting KiCad produce better SVGs.&lt;br /&gt;
&lt;br /&gt;
I found out that there is a name to what we are trying to achieve: isolation routing, cutting away pieces of copper to create lines. I also found out that Flatcam can generate gcode from Gerber files.  Tomorrow I&#039;m going to install Flatcam, generate Gerber files from my KiCad design and load it into Flatcam to generate gcode.&lt;br /&gt;
&lt;br /&gt;
=Thursday 30 January 2020=&lt;br /&gt;
&lt;br /&gt;
{{Hint|The solution here is to use the proper printer profile which sets the steps/mm in the Start Gcode of Cura. Use [[File:D3duniversal 8.ini]] and use File-&amp;gt;Open Profile... in Cura on OSE Linux or on Lulzbot Cura Linux Edition. Follow the degenerate OSE toolchain to avoid any discrepancies.}}&lt;br /&gt;
&lt;br /&gt;
Change the firmware to use 100 steps/mm for the extruder.  The diff is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/src/Marlin_Universal/Configuration.h b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
index 94ad793..fc3fe50 100644&lt;br /&gt;
--- a/src/Marlin_Universal/Configuration.h&lt;br /&gt;
+++ b/src/Marlin_Universal/Configuration.h&lt;br /&gt;
@@ -486,7 +486,7 @@&lt;br /&gt;
    Override with M92&lt;br /&gt;
                                         X, Y, Z, E0 [, E1[, E2[, E3]]]&lt;br /&gt;
 */&lt;br /&gt;
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 100 }&lt;br /&gt;
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 80, 425 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
    Default Max Feed Rate (mm/s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tried printing and the result is better than before.  I am interested in sending manual gcode to the printer.  I&#039;ve asked around using email.&lt;br /&gt;
&lt;br /&gt;
Uploaded three outputs of a KiCad project for an Arduino on a stripboard.  Unfortunately this was done on a newer KiCad version than OSE supports, but this at least documents what I&#039;ve done.&lt;br /&gt;
* [[File:Schematic-arduino.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-front.pdf]]&lt;br /&gt;
* [[File:Layout-stripboard-arduino-back.pdf]]&lt;br /&gt;
&lt;br /&gt;
Redoing the KiCad for a real PCB and not a stripboard in OSE&#039;s KiCad.  KiCad exports a horrible SVG with 0 length lines with end caps.  It looks ok in InkScape, but when creating gcode from it, it isn&#039;t visible.&lt;br /&gt;
&lt;br /&gt;
I also gave a brief tutorial on what I know of KiCad (which isn&#039;t much, but just enough to create a PCB design).&lt;br /&gt;
&lt;br /&gt;
Holger is able to create a different SVG.&lt;br /&gt;
&lt;br /&gt;
=Wednesday 29 January 2020=&lt;br /&gt;
&lt;br /&gt;
Updating the log.  Benedikt has his first print.  We found out that the STL file from Don&#039;s pen holder design is very bad with holes.  Michel is trying to clean it up.&lt;br /&gt;
&lt;br /&gt;
The diode between and behind the X and Y motor drivers has to be cut because we provide the RAMPS board with 24V instead of 12V.  It then also powers the arduino.  We cut the diode to prevent the RAMPS to power the Arduino.  We power the arduino manually.&lt;br /&gt;
&lt;br /&gt;
My X axis doesn&#039;t move properly anymore.  Changing the small driver shield seems to work.  Unfortunately, when doing a test print, it is apparent that it doesn&#039;t work properly.  If it is not the driver, then it could be the board.  Changing the board encompasses removing the diode, and inserting jumpers.  We also used E0 as the extruder which means that the original firmware should be uploaded again.  This resulted in good movement of the axes, but unfortunately the extruder doesn&#039;t move.  There are two hypotheses:&lt;br /&gt;
# The firmware wasn&#039;t correctly uploaded, so it still has the old firmware.  This can be confirmed by trying E1 for the extruder.&lt;br /&gt;
# Not only the board was fried, but the Arduino behind was also fried.  This can be confirmed by changing the board.&lt;br /&gt;
&lt;br /&gt;
Changing from E0 to E1 didn&#039;t work, so we discard hypothesis 1.  We changed the Arduino but it started to behave badly.  It was in a boot loop making a sound every half second or so.  Connecting the board to the computer also gives us this boot loop.  Our conclusion is that coincidentally this Arduino is bad.  After changing it, it appears to work well.  The printer is printing.&lt;br /&gt;
&lt;br /&gt;
Discussion with Marcin where I proposed to use [https://semver.org/ Semantic Versioning].  The benefit of semantic versioning is that you can see that a project is in the incubation stage (version 0.*.*), whether it is a major API breaking modificiation (for example, moving from 1.2.3 to 2.0.0), an added feature (for example from 1.2.5 to 1.3.0) or a bugfix (for example from 3.2.3 to 3.2.4).&lt;br /&gt;
In addition it may be possible to use git for keeping versions more in check.  Some of the wiki pages are inconsistent over versions.  Using a versioning system such as git could help with this and I would propose to create a Makefile or something that generates wiki pages automatically with all the releases.  The wiki can then interact as a kind of a bridge between &#039;regular users&#039; that understand a wiki and &#039;power users&#039; that try to keep all the versions in check.&lt;br /&gt;
&lt;br /&gt;
Just printed the extruder cooler with a mount for the Z-sensor and the pen holder.  It turned out pretty good, but I have a bit higher flow rate than preferred.  The current flow rate is 425 steps/mm for the extruder.  We are marking the filament at 100 mm above the extruder and are trying to extrude 50 mm.  Strangely enough, much more is extruded than preferred.  Let&#039;s debug this more thoroughly:&lt;br /&gt;
I can only use increments of 4 mm, so let&#039;s extrude 20 mm.  We record the distance the extruder makes then as: 83 mm.  If you look in the settings of the amount of steps, the X, Y, and  Z have 80 steps/mm, and the extruder 425 steps/mm.  However, the diameter of the belt attachment on the motor axis is not that much more than on the extruder axis.  Clearly there is some form of multiplication factor.&lt;br /&gt;
&lt;br /&gt;
Holger&#039;s printer has perfect extrusion and performing the same measurement on his printer, extruding 20 mm, results in 85 mm actually extruded.  I expected this to be a lower value.  Asking in an email if someone knows what is going on, I got a reaction from Luke that exlained to me that the value really has to be 100 steps/mm.&lt;br /&gt;
&lt;br /&gt;
=Tuesday 28 January=&lt;br /&gt;
&lt;br /&gt;
We are reducing the voltage on the motor drivers.  0.4V for X, Y, and the extruder.  Marcin says 1.0 for the two Z motors, but the Universal has only one Z motor, so we put it to 0.5V.  We can measure directly on the pot meter instead of the measuring point that requires us to remove the heat sink.&lt;br /&gt;
&lt;br /&gt;
I accidentally fried something while measuring the voltage of the extruder: smokes and sparks.  After experimenting it turned out that the extruder didn&#039;t work.  Exchanging drivers didn&#039;t work.  Rewrote the firmware to use E1 instead of E2.  The diff in the firmware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;diff --git a/src/Marlin_Universal/pins_RAMPS.h b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
index da14a6d..31569a2 100644&lt;br /&gt;
--- a/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
+++ b/src/Marlin_Universal/pins_RAMPS.h&lt;br /&gt;
@@ -105,15 +105,15 @@&lt;br /&gt;
 #define Z_ENABLE_PIN       62&lt;br /&gt;
 #define Z_CS_PIN           40&lt;br /&gt;
 &lt;br /&gt;
-#define E0_STEP_PIN        26&lt;br /&gt;
-#define E0_DIR_PIN         28&lt;br /&gt;
-#define E0_ENABLE_PIN      24&lt;br /&gt;
-#define E0_CS_PIN          42&lt;br /&gt;
-&lt;br /&gt;
-#define E1_STEP_PIN        36&lt;br /&gt;
-#define E1_DIR_PIN         34&lt;br /&gt;
-#define E1_ENABLE_PIN      30&lt;br /&gt;
-#define E1_CS_PIN          44&lt;br /&gt;
+#define E0_STEP_PIN        36&lt;br /&gt;
+#define E0_DIR_PIN         38&lt;br /&gt;
+#define E0_ENABLE_PIN      30&lt;br /&gt;
+#define E0_CS_PIN          44&lt;br /&gt;
+&lt;br /&gt;
+#define E1_STEP_PIN        26&lt;br /&gt;
+#define E1_DIR_PIN         28&lt;br /&gt;
+#define E1_ENABLE_PIN      24&lt;br /&gt;
+#define E1_CS_PIN          42&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Temperature Sensors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically, we switched the pins for E0 and E1.  This turned out to work but we know that my RAMPS board is partially fried.&lt;br /&gt;
&lt;br /&gt;
Holger had flakey motor wire connections probably because of the rewiring of the cables.  The motor made a bad noise and didn&#039;t move properly.  Pressing them in a bit more worked. &lt;br /&gt;
&lt;br /&gt;
FreeCad introduction by Michel.  I designed a simple filament holder end-stop. &lt;br /&gt;
&lt;br /&gt;
Moving on to the pen holder.  Don posted a design that I&#039;ve printed.  This is a rather large print.  First two attempts failed because of the wrong closeness to the print-bed. Third one ran fine but the print was of very low quality.  The print head dropped on the print itself messing up the tension of the belt.  After retensioning the belt, the X-axis doesn&#039;t work properly anymore.  After switching ports from X and Y, the Y axis behaves bad while the X-axis behaves properly.  We can conclude that the motors are ok.  The driver may be messed up or the board itself (that was already partially fried).&lt;br /&gt;
&lt;br /&gt;
Beber had to build the board from scratch, so he needed to cut the diode that sits between the X and the Y motor driver part.  Unfortunately, he didn&#039;t know that it is required to bridge the three pins underneath each motor to enable microstepping, so he was dealing with very fast motors or no movement at all.  After bridging these, the motors work fine. &lt;br /&gt;
&lt;br /&gt;
Benedikt was dealing with a nozzle that did not reach the bed, because blower was lower.  In addition, the Z sensor had a problem with the board.  Holger and Benedikt rewired the Z ports in the firmware.  Pins 18 and 19 were switched in a similar way as above.&lt;br /&gt;
&lt;br /&gt;
=Monday 27 January=&lt;br /&gt;
&lt;br /&gt;
Debugging printer issues: &lt;br /&gt;
* After a print the print-head keeps falling.  &lt;br /&gt;
* The print head moves out of the dimensions of the board.&lt;br /&gt;
* The Z-axis probe should ALWAYS be within bounds of the print bed.  Otherwise the printhead will just move down.&lt;br /&gt;
&lt;br /&gt;
=Sunday 26 January 2020=&lt;br /&gt;
&lt;br /&gt;
Confusion about the motor wires.  The wires from the US are completely parallel, whereas the wires ordered from Europe are crossed in two different configurations.  A Reprap drawing showed us a crossed configuration.  Experimenting on the right setup led us to conclude that we need the parallel wires.  Rewired all the wrong wires but they are more brittle now.  We had problems with moving the axes: we could only move forward but not back on the X-axis.  This confused us a lot, but this had to do with the right configuration of the end-stops.&lt;br /&gt;
&lt;br /&gt;
Confusion about the axis set up and what &amp;quot;Home&amp;quot; was:  In the firmware, home turned out to be (0, 150, 6) instead of (0, 0, 6).  This, in combination with the wrong axes configuration was difficult to debug.  Confusion about the direction of the motors.  Cables can simply be turned.&lt;br /&gt;
&lt;br /&gt;
The Z-sensor didn&#039;t work properly.  We rewired it to 5V and then it behaved properly.  The led is clearly less bright on 5V and Marcin says that it is less reliable but we have a decent experience with 5V.  &lt;br /&gt;
&lt;br /&gt;
The configuration of the pins for the end-stops is:&lt;br /&gt;
* start X&lt;br /&gt;
* end X&lt;br /&gt;
* start Y&lt;br /&gt;
* end Y&lt;br /&gt;
* start Z&lt;br /&gt;
* end Z&lt;br /&gt;
&lt;br /&gt;
The right configuration of end-stops for us is:&lt;br /&gt;
&lt;br /&gt;
X-axis: put the end-stop close to the motor.  This would be our 0 point.  This means that we need to put the cable of this end-stop in the first pins with the green wire on top.&lt;br /&gt;
Y-axis: put the end-stop far from the board.  This would be our 150 point, so we have to put the cable in the 4th pins position.&lt;br /&gt;
Z-axis: This acts as a normal end-stop switch and it will determine our 0 point.  This means that we have to put it in the 5th pins position.&lt;br /&gt;
&lt;br /&gt;
We are able to make a view test prints but the motors are running hot.&lt;br /&gt;
&lt;br /&gt;
=Saturday 25 January 2020=&lt;br /&gt;
&lt;br /&gt;
Building the D3D-Universal.  Confusion on where to place the axes.  Z-axis sensors are a bit different than the spec, they rate 6-36V, whereas the spec should be 5V.  We have to connect the brown wire  directly to 24V, so soldering them in.  Adapt the power configuration since we are on 240V instead of 110V (US).&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Transcription_Suggestions_CEB_Microhouse_Build_in_Belize&amp;diff=214139</id>
		<title>Transcription Suggestions CEB Microhouse Build in Belize</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Transcription_Suggestions_CEB_Microhouse_Build_in_Belize&amp;diff=214139"/>
		<updated>2020-03-22T19:50:30Z</updated>

		<summary type="html">&lt;p&gt;Pieter: /* Feedback form 14 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
After the CEB Microhouse Build in Belize, all participants took some time to write down general feedback.  These feedback forms have been transcribed and consolidated in [[Consolidation Suggestions CEB Microhouse Build in Belize]].  This document contains the transcription of the feedback forms.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 1 ==&lt;br /&gt;
&lt;br /&gt;
* Defined plans which can be followed&lt;br /&gt;
* consideration of the equipment inventory&lt;br /&gt;
&lt;br /&gt;
Use checklist manifesto for maximizing build&lt;br /&gt;
People who are building their 1st house need a full list it equipment and materials and tools&lt;br /&gt;
&lt;br /&gt;
Prepare people of what is expected of them&lt;br /&gt;
Provide resources so those w/o required skills can get them&lt;br /&gt;
&lt;br /&gt;
Allow more time with rest periods&lt;br /&gt;
&lt;br /&gt;
tool and equipment inventory&lt;br /&gt;
&lt;br /&gt;
== Feedback form 2 ==&lt;br /&gt;
&lt;br /&gt;
=== CEB Construction Improvements ===&lt;br /&gt;
&lt;br /&gt;
* Site Cleanliness, clear site of trip hazards, loose rocks, branches, stack material in organized piles near enough to job site for easy retrieval but not too close as to be in the way.  (We had to move piles of bricks sometimes just to make space).  Clear debris away that could hide snakes, spiders, scorpions.&lt;br /&gt;
* Have a designated tool location everyone knows where to get tools and return them.  Should be at waist height to avoid bending and under a shaded area we waisted a lot of time tucking down tools, also show people/everyone how to use them!  People came here to learn, tool belts would be nice.&lt;br /&gt;
* same thing for safety equipment, helmets, ear plugs, glasses, masks, gloves, sunscreen, bug repellent and require their use.&lt;br /&gt;
&lt;br /&gt;
Before every job task have a demonstration to show everyone, not just a few people how to do it.  You&#039;re not learning how to build a house if you are only familiar with a few of the tasks.&lt;br /&gt;
&lt;br /&gt;
==== Brick laying ====&lt;br /&gt;
&lt;br /&gt;
String lines and plumb bobs are really required to get straight lines, square corners and level brings.  If enough time is spent explaining to people their importance and how to work around them it will result in a much beter product.  Have the teams of workers layout their job process and walking paths to avoid the string lines and crossing the path of others.&lt;br /&gt;
&lt;br /&gt;
==== Installing roof rafters and other work at heights ====&lt;br /&gt;
&lt;br /&gt;
Proper scaffolding with safety guards is key.  Workers on ground must wear helmets and must be taught to be aware and avoid crossing under elevated work areas.&lt;br /&gt;
&lt;br /&gt;
==== General Build ====&lt;br /&gt;
&lt;br /&gt;
There should be designated supervisors, preferably who have previous experience with building and CEBs, to lead the build and keep quality up.  This will increase productivity, learning and quality.  Eliminating the bottlenecks of everyone trying to find one person to ask questions of, supervisors might pay for room and board only to encourage their participation.&lt;br /&gt;
&lt;br /&gt;
There should be at least 2 sets of job drawings on site at all times for review.&lt;br /&gt;
&lt;br /&gt;
The daily schedule advertised online &#039;&#039;&#039;must&#039;&#039;&#039; be followed no matter what people came based on this schedule and require more time for learning, conversation, and recovery, not following the schedule is false advertising.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Planning ===&lt;br /&gt;
&lt;br /&gt;
Upfront, everybody should have studied the plans.  Or at least, there should be good access to the plans.  The plans could be extended with a &amp;quot;reasoning&amp;quot; section that explains why certain decisions were made.  The plans should highlight critical decisions, such as how the J-hooks are placed, possibly again with reasoning: It is not an Ikea build where we trust the plan to be perfect.  The plans we have, need to be adjusted often.  Having a section witg the reasoning helps.  For example 8 trusses for holding the metal sheets without purlins or going with purlins, we can go with less: 5 trusses.  The rigid 5-day timeline does not really prove a point and it should either be longer or we should aim for less.&lt;br /&gt;
&lt;br /&gt;
=== Build site ===&lt;br /&gt;
&lt;br /&gt;
The build site should be cleaner and safer.  There were four safety incidents and especially with a community build, this should be prevented as much as possible.&lt;br /&gt;
&lt;br /&gt;
=== Laying bricks ===&lt;br /&gt;
&lt;br /&gt;
The wall is imprecise so we could just as well use a better pattern.  A line with instruction is probably a better idea than the boards behind.  Otherwise, a laser perhaps?&lt;br /&gt;
&lt;br /&gt;
=== Leadership ===&lt;br /&gt;
&lt;br /&gt;
Much time was lost in discussion.  This could have been prevented with everybody knowing the plan and the reasoning.  I propose to assign teams (small) working on something and make one the leader in a round-robin fashion.  The leader has a final say in the decision and for each new task, a new leader is appointed.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 4 ==&lt;br /&gt;
&lt;br /&gt;
Project&lt;br /&gt;
&lt;br /&gt;
=== #carpentry ===&lt;br /&gt;
* work flow&lt;br /&gt;
&lt;br /&gt;
=== #social ===&lt;br /&gt;
&lt;br /&gt;
=== #timeline ===&lt;br /&gt;
* during post&lt;br /&gt;
&lt;br /&gt;
#safety&lt;br /&gt;
&lt;br /&gt;
=== A work book ===&lt;br /&gt;
A living collaborative work book&lt;br /&gt;
As a signifier to respective project or aspect of&lt;br /&gt;
and time allocation to collaborate while we are there&lt;br /&gt;
&lt;br /&gt;
1) documentation centralized to a tangible workable degree printed off as [yogi&#039;s choice] ad-hoc event leaders version and time allocation throughout the day to work with groups to understand + learn the perspective and &amp;quot;methods behind the madness&amp;quot; of the + their respect over positions + contexts congnively, culturally psychologically&lt;br /&gt;
&lt;br /&gt;
beings also have come together to make their best book &lt;br /&gt;
and how the&lt;br /&gt;
&lt;br /&gt;
This is important to me because his is wat I believe to be functional transparency.&lt;br /&gt;
&lt;br /&gt;
Living collaborative&lt;br /&gt;
work book&lt;br /&gt;
as a signifier + also Aspect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback form 4 ==&lt;br /&gt;
&lt;br /&gt;
=== Learnings ===&lt;br /&gt;
&lt;br /&gt;
# Place bolts for top plate attachment closer to center of bond beam so trusses don&#039;t need to be trimmed&lt;br /&gt;
# Takes screws into stucco to make it closer to wall&lt;br /&gt;
# No 1-finger rule - set mesh closer to wall&lt;br /&gt;
# Note on truss, drawing of truss&lt;br /&gt;
# Scree entire wall to get it even (Not done)&lt;br /&gt;
# Put door in first&lt;br /&gt;
# Cut each end of the floor boards prior to putting them in loft&lt;br /&gt;
# The thing that worked the best was the Sade board&lt;br /&gt;
# The thing that the wort was lifting the backboard up&lt;br /&gt;
# worked great: pressure sprayer&lt;br /&gt;
# Make sure we get J-bolts in so ends are caught on both ends&lt;br /&gt;
# Make hawk for stucco - easy and fast to spread if you have 1 person feeding 2 stuccoers&lt;br /&gt;
# Super dry concrete worked great&lt;br /&gt;
# Chaining for laying block by carrying from to wall was effective.  But this should have been solved with proper pallet placement&lt;br /&gt;
# Learning: Using 1&amp;quot; thick lumber instead of 2x would have worked.&lt;br /&gt;
# Impact drivers work to get screws into wood.&lt;br /&gt;
# Concrete nails, 1.5&amp;quot;, work great for firm plates&lt;br /&gt;
# Stucco and concrete proportions are generally great at 1:5, with 1:3 for stucco, 1:55 for concrete.&lt;br /&gt;
# Every step needs QC - proper or improper method must be decided up front&lt;br /&gt;
# 4 days instead of 5 days is advisable.  People peter out after 3 days&lt;br /&gt;
# Getting instructions over without good content is impractical.  Cutoff for printouts must happen before workshop if printer is not available.&lt;br /&gt;
# Teach people how to install hurricane ties: wrong [picture], right [picture]&lt;br /&gt;
# Volunteers aren&#039;t incentivized properly and that is design for failure.&lt;br /&gt;
# Magic happens with relationships&lt;br /&gt;
# Watch out for bullshitters who like to talk too much&lt;br /&gt;
&lt;br /&gt;
== Feedback form 5 ==&lt;br /&gt;
&lt;br /&gt;
* Participants could take more ownership of project by studying/reviewing plans online in advance&lt;br /&gt;
* Ensure minimal tools and materials are available because important building phases couldn&#039;t have been completed had it not for some folks bringing tools&lt;br /&gt;
* Even though this is a collaborative and sharing concept, perhaps we should embrace some project management tools to organize established workflow.&lt;br /&gt;
* Chicken wire stabilization is very challenging to insert in corners and be able to stucco over without cutting them.&lt;br /&gt;
* Wire inserts between block would be better if inserted every other row and no more than 1 foot apart.&lt;br /&gt;
* Some brick laying efforts forgot/skipped properly inserting wire inserts.&lt;br /&gt;
* Collaborative/individual decision-making on site may undermine important seismic and structural aspects by having participant with little technical background modifying and cutting plans on the spot.  Should there be a flow to consult more with others?&lt;br /&gt;
&lt;br /&gt;
=== Stucco / Earthquake Basket Method ===&lt;br /&gt;
&lt;br /&gt;
* We tried to keep the chicken wire about 1cm (&amp;quot;a finger&#039;s width&amp;quot;) away from the CEBs but it proved very difficult to keep the wire plane flat -- instead, it would bubble and wave, varying between 0cm and 10cm from the CEB wall&lt;br /&gt;
** We recommend stapling the mesh to the CEB wall, using about 0.5&amp;quot; (1 cm) to 0.75&amp;quot; (1.5cm) staples.&lt;br /&gt;
** Because of the inconsistency, stapling directly to the wall meant that the chicken wire varied from 0cm to 1.5 cm from the wall, but, on average, about 1 cm.  This is ideal for the first layer of stucco.&lt;br /&gt;
** Once stapled it was easy to add stucco with a hawk and trowel.&lt;br /&gt;
* Adding moisture to the dry CEB wall before adding stucco was important for bonding stucco to wall.  We poured or splashed water from buckets on to the wall before stuccoing since the CEBs had dried in the sun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback form 6 ==&lt;br /&gt;
&lt;br /&gt;
  #prep&lt;br /&gt;
&lt;br /&gt;
* Personnel Screener&lt;br /&gt;
* Human resources&lt;br /&gt;
&lt;br /&gt;
for congeniality, skills, bullshit quotient, + PATIENCE&lt;br /&gt;
&lt;br /&gt;
printer, paper&lt;br /&gt;
whiteboard +/or flipcharts&lt;br /&gt;
&amp;quot;masters&amp;quot;&lt;br /&gt;
tradesmen&lt;br /&gt;
hobbyists&lt;br /&gt;
newbies&lt;br /&gt;
&lt;br /&gt;
documentarian-tech&lt;br /&gt;
historian/videographer&lt;br /&gt;
&lt;br /&gt;
locals contributing&lt;br /&gt;
&lt;br /&gt;
tool + supply librarian&lt;br /&gt;
&lt;br /&gt;
== Feedback form 7 ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
share existing plans, experiences in advance with others&lt;br /&gt;
(share also the mistakes that did happen)&lt;br /&gt;
&lt;br /&gt;
=== Bricklaying ===&lt;br /&gt;
&lt;br /&gt;
the pattern with real overlaps [picture] no [picture] yes&lt;br /&gt;
I&#039;m not sure chicken wire will be still intact in few years, I&#039;ll opt for fiber textiles instead.&lt;br /&gt;
&lt;br /&gt;
=== Organisation ===&lt;br /&gt;
&lt;br /&gt;
I&#039;d expect bit sturdier leadership which could enable better effectivity of time and skills.&lt;br /&gt;
&lt;br /&gt;
=== Appreciation ===&lt;br /&gt;
&lt;br /&gt;
I really enjoyed talks in the night about research a CEBs with prctical demo of stress test.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 8 ==&lt;br /&gt;
&lt;br /&gt;
=== What have we learned ===&lt;br /&gt;
* We need written plans on job site for clarification and for dcoumenting changes we made&lt;br /&gt;
* We need a captain/leader -- A foreman to guide the build and assign tasks.&lt;br /&gt;
* We need to give the &amp;quot;experience&amp;quot; more weight over the &amp;quot;build&amp;quot; -- accommodation, team building and social time play an important role in the moral of the participants. This ideas that are discussed after workday are huge and meaningful.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 9 ==&lt;br /&gt;
&lt;br /&gt;
=== Prep ===&lt;br /&gt;
&lt;br /&gt;
* architectural plans&lt;br /&gt;
* either dimensional lumber or high quality tables saw, planer + tools&lt;br /&gt;
* identify people with expertise in advance of the build and make them each &amp;quot;team leads&amp;quot; over the different aspects of the build.&lt;br /&gt;
* Have each participant pick their top 5 aspects of the build + then determine which teams they will be assigned.&lt;br /&gt;
* Share plans with every &amp;quot;team lead&amp;quot; and each participant&lt;br /&gt;
* Divide up the job into categories like &amp;quot;Brick laying crew&amp;quot;, &amp;quot;building trusses&amp;quot;, etc.&lt;br /&gt;
* Tap &#039;&#039;&#039;local&#039;&#039;&#039; talent, building skills in advance + make sure each participant understands to styles of ways of doing things&lt;br /&gt;
&lt;br /&gt;
== Feedback form 10 ==&lt;br /&gt;
&lt;br /&gt;
=== Planning ===&lt;br /&gt;
&lt;br /&gt;
* Have prework for participants to do (video, e-books, etc.) Printed out, architectural plans, complete with elevation details.&lt;br /&gt;
&lt;br /&gt;
=== Brick laying ===&lt;br /&gt;
&lt;br /&gt;
* Interlocking corners&lt;br /&gt;
* String lines and plumb lines (+/- 3&amp;quot; of variation isn&#039;t acceptable for a viable product).&lt;br /&gt;
&lt;br /&gt;
=== Material choice ===&lt;br /&gt;
&lt;br /&gt;
* Design for local material (framing was overkill and unwieldy)&lt;br /&gt;
* Have designated crew leads/project managers beforehand&lt;br /&gt;
&lt;br /&gt;
== Feedback form 11 ==&lt;br /&gt;
&lt;br /&gt;
1. More fun and social experience to enhance the experience from hard work to a fun learning experience.  Maybe evening entertainment with libations and music dancing, merriment&lt;br /&gt;
&lt;br /&gt;
2. Task Delegation:&lt;br /&gt;
&lt;br /&gt;
Delegate each task so participants have a clear idea of what they are doing and expected from each.&lt;br /&gt;
&lt;br /&gt;
- Everyone has a natural propensity to do on thing or another -- It&#039;s a matter of knapping these strengths.  Maybe a series of questions with multiple choice to pick from of to hone into which is the propensity skill.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 12 ==&lt;br /&gt;
&lt;br /&gt;
=== What to do next time ===&lt;br /&gt;
&lt;br /&gt;
# Spec&#039;s and drawings&lt;br /&gt;
# Schedule and time lines&lt;br /&gt;
# Theory and lab the pro finish&lt;br /&gt;
# social&lt;br /&gt;
# task delegation&lt;br /&gt;
&lt;br /&gt;
1. Specifications and drawings: A clear design that each participant understands before starting.  Blueprint with measurements and dimensions.  Specifications on how to perform task at hand.&lt;br /&gt;
&lt;br /&gt;
2. Schedules and time lines: A clear awareness of how long each scope/task take.  The breakdown of the task in theory with appropriate tools and hardware on hand and adequate supply.&lt;br /&gt;
&lt;br /&gt;
3. Theory and lab, then pro finish: Many participants are unskilled builders.  It&#039;s my recommendation there could be more time dedicated to understanding the task in theory/class.  Then each task in practice application show to students by skilled craftsperson for 3 hr, 3hr class, 3 hr. practice lab Then class is over and professional builder finish.  It&#039;s hard to expect so much work from paying volunteers.&lt;br /&gt;
&lt;br /&gt;
4. Social element: Starting at 6am pick-up to 9pm, a total of 13 hr day intensive is hard for the student to grasp all that is taught and experienced in a day.  I sense there could be no more than 6 hrs including travel to hotel.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 13 ==&lt;br /&gt;
&lt;br /&gt;
=== Feedback ===&lt;br /&gt;
==== Stations ====&lt;br /&gt;
&lt;br /&gt;
In general, pre-arrival, it would be ideal if there could be pre-designated areas or &amp;quot;stations&amp;quot; for the various tasks.&lt;br /&gt;
&lt;br /&gt;
==== Pre-build + actual build differentiation ====&lt;br /&gt;
&lt;br /&gt;
Ideally, I would like to see options for build &amp;quot;shifts&amp;quot; for example, first shift might be 5 days long whch includes creating bricks, prep work, laying foundation etc.  Second shift might be 5 days long which includes slurry and brick laying etc.  This way, there would be fresh teams for each phase, less rushing, more focus, a weekend between (during which time people could recharge) and people could choose what portion of the learning most applies to them, or remain on site through the duration, participating in the entire build.&lt;br /&gt;
&lt;br /&gt;
==== Create visuals or increase time frame ====&lt;br /&gt;
&lt;br /&gt;
Ultimately, I think 5 days is far too short a time to do a quality swarm build of this style.  *Unless* there is more organization before hand, and clarity in terms of distillated, essential information, including a diagram of the build blueprints so there is a visual beforehand.&lt;br /&gt;
&lt;br /&gt;
==== First Aid ====&lt;br /&gt;
&lt;br /&gt;
A First-aid station/location (easily identified) is a &#039;&#039;&#039;must&#039;&#039;&#039; fro such an uncoordinated untrained team.  As is safety gear.&lt;br /&gt;
&lt;br /&gt;
== Feedback form 14 ==&lt;br /&gt;
&lt;br /&gt;
=== Morning learning vs. evening learning ===&lt;br /&gt;
&lt;br /&gt;
After-dinner training *may* be a bad idea, everyone is exhausted, over-saturated, and less able to retain learning.  I&#039;d suggest teaching and training involve white boards, chalk boards, hand outs, print outs or slide shows in the morning after breakfast or pre-breakfast so learning is at a prime level.  Ideally, evenings would be spent socializing, team bonding, etc.&lt;br /&gt;
&lt;br /&gt;
=== More hands on demonstration ===&lt;br /&gt;
&lt;br /&gt;
I think there was often too much talking, and not enough demonstration /diagrams - for non-verbal learners, this presents an information gap.  The demo that Aydan did on day 4 was ideal for day 1 to set the context for the strength of the build.&lt;br /&gt;
&lt;br /&gt;
Also, the brick laying style was not as strong as the locally suggested style.  I would prefer the interlocking bricks for structural integrity.  [ picture].&lt;/div&gt;</summary>
		<author><name>Pieter</name></author>
	</entry>
</feed>