Principles, Practices and Project Management ============================================ (old)  ##### Week of 29 January 2020 ##### Principles and Practices - [notes](https://fabacademy.org/2020/labs/barcelona/local/#material/week01/) + [video](https://vimeo.com/388191611) ##### Project Management - [notes](http://academy.cba.mit.edu/classes/project_management/index.html) + [video](https://vimeo.com/388201669) make making easier > tool / machine > robotic arm? > infinite axes > modular I'm interested in making a robot of some kind. A machine that does a specific series of tasks. I read about kinds of [robots](https://wiki.fablabbcn.org/Category:Robotic) according to [application](https://robots.ieee.org/learn/types-of-robots/), [geometry/axes](https://robots.ieee.org/learn/types-of-robots/). Instead of having limited axes for movement. I wondered if the arm could be modular and move in any direction possible. That's how I came to the idea of having robotic modules, that can be versatile for functions. References ---------- * [Cubelets: Modular Robot Cube Toys](http://hight3ch.com/cubelets-modular-robot-cube-toys/)  I found some projects that have done this in different ways. Many of them are educational toys for kids - meant to learn programming/ coding. * [Mabot by bellrobot](https://www.bellrobot.com/mabot.html) * [Project Bloks](https://www.kickstarter.com/projects/28168150/mabot-teach-kids-robotics-and-programming) * [Cubroid Coding Blocks](http://codingblocks.cubroid.com/) * [Sphero's Spark](https://www.sphero.com/sphero-sprk-plus) * [Sphero's Spark](https://www.robospace.cc/tacobot-en/) * [Tern by TUFTS](http://hci.cs.tufts.edu/tern/) programming with wooden Blocks  Some projects that do this in different ways: [Mblocks](https://interestingengineering.com/m-blocks-robotic-cubes-that-can-build-themselves) and [Mblocks 2.0](https://www.slashgear.com/m-blocks-2-0-revealed-now-these-cube-robots-can-collaborate-30597942/): are self-assembly cubes  [Cubli](https://idsc.ethz.ch/research-dandrea/research-projects/archive/cubli.html) can balance on it's edge and corner  [Topobo by Tangible media, MIT](https://tangible.media.mit.edu/project/topobo/), has kinetic memory. It can record and playback physical motion. I read about [self-reconfiguring robots](https://en.wikipedia.org/wiki/Self-reconfiguring_modular_robot), and discovered that while a cube can be combined with other cubes according to functions, the same cube cannot do multiple functions. Therefore, I want to design a cube that does multiple functions, that can be modified by chaning faces or edges or corners of the cube.  The modular approach that [Machines that make](http://mtm.cba.mit.edu/) project takes, so the application is up to the user is what I want to follow while making this robotic cube. Maybe make a flying one? Like a ball drone?  2\. Project management ====================== This week I learned about version control, web development using SSGs, and sketched out an initial final project idea. Git --- I've used git a little for my Master's documentation. But till now, just used some basic commands like: `git init` to initialise a new repo `git status` to check what's happening with the current directory `git add .` to add all changes from the working directory to the staging area `git commit -m "action msg"` to commit changes from the staging area to the local repo `git push` to push changes from the local repo to the remote repo `git pull` to pull files from the remote repo to the local repo I find this diagram very helpful to visualise the directory structure:  To learn more about branching, merging and other actions, I did a tutorial:[](http...) Found my existing SSH key using `~/.ssh/id_rsa.pub` Copied and added it to my FabCloud account. Then I cloned the default repository to a local folder using:`git clone git@gitlab.fabcloud.org:academany/fabacademy/2020/labs/barcelona/students/mitalee-parikh.git` Web Development --------------- I recently learned how to make a website using HTML, CSS with a Bootstrap framework. To develop my webpage, I wanted to explore different Static Site Generators before fixing on one. So I started by setting up both Mkdocs and Jekyll. Hugo was another option I want to look into in the coming weeks. Setting up jekyll ----------------- I followed this [Jekyll tutorial](https://jekyll.org) by [Giraffe Academy](https://www.youtube.com/playlist?list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB). Before installing jekyll, I checked if I had these supporting things, and updated them: 1\. **Homebrew:** to easily install software packages 2\. **Ruby:** programming language that jekyll is written in 3\. **RubyGems:** package manager for ruby 4\. **Bundler:** to track and install gems and versions in a group, for jekyll themes Homebrew, Ruby and Gem were all pre-installed. So I checked versions using `ruby -v` and `gem -v` I installed bundler with `gem install jekyll bundler`, but got a permissions error msg. So, I tried it with sudo like so: `sudo gem install jekyll bundler` and it worked. And then to make sure checked version: `gem install jekyll bundler` To view the changes on my local server `http://localhost:4000` I used `bundle exec jekyll serve` the first time and `jekyll serve` everytime after. ### Setting up Mkdocs Setting up Mkdocs was a similar process. Intalling and upgrading package manager pip `pip install --upgrade pip` to install mkdocs: `pip install mkdocs` To view the changes on my local server `http://127.0.0.1:8000` I used `mkdocs serve` ### Themes I tried to clone and modify some jekyll themes I downloaded from [rubygems.org](https://rubygems.org/). While pushing it to gitlab, I wasn't sure what files to keep from the default fabcloud repo. So I replaced them all, but there was an issue with my pipeline. I think it has something to do with the config.yml file. While I figure that out, I'm using this default template to document my process. ### Useful links * [Jekyll](http://jekyll.org) [tutorial by Giraffe Academy](https://www.youtube.com/playlist?list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB) * [Markdown](https://en.wikipedia.org/wiki/Markdown) [basic tutorial](https://www.markdowntutorial.com/) * [Mkdocs guidelines](https://www.mkdocs.org/) ### Misc Practices Before pushing, I used `ncdu` to check sizes of files. To compress my images I installed and used [ImageMagick](https://imagemagick.org/index.php). I found it very efficient to quickly convert or compress images for the web, and also to make quick GIFs. After some trial and error, i figureed these basic commands and settings I can use for my workflow: To compress photos taken from my phone: `convert IMGname.HEIC -resize 25% -quality 50% -density 72 jpg:extent=300kb IMGnewname.jpg` To compress images taken as screenshot from my computer: `convert Screenshot\ 2020-02-18\ at\ 10.54.27\ AM.png -resize 50% -quality 50% -density 72 jpg:extent=300kb newname.jpg` To make a quick GIF: `convert -resize 25% -delay 15 -loop 0 IMG_1380.HEIC IMG_1381.HEIC IMG_1382.HEIC IMG_1386.HEIC IMG_1387.HEIC IMG_1388.HEIC animation.gif` And to check the existing properties of an image: `magick identify -verbose focus.gif` I also check individual file sizes by changing current directory in terminal and using `du -sh *|sort -n`