Week 01 - Getting started
Goals
- Set up this website
- Think about a final project
- Formalise these first ideas
Project Management
Setting up the version control, the web development environment and creating the website
Overview
Version control and Gitlab forge
Versioning allows you to keep track of your work's evolution from the start, including adding new files and how they are modified. Moreover, multiple versions of the same file can be edited at the same time by different users, using branches of a history tree. Whenever a user is ready to submit their improvements, the version control system offers to merge both version in an easy and customizable way. Finally, using a version control software allows you to reach and revert to any previous state of the project.
Git is the standard version control software. Apache subversion (svn) or mercurial are similar alternatives. The principle of version control can also be integrated in other softwares that are not dedicated to versioning. For example, Google Docs, or CAD softwares such as Fusion 360 gives the possibility to track the modifications of several members of a team.
Versioning is particularly suitable for text files, as it evaluates and displays the differences between two states of a file.
During the Fabacademy, repositories are created and hosted on the Fabacademy forge for each student. A repository is a project under version control that can be shared with other people. A forge (such as Github or Gitlab) is a website where repositories are hosted, either publically or in private mode. Compared to the simple use of git, forges provide additionnal collaboration tools to discuss and eventually integrate improvements through merge / pull requests.
The Fabacademy's forge offers a simple way to write and publish the students documentation website, while offering all the features that come with versioning and the use of a common forge, gitlab.fabcloud.org. First of all it keeps all the documentation website sources in the same place. Also, the Fabacademy forge allows students to run CI jobs whenever they push changes to their repository, which comes handy for publishing their static webpage documentation easily (thanks to the file gitlab-ci.yml
). Finally, it's convenient to keep track of modifications either in the documentation's content itself or other source files (Kicad projects, arduino files, etc.).
Building the documentation website
We have some things to set up in order to start documenting.
As said previously, a git repository has been created for each student on the Fabacademy's forge. An HTML/CSS template has been provided for us to start.
I learned and taught some HTML/CSS/Javascript in previous experiences, but obviously this will not be the fastest way to keep the documentation updated all along the Fabacademy. At least that's what my instructor told me and he's been through the Fabacademy too, so I'll follow his advice and go for Markdown editing. Markdown is a lightweight markup language, very efficient to write structured documents using simple syntax.
MkDocs is a common solution among Fabacademy students to generate their website by automatically parsing the markdown syntax.
MkDocs is a fast, simple and static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file (
mkdocs.yml
).
In a nutshell, mkDocs
is run everytime I push on main
, which generates my documentation website. The html content is transcripted from the .md
files in my repository. A simple CSS styling is provided with mkDocs, and I added the theme Material for MkDocs, which offers clean styling and other features to customize a website build thanks to MkDocs.
Moreover, it's always possible to add extra CSS rules, by adding an extra.css
file with some styling rules overwriting the Material rules (see more below in the extra css section). I used this extra stylesheet to manage the colors, spacing, fonts, borders, etc.
Finally, the markdown extension md_in_html
also allow me to include pure HTML in my pages, for example to embed external content with iframe
tags or make a customized homepage.
I use the editor Visual Studio Code to edit locally my website files. I can preview my site with a local server by running the instruction mkdocs build
and mkdocs serve
in the terminal. I then commit my changes, and push my modifications to the main branch, which runs the CI and build the site. A few seconds later, it's online!
You can find all the detailed steps of the setup below.
git setup
As my computer is brand new I had almost everything to install, so I took all the steps from the start. Here are the major steps :
give full access to the Terminal
As I said my computer is brand new, so I really had to start from scratch. Also it's my employer's computer and could have some specific restrictions, so it took me some minutes to realise that the Terminal hadn't full access to the disk by default. To grant full access, I went in System Preferences then Security and Privacy then added Terminal to 'Full Access'
install homebrew and command lines tools
Not sure the command lines tools were necessary () but I installed them anyway.
xcode-select --install
In order to install git I installed homebrew (https://brew.sh/)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)")
install git
cd /Users/clara/Documents/gitfiles/
I created a folder gitfile (where I'll ultimately clone my repository)
-
git init
-
git config --global user.name myName
andgit config --global user.email name@example.com
clone the repository with ssh
I proceeded as explained here : https://docs.gitlab.com/ee/user/ssh.html#generate-an-ssh-key-pair
-
generate an SSH key pair
ssh-keygen -t ed25519 -C "fabacademy"
-
copy the SSH public key
tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopy
- add the public key to my GitLab account
I log into my GitLab account in a browser in order to add the public key (more info here : https://docs.gitlab.com/ee/user/ssh.html#add-an-ssh-key-to-your-gitlab-account)
- check that I have access to the server
ssh -T git@gitlab.fabcloud.org
That sends me back a Welcome message
- git clone with SSH
I opened the repository I wanted to clone, selected "clone" then copied the text in "Clone with SSH", the pasted it in the terminal after this instruction git clone
installing MkDocs
MkDocs is a static site generator that will allow me to write down my documentation in Markdown. I followed this MkDocs guide : https://www.mkdocs.org/user-guide/installation/. As written, I first need to install Python to make it work.
install python
I simply used the installer for macOs.
check the python version
I wanted to check if python was correctly installed by running `python --version
. It didn't work and I had to ask some human help to find out I needed to replace python
by python3
. Oops! So here is the correct command line which send me back the version I installed: python3 --version
check if pip is installed
pip --version
in my case: install pip
I read that pip could have been installed at the same time as python, but that was not the case for me. So I installed it by downloading get-pip.py (https://bootstrap.pypa.io/get-pip.py), putting it in the right directory then entering python3 get-pip.py
installing MkDocs
pip install mkdocs
Check if everything is ok : mkdocs --version
Create your MkDoc project
create a new project
Go in the correct folder then mkdocs new my-project
then mkdocs build
test on a local server
In the right folder, type mkdocs serve
.
Then open your browser and go to http://127.0.0.1:8000/
. You should now see the default home page being displayed.
open it in Visual Studio Code
I downloaded Visual Studio Code (you can use any editor you like), then opened the cloned directory, reorganised my files (I deleted the template's public folder and replaced it by the mkdocs folder's content).
commit and push in Gitlab
You should now see all your local files synchronizing in GitLab.
edit the gitlab-ci.yml file
Edit the file .gitlab-ci.yml
by replacing its content with the following :
image: python:latest
pages:
stage: deploy
script:
- pip install mkdocs-material
- mkdocs build --site-dir public
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
edit the mkdocs.yml file
Edit the mkdocs.yml file by adding at least these information:
site_name: Fabacademy 2023 - Your Name
site_url: https://fabacademy.org/2023/labs/sorbonne/students/your-name
Now we're ready to go with Mkdocs! In my case in wanted to add a Mkdocs theme to improve the design. I am using Material.
Using a theme and customising it
pip install mkdocs-material
edit the mkdocs.yml file
Add the following to the mkdocs.yml
add a custom stylesheet
Create a "stylesheets" folder if it doesn't exist yes, and add a file extra.css
inside this folder.
link the stylesheet
Link the stylesheet extra.css
by adding the following lines to the mkdocs.yml
:
edit the CSS rules in extra.css
Edit the styles you want to customize, such as colors and fonts.
Some of my customizations
Colors
I may change my color chart, but for now I am using these variables (defined in the template and used in various elements):
:root {
--md-default-fg-color: #220905;
--md-primary-fg-color: #34110A;
--md-accent-fg-color: #491A0B ;
--md-primary-fg-color-light: #59200D;
--md-secondary-fg-color: #5141ff;
--md-secondary-fg-color-light: #aba6de;
--md-secondary-bg-color: #ccd7c5;
--md-default-bg-color: #ece5dc;
--md-primary-bg-color: #fdf4e9;
--md-accent-bg-color: #f7c9f5 ;
--md-accent-bg-color-dark: #f290ff;
}
In Visual Studio Code I have a small visualization of the color.
At this moment my website color chart is the following:
link to edit the palette in coolors
Navigation
I am using two sidebars, one giving the general architecture (you have to create folders containing your .md files if you want subsections), and one for the table of contents.
I added this line in mkdocs.yml
to integrate them :
At first I had a problem with my table of contents because I used several h1. Using h2's instead of h1's allowed me to have a relevant hierarchy. Also, I found that the level of depth was too big, so I reduced the depth by adding these instructions in the mkdocs.yml
:
Icon
To change the default icon of the theme in the header, you can rely on one of the numerous icons provided by materials.
For this coffe maker icon :coffee-maker: I would need to add the following in my mkdocs.yml
:
Finally my mkdocs.yml
file content is currently:
site_name: Fabacademy 2023 - Clara Devanz
site_url: https://fabacademy.org/2023/labs/sorbonne/students/clara-devanz
theme:
name: material
features:
- navigation.sections
icon:
logo: material/coffee-maker
extra_css:
- stylesheets/extra.css
markdown_extensions:
- toc:
toc_depth: 3
Font
I changed some headlines fonts for the font Roboto Slab.
.md-typeset h2 {
color : var(--md-default-fg-color);
font-family: 'Roboto Slab', serif;
font-weight: 400;
}
Outline borders and rounded corners
I also added some outlines and rounded corners to some elements, such as h2 and h3, but also md-content
. Here is how I completed my rules for h2
.md-typeset h2 {
background-color: var(--md-accent-bg-color);
color : var(--md-default-fg-color);
font-family: 'Roboto Slab', serif;
font-weight: 400;
border-radius: 0.3rem;
padding: 0.2em 0.4em;
outline : solid;
font-size: 1.2rem;
}
Principles and Practices
Putting down the first ideas for the final project
Previous experiences
In a previous learning experience, I worked on a quite theoretical individual final project. At that moment I wanted to make a project that had a purpose. In my case I wanted to create a pedagogical device that would allow people to manipulate some not-so-intuitive concepts. At that moment I was quite into critical thinking, and there's a formula you meet quite often, which looks quite simple but is hard to feel intituively if you're not used to it. If you're familiar with logic and maths applied to critical thinking, you probably met this formula, it's known as the Bayes' formula. It was very exciting to invent how to manipulate these probability concepts. Here is the object it led to, in French la machine de vraisemblance that you could translate as the plausability machine
Bayes' formula :
P(H/0)=P(H)*P(O/H)/P(O)
Where:
H is the hypothesis
O is an observation
P(H/O) is H's plausibility a posteriori after O has been observed
P(O/H) is the probability to observe O when H is true
P(O) is the probability to observe O
P(H) is the plausibility a priori of the hypothesis H
Here is the not-fully fonctional prototype:
Well the packaging was atrocious (cables everywhere, we had very little time and not so much tools for electronics) and it didn't fully worked. It sadly ended on a shelf waiting for the day I'll be interested again by that object.
Initial thoughts for my Fabacademy final project
This time, I want to work on a very different proposition. I want to give space to more experiments, to create a much more modular device. I wish to work on something reconfigurable, not a static object that will have only one place in my life. And maybe which could find a place in the life of some other people. Also, I'm not sure I want to work on something so function-oriented as my Bayesian machine. I am close to say that I want to work on something useless.
So, with this experience and my new approach in mind, I started writing down some very general ideas that would interest me to work on. Here are some of them that actually led me to my first idea.
textures, materials
light, light filters and diffusion
hide the technology
create a tool
After some brain processing here is the idea that emerged:
A tool to experiment light art
You might be used to practicing art through a variety of media, thanks to some tools or instruments. Maybe you have experience performing graphic arts such as painting with watercolor, or drawing with pens. You might also have skills producing and arranging sounds with the help of a musical instrument or a computer. My intention with this project is to provide a small set of tools to explore light in an esthetic way.
Light interests me as a medium because most people - including me - don't have so much representations about light art. One will have less stereotypes about what a light creation would look like than about a renaissance piece or a techno track. All the representations, all the codes of light aesthetic are still a bit vague in our minds, which could let us explore quite freely that discipline. I also believe one can have an immediate and intuitive sense of light aesthetic, because it is such a natural feeling that we experience all the time. Most of the time, we don't act consciously on light, we are not even paying so much attention to how it interacts with our world, how it gives us the sense of color, depth, texture. So I am very curious about creating such an environment for people to discover how does it feel to manipulate light and to create their piece of light!
Prior knowledge and inspirations
Creating a set of tools before the practice being very formalised can be confusing, because I also have ton invent the rules, and I have no prior knowledge in light art. I have even no prior knowledge in color and light in visual arts such as cinema, painting... I can imagine there are a lot of keys to understand light, for example how the shadow is colored compared to the light, and some rules or tips in the use of light, for example in movies. On another angle, I studied basic optic science during some physics lesson in my scholarity, but that felt more like scratching the surface of a much more complex discipline. So, I believe I'll get more familiar with light while making and playing with my device!
I am also conscious that a lot has already been explored in light art, that there are some famous artists, amazing pieces, and I believe that there is a lot of research and innovation in particular in digital arts. For now I'm really not putting myself in an artistic position neither academic, more like a tool-crafter learning by doing and playing.
About the inspiration, I can remember visiting an exhibition of Dan Flavin's art in Paris when I was not yet an adult, probably at the Musée d'Art Moderne in 2006. I think my feelings about this exhibition were both upset, as you can be when you see a so simple setup being under the spotlight of major art show-business, and enchanted. It is described as minimalistic art - and you can see why on this picture - but yet I was very impressed by the beauty and strangeness of this experience.
Photo: © 2016 Stephen FlavinArtists Rights Society (ARS); New York
Later, I got really interested in digital art in general, and followed an interdisciplinary master called Art Science Technology in Grenoble, France. I regularly visited digital art exhibitions, and light installations were quite common in such places. But I cannot recall any piece of art I saw that focused only on light, I must have forgot these. During these years, the Fête des Lumières in Lyon was also driving more and more attention and I attended several editions. Nevertheless it was at that time mainly focused on light projections and music-and-light shows.
In my personnal projects I also have a tendency to put led strips everywhere, starting with my clothes!
Feeding my interest in light I can also mention:
- a discussion with a friend about the color of the shadow in painting
- science videos about light principles and more generally wave physics
- playfullness and pleasure I get from arranging colors
- a piece of furniture and a piece of art seen at the exhibition Colors, etc. at the Tri postal, Lille, based on dichroïc properties
- a collaborative project I contributed to with the Fablab Carrefour Numérique, resulting in a diorama concept
- an exhibition I visited with a flashlight in Grenoble allowing us to appreciate all the texture of some historical stones (the context is very vague in my mind but I kept this observation about texture with me)
- how I experience light in my everyday life
Defining the device
Honestly it's way too fresh in my head to have an idea of the designs, even the list of elements I want to create are not clear at all in my mind. I am quite convinced I'll discover new directions while going further and experimenting the first bricks of my project. But here are the first thoughts anyway.
Guidelines
I have in my mind the following expectations about my project:
-
Modular
- It is a set of tools that you wouldn't use all at the same time, depending on what you want to create or explore. Thus you could have several types of texture pannels, a choice of windows to frame the light, various filters to place in front of the light source, etc. -
Playable
- I would like to give access to the large possibilities offered by programmable LEDs, but without modifying the code manually each time, nor using a web interface or something similar. I want to explore the gesture a person would use to play with the device, and define controls according to what may feel more natural, logical and fun. -
Unpredictable
- This project is about exploring a medium, so of course it will be quite unpredictable in a certain extense, because one wouldn't know precisely the result of their action before doing them. But also I want to erase the sense of the code and numbers that underlies the device, in particular regarding the color coding. So I am not aiming at total unpredictability, more at a way to prevent the total-control thing.
Also, it is important to mention that at that stage of my project, I mostly want to observe the light diffusion in space, and not the direct emission of LEDs nor something like a screen.
Elements of the set of tools
Elements that could be provided
Here are the roles I am hiring:
The first roles:
light sources
I could use any kind of light source, but it would be a shame not to rely on programmable LEDs. As I said I see them at first as sources of light, but if they're good looking and can also play an aesthetic role for themselves, that's even better.
screens
I need at least one screen to observe light and shadows. That could be a simple piece of paper. I prefer having several screens to take advantage of the 3D property of that medium. It could be some kind of folding paper screen
obstacles
Technically obstacles are also some kind of screens because they'll interrupt light on a surface. Obstacles are placed before the screen so you can also observe how lights create the volumic sensation, how the different surfaces are lit. Moreover, they cast shadows on the screen, that you also want to observe. I imagine them totally white, they could be some paper foldings and/or wood simple shapes.
The secondary roles
In addition to these first roles, I could also provide:
textures
Monochrome "2D" textures, such as textile, corrugated cardboard, heavily textured paper, or reflecting surfaces. They could act as a mix between screens and obstacles, and be placed either on a screen, or in the middle of the scene.
filters
Placed on the way of a light source, they could change their property (like a dichroïc polarizer) or their diffusion
windows
Some sort of negative screens: they block the light except in a window cut into a pannel. They allow to structure light effects visually.
lenses
I am not looking into a scientific light experiment approach, but it may be useful to use some lenses to focus the light.
The led controls
primary color dispensers
I would like to give the possibility to mix the primary colors (of light, which are red green and blue) as one would mix gouache painting colors. I'll have five color dispensers:
- Red
- Green
- Blue
- White (if I use RGBW leds)
- Black - to set the brightness
color palette
This is where you would mix your primary colors. Then you could "fill" your light sources with the color in the color palette to change them. If the light element contains several neopixels, they could be lit progressively if you keep this element in contact with the color palette.
mixing colors
If I use led strips, it would be interesting to be able to "fill" with a color either one tip or another, thus allowing to fill both tips with different colors. It would be quite fun to give the possibility to "mix" these colors with a gesture like shaking - for example to create a color gradient.
The environment
space structure
I don't know yet how to solve this question. I believe it's important to have a kind of definition of the space you're working in. For example in painting your space is your canvas. In music it would probably be time, and in theater both a scene and a duration. I thus would like to define a 3D space, maybe with pannels. These pannels could be the same as the screens, but not necessarily. Also, this structure could allow us to hang the lights (either mechanically with hooks or similar, or with magnets).
dark room
I'll probably have to work in a dark environment to fully appreciate the effect of light. So I'll need a small dark room or dark working place. Needless to say that this environment constraint will certainly affect all my elements design, as they need to be manipulated in low lighting conditions.
Development
If I stick with the project as described above, the minimum viable product would be the light sources and the color palette system. I will thus probably focus on these elements before creating a whole toolkit. Nevertheless I probably shouldn't wait until these minimal elements are fully functionnal to test if my general concept is relevant. Here's how I could organise the first development steps
-
assemble a basic led strip circuit
-
test what I can expect from the light diffusion
-
test the interaction of the light emitted with paper pannels, obstacles, textures...
-
evaluate the positions I would like to give to the light sources
-
and how the space should be structured
-
create a minimal color palette circuit
-
add communication components and code to the light source circuit
-
test the communication between the light source and the color palette
-
evaluate the gesture
-
integrate all of the above in the light source design
Then I can move forward to the next steps:
-
creating the color dispensers
-
test the interaction between the color dispensers and the color palette
-
take in account the light source design to design the color palette
-
explore the gesture
-
explore the sense of space and interaction with obstacles, screens, textures...
-
build some test elements (screens, textures, obstacles)
-
conceptualise the space structure
-
build it
-
test!
-
establish some coherent design rules to apply to all elements of the kits (if possible)
-
design and develop more elements of the kit (starting with the more importants, such as the screens and some obstacles)