Το κάθε μάθημα έχει διαφορετικό σετ ασκήσεων τις οποίες θα βρείτε κάτω από τον αντίστοιχο τίτλο. Το κάθε σετ έχει περισσότερες από 10 ασκήσεις οι οποίες εμφανίζονται με σειρά δυσκολίας από την πιο εύκολη στην πιο δύσκολη. Αν γίνουν περισσότερες τότε θα κρατήσουμε τους καλύτερους βαθμούς, αρκεί να έχουν έχουν γίνει commit τα λινκ μέσα στην αναφορά σας στις παρακάτω προθεσμίες. Για να βαθμολογηθεί μια άσκηση θα πρέπει το command prompt να είναι ο ΑΜ σας. Για περισσότερες οδηγίες δείτε την ενότητα της βαθμολόγησης παρακάτω.
Άσκηση | Προθεσμία |
---|---|
1-5 | 30 Μαρτίου |
6+ | 10 Μαϊου |
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 sessions as described in the deliverables
- hci: user land
- cscw: work online
- multimedia: 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) | cheat tldr ls less nano source PS1 neofetch |
get familiar with basic commands, reading documentation and editing files | browse and view files on your system | man vim ranger bash guide error correction |
become productive with a todo list | create a list of todos, edit, delete, and check some of them | todo.txt todo.txt-cli task |
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 |
organize your notes with a wiki | use vi or emacs org-mode to add (edit and delete) and link several pages | org-wiki viki |
track your expenses | add a source of income and some expenses | ledger |
track your time with a simple journal | jrnl | |
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 |
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 |
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 percol |
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 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 |
assignments | deliverables | references |
---|---|---|
connect to wireless network | list available networks and connect to one that requires web login | nmcli curl wpa_supplicant http-prompt |
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 |
manage and share your dot files | configure git, edit and push your dot files | rcm dotfiles stow |
share your files online and along devices | share your calendar | gcalcli |
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 |
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 | rsync rclone |
|
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 |
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 |
---|---|---|
download mp3 | search, download and play (with the terminal) your favorite song of the month from youtube | youtube-dl mpv |
edit a spreadsheet | edit values and formulas | sc-im |
read an ebook | read, search, bookmark, and annotate your favorite ebook | |
manage torrent files | search and download a torrent | torque transmission-cli |
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 |
batch image conversion | convert your image files to different sizes and formats | ImageMagick ufraw |
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 |
create a simple website with a static generator | single page with name-AM-github and links to your asciinema deliverables | jekyll hakyll nikola |
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 |
manage your academic bibliography | import your bibtex formated bibliography, add, edit, delete an entry | pubs papis |
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 |
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 |
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 your own static site and blog generator | the generator should consider posts, pages, and templates | blag |
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 a set of cli tools with minimal dependencies and a software licence that allows commercial use and selling | howdoi |
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 minimal linux system for a particular purpose | your custom 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 |
the above references 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
graphical user interfaces are good for 2 years old
Passing grade is awarded as soon as you include in your project report a link to a post to asciinema (idle-time<0.5sec) that demonstrates basic usage with default options. The grade improves for each extra configuration added and becomes excellent as soon as you find a similar tool or for significantly novel uses. Ncurses is an interesting tool but it is not purely command line, so you might employ it at your own risk.