real men do it with the keyboard -old unix admin saying
- unix-based system (e.g., macos, linux, bsd, etc), might work on recent versions of windows with add-ons or with older windows and a virtualbox unix installation
- terminal emulator
- command line
- python
- 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 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 |
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 |
share your calendar | share your calendar | gcalcli |
transfer files to your phone | send an image file to your phone | qr-filetransfer |
upload and share files | transfer firefox send | |
read the news with an RSS reader | newsboat | |
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 |
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 |
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 |
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 |
assignments | deliverables | references |
---|---|---|
download mp3 | search, download and play (with the terminal) your favorite song of the month from youtube | youtube-dl mpv |
text editor and plug-ins for code highlighting and autocompletion | edit the vim or the shell configuration file | vim |
organize your notes with emacs | use org mode | emacs |
format your report | use text formating tools to layout your final report | groff |
create your own static site and blog generator with pandoc | the generator should consider posts, pages, and templates | bashyll pandoc+makefile |
add a status bar to your shell/editor and configure a color-theme | edit the configuration files for your status line and for your color theme | status bar solarized redshift pywall |
build a custom desktop enviroment | customize the wallpaper, menu, bar, notifications, windows, screensaver and demonstrate them with a GIF | polybar rofi dunst awesome pipes flashfocus |
convert between different text formats | use vim (or emacs) to write your cv in markdown, track multiple formats with git and convert it to docx, html with pandoc | pandoc git sed |
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 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 |
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 | plot |
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 |
assignments | deliverables | references |
---|---|---|
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 |
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 |
configure a custom window manager | try different wm and configure one to fit your needs | sowm dwm |
use the terminal as an IDE | edit your files (e.g., cv, website, 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 |
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 |
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 | bashblog jenny bashyll kiss linux blog pandoc+makefile |
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 cloud services | ssh to a remote machine and demonstrate your remote cli user land (e.g., email, editor, cv, code, etc) | OpenSSH Cloud Stack |
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 |
choose your stack | 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 |
performance monitoring | monitor the performance of your python scripts and visualize them with colors and/or spark lines | py-spy hyperfine |
create a docker image for your development stack | demonstrate the custom image for CI of your cv and site | dry dockly alpine |
create a cli app for your favorite site | the application should be similar to rtv, haxor from hci | click |
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 |
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