real men do it with the keyboard -old unix admin saying
- terminal emulator
- command line
- python
- Create an account in asciinema to record and share your terminal sessions
- giph to record your desktop sessions
- warm up: basic skills and gui alternatives
- hci: user land
- cscw: collaborate with users and devices
- visualization: rich content
- software: dev ops
| assignments | deliverables | references |
|---|---|---|
| set-up the main dependencies and demonstrate your base system | change your command prompt with your student ID, list your dot files, display your shell configuration file and display system information (hardware+software) | ls less nano source PS1 github guide neofetch |
| get familiar with basic commands, reading documentation and editing files | browse and view files on your system | man vim pacvim ranger lf bash guide error correction |
| connect to wireless network | list available networks and connect to one that requires web login | nmcli curl wpa_supplicant http-prompt |
| become productive with a todo list | create a list of todos, edit, delete, and check some of them | todo.txt todo.txt-cli task |
| check the weather | fetch the weather forecast for your home city and one more city that you want to travel to | wttr |
| fetch information | read the business news | awesome-console-services |
| try different text-based web browsers and get used to the keyboard shortcuts for one | use your favorite text-based browser to retrieve information from the web | lynx w3m links |
| manage your bookmarks | add, search, and visit a bookmark to your favorite site | buku |
| search the web from the terminal | create aliases for common searches such as dictionary definition | googler ddgr |
| display your personal stream and that of your favorite person | ||
| browse popular web sites through the terminal | configure the browser environment to you terminal browser | hacker news reddit BROWSER awesome-finder |
| read an ebook | read, search, bookmark, and annotate your favorite ebook | epr |
| manage torrent files | search and download a torrent | torque |
| edit a spreadsheet | edit values and formulas | sc-im |
| try a different shell | change your default shell to zsh and configure it with auto-completions-suggestions and repeat some of the above | chsh oh-my-zsh zsh-completions zsh-syntax-highlighting |
| surf the web | create a new elvi | surfraw |
| share your calendar | share your calendar | gcalcli |
| read the news with an RSS reader | newsboat | |
| batch image conversion | convert your image files to different sizes and formats | ImageMagick ufraw |
| track your expenses | add a source of income and some expenses | ledger |
| track your time with a simple journal | jrnl | |
| search the local file system | search for your shell configuration file and open it for editing and search for the contents of a text file | fzf skim percol |
| manage your music library | import your music library, add tags and delete/add songs | beets |
| visualize an mp3 | demonstrate album art and visualizations with an mp3 player and various songs | mpd kunst |
| visualize shell scripts | create your own top alternatives with a focus to your own workflows | sampler |
| organize your notes | add (edit and delete) and link several pages | org-wiki viki nb |
| create your final presentation | three slides with your name-AM-github, checkbox list of deliverables done, and highlights of significant contributions and/or roadblocks | mdp patat present |
| manage your academic bibliography | import your bibtex formated bibliography, add, edit, delete an entry | pubs papis |
| set-up a system for python development | install and configure in a user folder a python project that is not available through the package manager | python virtual environments |
| try different operating systems in the emulator | load at least two operating systems without a GUI (only CLI) and create a virtual local network | qemu freebsd archlinux alpine |
| set-up continuous integration | build and deploy your static site and your cv dynamically every time you make a small change in the source files | github travis netlify |
| download mp3 | search, download and play (with the terminal) your favorite song of the month from youtube | youtube-dl mpv |
| organize your notes with emacs | use org mode | emacs |
| text editor and plug-ins for code highlighting and autocompletion | edit the vim or the shell configuration file and your report | vim |
| organise the terminal window into multiple areas | use one window to search-edit local files or browse the web and another window for performance monitoring | tmux, glances |
| try different terminals and shells | repeat some of the previous exercises with a different terminal-shell and create a custom configuration that fits your needs | st mosh zsh fish |
| create a minimal linux system for a particular purpose | gif of a VM with your custom (init, libc) linux system should boot to a terminal and include a set of tools that you really need (e.g., secure, minimal, aesthetics, libraries, etc) | LFS suckless kiss linux init systems libc |
| create a docker image for your development stack | demonstrate the custom image for CI of your cv and site | dry dockly alpine |
| assignments | deliverables | references |
|---|---|---|
| format your report | use text formating tools to layout your final report for different output | groff |
| create your own static site and blog generator with pandoc | the generator should consider posts, pages, and templates | bashyll pandoc+makefile |
| convert between different text formats | use vim (or emacs) to write your report in markdown, track multiple formats with git and convert it to docx, html with pandoc | pandoc git sed |
| use the terminal as an IDE | edit your files (e.g., report, blog, code, etc) in vim or emacs and compile it in a different panel or use a plug-in | latex vimtex spacevim doom-emacs make just tmex |
| assignments | deliverables | references |
|---|---|---|
| create a simple website with a static generator | single page with name-AM-github and links to your asciinema deliverables | jekyll hakyll nikola tclssg |
| read, write, and send email | configure connections to mail server, display greek characters, display rich content, open links in text-based browser, store attachments, compose email with vim | mutt EDITOR URLVIEW aerc |
| connect to a remote machine with ssh | configure a remote machine to do all the previous tasks and connect to it through a simple local machine | ssh mosh |
| send rich email with emacs | filter and send emails with links | emacs reading-and-writing-email-with-emacs |
| pair programming | edit a text file together with a friend | tmate |
| manage and share your dot files | configure git, edit, push and pull your dot files among at least two different machines | github guide rcm dotfiles stow yadm |
| transfer files to your phone | send an image file to your phone | qr-filetransfer |
| upload and share files | transfer firefox send | |
| use irc to chat with your friends | create a room, invite friends, and chat | weechat |
| back-up your home online | create a back-up schedule | cron rsync rclone |
| set-up cloud services | ssh to a remote machine and demonstrate your remote cli user land (e.g., email, editor, cv, code, etc) | OpenSSH Cloud Stack |
| assignments | deliverables | references |
|---|---|---|
| visualize git commits | display your commits from a previous course, eg hci | git-bars |
| generate plots | create plots for your data from some other course or project | clip |
| analyse web log files | create reports similar to google analytics | goaccess |
| use color to improve your cli tools | Print colorized text from a shell script, in order to make it more beautiful-usable | pastel |
| visualize your data | demo with your git commits history and percipation data per day for the last month from your city | spark |
| convert you cli to gui | convert one of the previous python tools to gui | gooey |
| create a cv | build your cv with latex in pdf format, upload it, and track it with git lfs | latex git lfs |
| visualize a large text file with a word cloud | use a book from project gutenberg or from the daily news and mask the word cloud with an image that fits the theme of the book | word_cloud newspaper gutenberg |
| visualize progress or status | improve your favorite python cli app with a progress bar | tqdm |
| give rainbow power to your cli python program | visualize your code, tables, markdown, and programs | rich |
| add icons to your terminal workflow | icons-in-terminal awesome terminal fonts | |
| test an alternative stack of tools | set-up an OS image with a set of cli tools with minimal dependencies and a software licence that allows commercial use and selling | freebsd jails |
| create a cli app for your favorite site | the application should be similar to rtv, haxor from hci | click |
| assignments | deliverables | references |
|---|---|---|
| send notifications to your desktop-mobile | send a notifcation when a big task completes, eg download, compiling, etc | ntfy |
| create notifications on your sever | send notifications on important server events | mqttwarn |
| create your own static site and blog generator | the generator should consider posts, pages, and templates and have minimal dependencies, ie no pandoc | bashblog jenny bashyll kiss linux blog |
| create an agent for news | the demo should display the new content added on a news web site | huginn |
| programmable voice | deploy an application that forwards a call depending on a white- and black- list of phone numbers | twilio-python |
| performance monitoring | monitor the performance of your python scripts and visualize them with colors and/or spark lines | py-spy hyperfine |
The majority of cli tools include either a man page, or a short help (-h) screen. The following tools provide common examples about common tools:
The assignments assume some basic knowledge and skills, which can be acquired promptly through the following tutorials:
The references in the assignments are only indicative and you are strongly encouraged to search for and evaluate alternatives. There are several resources that provide information about terminal and command-line applications, such as:
awesome command-line applications