{"id":57777,"url":"https://github.com/xfbs/awesome","name":"awesome","description":"my personal collection of awesome projects, links, books.","projects_count":45,"last_synced_at":"2026-08-04T14:00:21.538Z","repository":{"id":142175489,"uuid":"120758637","full_name":"xfbs/awesome","owner":"xfbs","description":"my personal collection of awesome projects, links, books.","archived":false,"fork":false,"pushed_at":"2018-03-03T20:31:46.000Z","size":2645,"stargazers_count":27,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-07-26T00:05:24.477Z","etag":null,"topics":["awesome","awesome-list","list","meta","personal","programming","tools"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xfbs.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-02-08T12:28:28.000Z","updated_at":"2025-12-11T12:51:41.000Z","dependencies_parsed_at":"2024-04-08T00:45:48.147Z","dependency_job_id":"d317c154-3f9b-451a-8370-e21a9a1c8e33","html_url":"https://github.com/xfbs/awesome","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/xfbs/awesome","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfbs%2Fawesome","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfbs%2Fawesome/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfbs%2Fawesome/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfbs%2Fawesome/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xfbs","download_url":"https://codeload.github.com/xfbs/awesome/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfbs%2Fawesome/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36277672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-04T02:00:06.901Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"created_at":"2024-04-08T00:00:24.406Z","updated_at":"2026-08-04T14:00:21.538Z","primary_language":null,"list_of_lists":false,"displayable":true,"categories":["C","D: [`dlang.org`](https://dlang.org/)","Web","Rust: [`rust-lang.org`](https://rust-lang.org)","Coding","Operating Systems","Crystal: [`crystal-lang.org`](https://crystal-lang.org/)","C++: [cpp](http://clang.org)","Basics","GUI","Ruby: [`ruby-lang.org`](https://www.ruby-lang.org)","Crypto"],"sub_categories":["Tools","Libraries","Compilers","[Math ∩ Programming](https://jeremykun.com)","[VimCasts](http://vimcasts.org)","Useful","[Cryptopals](http://cryptopals.com)","[Redox](https://www.redox-os.org)","[Vim](http://www.vim.org)","[Zsh](http://www.zsh.org)","[Bash](https://www.gnu.org/software/bash/)","[Textual](https://www.codeux.com/textual/)"],"readme":"# Awesome\n\nMy own curated (meaning subjective) list of awesome things (relating to\ncomputer science). I have (tried to) include examples and screenshots of\neverything. [Unlicensed](license.md) for maximum fork enjoyment. Note that\nthis license only applies to anything I have written — the screenshots\nmight contain material owned by the respective websites and I have copied\nsome of the explanations verbatim (this is, after all, still a work in\nprogress!)\n\n*Please send in\npull requests if I missed anything obvious!*\n\nThis is kind of supposed to be a replacement for my browser bookmarks.\nI thought it would be better to put these links out here for everyone,\nthan to have them rot in my previous convoluted folder hierachies.\n\n## Contents\n\n- [Entertainment](#entertainment) *that isn't pointless*.\n    - [Journals](#journals)\n    - [News](#news)\n    - [Blogs](#blogs)\n    - [Videos](#videos)\n- [Resources](#resources) *to help you learn*.\n    - [Web](#web)\n    - [Books](#books)\n    - [Papers](#papers)\n- [Challenges](#challenges) *for programmers*.\n    - [Math](#math)\n    - [Crypto](#crypto)\n    - [Coding](#coding)\n    - [Reverse](#reverse)\n    - [Commercial](#commercial)\n    - [Resources](#resources-1)\n- [Design](#design) *resources that might help you*.\n    - [Photography](#photography)\n    - [Fonts](#fonts)\n    - [Other](#other)\n- [Tools](#tools) *that I find essential*.\n    - [Basics](#basics)\n    - [GUI](#gui)\n- [Languages](#languages)\n    - [Ruby](#ruby)\n    - [Crystal](#crystal)\n    - [Rust](#rust)\n    - [C](#c-language)\n    - [Python](#python)\n    - [Scheme](#scheme)\n    - [OCaml](#ocaml)\n    - [Node.js](#node-js)\n    - [Haskell](#haskell)\n    - [RISC-V Asm](#risc-v-asm)\n    - [C++](#c-language-1)\n    - [Swift](#swift)\n    - [Nim](#nim)\n    - [Lua](#lua)\n    - [D](#d)\n- [Further](#further) *things I don't know how to categorize*.\n\n# Entertainment\n\n## Journals\n\nSemi-regular publications. As the publication frequency is much lower than\nnews websites, these can go into much more detail and are thus probably the\nbest way learn about recent advances.\n\n### [PoC||GTFO](https://www.alchemistowl.org/pocorgtfo/)\n\nThe international journal of *Proof of Concept or Get The Fuck Out*. For every\nrelease, hackers from all around the world gather together to share what they\nhave accomplished in what is without doubt the most natural form: the *proof of\nconcept*. They don't just share the, occasionally somewhat exaggerated, story:\nall of the code you need to reproduce it at home is included as well! Many of\nthe hacks in this journal involve retro hardware, and mind-boggling file format\nhackery.  The only thing that is asked of you, the reader, is to print and\nredistribute this document so that is can reach as many peopler as possible.\nInstructions on how to print it and how to price it (spoiler: it's free!) is\nincluded in every issue.\n\n![PoC||GTFO screenshot](img/pocorgtfo.png)\n\n## News\n\nThese are news sites worth reading and hopefully re-reading, about technology\nand related topics.\n\n### [Lobste.rs](https://lobste.rs/)\n![Lobsters screenshot](img/lobsters.png)\n\nTechnology-focused community centered around link aggregation and discussion.\nAll links are user-submitted. Small friendly community. Invite-only and ad free.\n\n### [Hacker News](https://news.ycombinator.com/)\n![Hacker News screenshot](img/hacker_news.png)\n\nSocial news website focusing on computer science and entrepreneurship.\nRun by startup fund Y Combinator. User-submitten link aggregator, bigger community,\nless personal but also ad-free.\n\n### [The Register](http://www.theregister.co.uk/)\n![The Register screenshot](img/theregister.png)\n\nIndependent news and views for the tech community.\nBased in London, UK. Does some really good dry humor, as you would expect.\n\n### [Ars Technica](https://arstechnica.com/)\n![Ars Technica screenshot](img/arstechnica.png)\n\nNews, guides, reviews, and features.\n\n### [Hubski](http://hubski.com)\n![Hubski screenshot](img/hubski.png)\n\nA community for sharing thoughtful information and conversation.\nSimilar to [Lobsters](#lobsters), but focussed on science in general.\n\n### [The Verge](https://www.theverge.com)\n![The Verge screenshot](img/theverge.png)\n\nGeneric tech news.\n\n## Blogs\n\nA few technology/culture centric blogs woth checking out.\n\n### [/dev/lawyer](https://writing.kemitchell.com)\n![/dev/lawyer screenshot](img/devlawyer.png)\n\n*Law, technology, and the space between*.\n\n### [Julia Evans](https://jvns.ca)\n![Julia Evans screenshot](img/jvns.png)\n\nRegular writings involving Rust, Ruby and how to take things like syscalls\napart.\n\n### [Eli Bendersky's Website](https://eli.thegreenplace.net/)\n![Eli Bendersky's Website](img/eli_bendersky.png)\n\nThis blog began in 2003 as a personal online journal; in the past\nfew years it became mostly an outlet for technical, programming-related posts.\nIt's my way to document things I find interesting for my future self.\n\nBlog about programming in a variety of languages, including Python, C, C++.\n\n## Videos\n\n### [devttys0](https://www.youtube.com/channel/UCuEqgu-PN4B2Jm_B5tccPCA)\n![devttys0 screenshot](img/devttys0.png)\n\nAdventures in learning and designing analog electronics!\n\n### [Micah Elizabeth Scott](https://www.youtube.com/channel/UCaEgw3321ct_PE4PJvdhXEQ)\n![Micah Elizabeth Scott screenshot](img/micahelizabethscott.png)\n\nArt, engineering, reverse engineering, and cats!\nThe awesome fusion of programming and electronics.\n\n### [Xiph Videos](https://www.xiph.org/video/)\n![Xiph Video screenshot](img/xiph_video.png)\n\nThis two-part series, consisting of *A Digital Media Primer for Geeks* and\n*Digital Show \u0026 Tell*, you can learn about the interface between analog and digital:\nhow are analog singals captured? How are they reproduced? What kinds of analog signals\ncan we capture? What does the sampling frequency have to do with this? What is the\nNyquist frequency? Why does it still make sense to use sampling rates much higher than\nthe audible spectrum to capture analog signals accurately?\n\n### [CCC Media](https://media.ccc.de)\n![CCC media screenshot](img/ccc_media.png)\n\nOffers a wide variety of video and audio material distributed by the Chaos\nComputer Club, Europe's largest association of hackers,  provided in native\nformats (usually MPEG and/or Vorbis families) for online viewing. Older,\narchived recordings might require proprietary players. The media files on this\nsite can also be downloaded for offline consumption.  Some of the talks here\nare in German — but most are available in English for your discretionary\nconsumption.\n\n# Resources\n\nYou want to learn something?\n\n## Web\n\nResources from around the web.\n\n### [Math ∩ Programming](https://jeremykun.com)\n![Primers screenshot](img/jeremykun_primers.png)\n\nHas two sections, which are of equally high quality: the\n[Primers](https://jeremykun.com/primers/), which are a terse explanation of\nmathematical concepts that are used or useful in computer science.  Is there a\ntopic in mathematics that you don't quite understand or you want to refresh,\nbut you don't want to read an 800-page mathematics textbook? Then this section\nis for you. \n\nThe other section is the [Main Content](https://jeremykun.com/main-content/),\nwhich assumes that you are familiar with all the topics mentioned in the\n[Primers](https://jeremykun.com/primers/).\n\n### [What every computer science major should know](http://matt.might.net/articles/what-cs-majors-should-know/)\n![What every computer science majoy should know screenshot](img/should_know.png)\n\nHas a very nice overview of the field of computer science, along with very\nhelpful literature for most parts of it, and what is expected of a computer\nscientist to know of each of the parts.\n\n### [Programming Language Theory](http://steshaw.org/plt/)\n![Steshaw PLT screenshot](img/steshaw_plt.png)\n\nFinding a path to enlightenment in Programming Language Theory can be a tough\none, particularly for programming practitioners who didn’t learn it at school.\nThis resource is here to help.  Provides a listing of resources to help deepen\none's understanding of PLT. \n\n### [Seeing Theory](http://students.brown.edu/seeing-theory/)\n![Seeing Theory screenshot](img/seeing_theory.png)\n\nA visual introduction to probability and statistics.  Want to refresh your\nknowledge of probability and statistics, but prefer not to wade through dry\ntextbooks? Then this page is for you.\n\n### [Crypto 101](https://www.crypto101.io)\n![Crypto 101 screenshot](img/crypto101.png)\n\nAn introductory course on cryptography, freely available for programmers of all\nages and skill levels. Started as a presentation at PyCon 2013, which tried to\ngo through all of the major *dramatis personae* of cryptography to make TLS\nwork in 45 minutes. This book is the natural extension of that, with an\nextensive focus on breaking cryptography.\n\n### [VimCasts](http://vimcasts.org)\n![VimCasts](http://vimcasts.org/)\n\nA series of screencasts targeted at people that want to learn or imporove their\ncommand of `vim`, from the author of *Practical Vim*, a really good book on vim\n(I bought it years ago to improve my vim skills, and still keep it in reach of\nmy desk).\n\n## Books\n\n### [Letter Fountain](https://books.google.de/books/about/Letter_Fountain.html?id=1CS5oAEACAAJ\u0026redir_esc=y\u0026hl=en)\n\nISBN: 978-3836554534\n\nDitch graphic designer and Dutch Fontana Publishers founder explains all you\never wanted to know about printing letters and numbers. In the book, he not\nonly explains the basics of lettering, but also examines in detail over 150\ntypefaces, their unique characteristics and where they come from.\n\n## Papers\n\n# Challenges\n\nSo you think you can code? Well, prove yourself wrong with any one of these\nchallenges. Choose from math, crypto or coding-themed puzzles.\n\n## Math\n\n### [Project Euler](https://projecteuler.net/)\n![Project Euler screenshot](img/projecteuler.png)\n\nA series of challenging mathematical/computer programming problems\nthat will require more than just mathematical insights to solve.\nProvides a platform for the inquiring mind to delve into unfamiliar\nareas and learn new concepts in a fun and recreational context.\n\nGreat place for beginners and more advanced people alike, whether\nyou are interested in learning or improving your programming skills\nor in mathematics.\n\n## Crypto\n\n### [Cryptopals](http://cryptopals.com)\n![Cryptopals screenshot](img/cryptopals.png)\n\nA different way to learn about crypto than taking a class\nor reading a book. We give you problems to solve. They're derived\nfrom weaknesses in real-world systems and modern cryptographic\nconstructions. We give you enough info to learn about the underlying\ncrypto concepts yourself. When you're finished, you'll not only have\nlearned a good deal about how cryptosystems are built, but you'll also\nunderstand how they're attacked.\n\nGreat place for some hands-on experience with cryptography, the\nchallenges aren't too difficult but they provide a good understanding\nof the theory behind some of the crypto we use.\n\n#### [id0-rsa](https://id0-rsa.pub),\n![id0-rsa screenshot](img/id0_rsa.png)\n\nSome problems related to computer security (specifically poorly\nimplemented security). You are free to use any language\nand environment you like to complete them. The problems require\nfamiliarity with programming, but not necessarily with applied\ncryptography or computer security in general.\n\n## Coding \n\n#### [CS:APP3e Lab Assignments](http://csapp.cs.cmu.edu/3e/labs.html)\n![CS:APP3e screenshot](img/cs_app3e_lab.png)\n\nThis book (CS:APP3e) is the third edition of a book that stems from the\nintroductory computer systems course developed at Carnegie Mellon\nUniversity, starting in the Fall of 1998, called \"Introduction to Computer\nSystems\" (ICS)\n\nAssignments involving low-level programming, some of them are quite interesting.\n\n#### [CodeChef](https://www.codechef.com)\n\nCodeChef was created as a platform to help programmers make it big in the\nworld of algorithms, computer programming and programming contests. We host\nthree featured contests every month and give away prizes and goodies to the\nwinners as encouragement. Apart from this, the platform is open to the entire\nprogramming community to host their own contests. Major institutions and\norganizations across the globe use our platform to host their contests. On an\naverage, 30+ external contests are hosted on our platform every month.\n\n## Reverse\n\nThese can help you learn security concepts by providing safe and *legal*\nenvironments where you can break security. It's like a sandbox for hackers.\n\n### [Over the Wire](https://overthewire.org/wargames/)\n\nThe wargames offered by the OverTheWire community can help you to learn and\npractice security concepts in the form of fun-filled games.\n\nProvides a list of online (hosted) wargames, along with informations on\nhow to access it (SSH access).\n\n### [We Chall](https://www.wechall.net)\n\nAggregates resources and links to challenges. Probably more extensive than\nmy list, and also includes some rather obscure ones. Worth checking out.\n\n### [Into to Reverse Engineering](https://leotindall.com/tutorial/an-intro-to-x86_64-reverse-engineering/)\n\nHas some simple C scripts that need to be cracked with standard Linux\nutilities.\n\n### [exploit.courses](https://exploit.courses/#/challenges)\n\nA small (~30-problem) set of challenges for that has an interactive online\nlearning area.\n\n## Commercial\n\nThere are also some commecial challenges. These websites might offer paid\nsubscriptions or they might be sponsored by companies and used as recruitment\ntools. They still have interesting problems — but some people use these as a\nmeans to get hired instead of out of the pure pleasure of solving a\n(complicated) problem.\n\n### [HackerRank](https://www.hackerrank.com)\n\nThe HackerRank team is on a mission to match every developer in the world to\nthe right job by providing a technical recruiting platform that assesses\ndevelopers based on actual coding skills. Our solution is revolutionizing the\nway companies discover and evaluate talented developers. HackerRank is the\ndestination for the best developers to hone their skills and for companies to\nfind top software developers.\n\n### [LeetCode](https://leetcode.com)\n\nOver 750 questions for you to practice. Come and join one of the largest tech\ncommunities with hundreds of thousands of active users and participate in our\ncontests to challenge yourself and earn rewards.\n\n### [CodeFights](https://codefights.com)\n\nAnother programming quiz website.\n\n## Fun\n\nThere are also some challenges that are a little more game-like. Some of these\nmight be good for beginners, while others might be good because you can watch\nyour code running, live.\n\n### [RubyWarrior](https://www.bloc.io/ruby-warrior)\n![RubyWarrior screenshot](img/ruby_warrior.png)\n\nYou take control over a warrior, by writing a minimalist A.I. to control\nhim on his quest. Cute retro pixel art and Ruby make this a pleasant and\naddicting game at the same time.\n\n### [Screeps](https://screeps.com)\n![Screeps screenshot](img/screeps.png)\n\nScreeps means “scripting creeps.” It’s an open-source sandbox MMO RTS game\nfor programmers, wherein the core mechanic is programming your units’ AI. You\ncontrol your colony by writing JavaScript which operate 24/7 in the single\npersistent real-time world filled by other players on par with you.\n\n### [Regex Crossword](https://regexcrossword.com)\n![Regex Crossword screenshot](img/regexcrossword.png)\n\nThink of a crossword puzzle. Now, instead of hints, you replace them\nwith Regexes. And instead of words, the solution can be anything. Well,\nanything that the regex matches. Intrigued? Check it out!\n\n### Resources\n\nYou need help with some of these challenges? Or you want to learn\nmore? These resources might help.\n\n### [Competetive Programmer's Handbook](https://cses.fi/book.html)\n![Competetive Programmer's Handbook screenshot](img/comp_prog_hand.png)\n\nThe purpose of this book is to give the reader a thorough introduction to\ncompetitive programming. The book is especially intended for students who\nwant to learn algorithms and possibly participate in the International\nOlympiad in Informatics (IOI) or in the International Collegiate Programming\nContest (ICPC).\n\n# Design\n\nProgramming and Design is inseparably linked — whenever you write code, you design.\nThat could be the design of the framework, the design of the API, or the\ndesign of the UI. These are some resources that are related to programming and\ndesign.\n\n## Photography\n\n### [Unsplash](https://unsplash.com), ★★★★★\n![Unsplash screenshot](img/unsplash.png)\n\nOver 300,000 free (do whatever you want) high-resolution photos brought\nto you by the world’s most generous community of photographers.\nNeed a new wallpaper? A backgroup photo for a website design? Stock photos\nto fill in some blanks?\n\n## Fonts\n\n### [nerd-fonts](https://github.com/ryanoasis/nerd-fonts)\n\nProject that patches developer targeted fonts with a high number of glyphs\n(icons). Specifically to add a high number of extra glyphs from popular 'iconic\nfonts' such as Font Awesome ➶, Devicons ➶, Octicons ➶, and others.\n\nThese are particularily well-suited for use as console fonts, being a\nlovechild of traditional monospaced programming fonts and iconic fonts\nmeans you can both use them for programming work as well as to disply\nfontawesome icons as outputs in scripts or you can use the powerline\nglyphs to aesthetically spice up your `vim`.\n\n### [Input](http://input.fontbureau.com)\n![Input Font screenshot](img/input_font.png)\n\nFlexible system of fonts designed specifically for code by David Jonathan\nRoss. It offers both monospaced and proportional fonts, all with a large\nrange of widths, weights, and styles for richer code formatting.\nA particularly beautiful set of monospace fonts for programming.\nFree for personal use.\n\n## Other\n\n### Solarized Colorscheme\n\n*TODO.*\n\n# Tools\n\nIn this section I will showcase the most useful tools that I have an use. These\ninclude both command-line and GUI tools. I'm a big proponent for doing things\nthe command-line way, but there are some things here and there that GUIs are\njust better at.\n\n## GUI\n\n### [Dash](https://kapeli.com/dash)\n![Dash screenshot](img/dash.png)\n\nAn API Documentation Browser and Code Snippet Manager. Dash stores snippets\nof code and instantly searches offline documentation sets for 200+ APIs, \n100+ cheat sheets and more. You can even generate your own docsets or request\ndocsets to be included.\n\nI really don't know what I would do without Dash. If you need to find out\nthe name of a method of a function in a given programming language, if you\nneed to find out how a given library function works, or for some languages\neven if you want to look up the source code of a particular function, Dash\nis there for you. No more googling anything, you just download the docsets\nfor all the languages (and libraries, and Ruby gems, and Npm packages, \nand whatever else you need) and you alwasy have it with you.\n\n### [Textual](https://www.codeux.com/textual/)\n![Textual 5 screenshot](img/textual.png)\n\nThe world's most popular application for interacting with Internet Relay Chat\n(IRC) chatrooms on macOS.  Includes two elegantly designed dark and light\nvariants of the user interface which have been refined all the way down to\nthe very last pixel.  Supports very powerful modern technologies such as\nnative IPv6, the latest IRCv3 specifications, client-side certificate\nauthentication, and much, much more in a easy to navigate, clutter free\nenvironment.  Protects your privacy by leveraging widely accepted, proven\ntechnologies such as Off-the-Record Messaging (OTR) to ensure that the only\npeople reading your conversations are those that you intend to.\n\nMy favourite (and only) GUI IRC client on macOS. It's really beautiful, it just\nworks, it's not overloaded. Also, it's open source — on the website you won't\nfind it directly, but the source is on\n[GitHub](https://github.com/Codeux-Software/Textual) and it is possible to\nbuild it from source (if you know what you're doing).\n\n### [GitUp](http://gitup.co)\n![GitUp screenshot](img/gitup.png)\n\nNormally, the `git` command-line tool is just what you need. It's more\nefficient to use while you're in the terminal anyways, you don't want to\nhave to mess around with any buttons. But, there is just a handful of \nthings that GitUp is really good at:\n\nGitUp can visualize your repo so you know exactly what's going on, and\nthe great thing is that the visualization is real-time, meaning that it\nupdates while you mess with your repo.\n\nI think this might just be the best feature of GitUp — it saves snapshots\nof your repo before and after you do things, meaning that when you do\nsomething stupid, you can always go back.\n\nBasically any thing you can do with `git`, you can also do with GitUp.\n\nI think as an open-source tool, GitUp is useful to have in your toolbelt.\nIt might not replace your everyday use of `git`, but it will be there when \nyou need it.\n\n### [Alacritty](https://github.com/jwilm/alacritty)\n![Alacritty screenshot](img/alacritty.png)\n\nSimple, performant, GPU-accelerated terminal emulator for macOS and Linux.\nProbably the fastest terminal emulator out there.\nI wrote this whole document in `vim` running inside `tmux` running in `Alacritty`.\nNeed I say more?\n\n## Basics\n\n### [tmux](https://github.com/tmux/tmux)\n\nTerminal multiplexer: run multiple virtual terminals in one physical\nterminal. Want two terminals side-by-side? No problem. Want four terminals\nin one? Easy. Want a large terminal to edit a file and a smaller underneath\nto run tests? Done.\n\n### [Zsh](http://www.zsh.org)\n\nPowerful shell with scripting language.\n\n#### Plugins\n\n- [Oh-My-Zsh](https://ohmyz.sh)\n\n  Open source, community-driven framework for managing your ZSH configuration.\n\n- [Zim](https://github.com/zimfw/zimfw)\n\n  Zsh configuration framework with blazing speed and modular extensions.\n\n### [Bash](https://www.gnu.org/software/bash/)\n\nThe standard shell on most systems. Very simple but decent. This probably comes\npre-installed on your system anyways but hey — sent it some love.\n\n#### Plugins\n\n- [Sensible Bash](https://github.com/mrzool/bash-sensible): Sane bash defaults.\n\n### [Vim](http://www.vim.org)\n\nThe ubiquitous editor. Available on most systems out-of-the-box. Versatile.\nExtendable with plugins. Famously difficult to quit out of. If you can conquer\nVim — you'll feel right at home anywhere.\n\n#### Plugins\n\n- [pathogen.vim](https://github.com/tpope/vim-pathogen)\n\n  Makes it super easy to install plugins and runtime files into their own\n  private directories. Why? Because it means that you can clone Vim plugins\n  into `~/.vim/bundle` and they will be autoloaded.\n\n- [sensible.vim](https://github.com/tpope/vim-sensible)\n\n  Sensible defaults for Vim.\n\n- [syntastic](https://github.com/vim-syntastic/syntastic)\n\n  Syntax checker for Vim.\n\n- [nerdtree](https://github.com/scrooloose/nerdtree)\n\n  File explorar plugin for Vim.\n\n- [vim-colors-solatized](https://github.com/altercation/vim-colors-solarized)\n\n  Solarized colorscheme for Vim.\n\n- [vim-airline](https://github.com/vim-airline/vim-airline)\n\n  Lean and mean status / tabline for Vim that's light as air.\n\n### [NeoVim](https://neovim.io)\n\nModern editor based on Vim, with better extendability support.\n\n### [AMP](https://amp.rs)\n\nNo plugins, zero configurations. All the essentials packed in by default.\nWritten in Rust, inspired by Vim.\n\n### [Git](https://git-scm.com)\n\nThe *de-facto* standard (distributed) version control system. Tracks\nyour code files, allows you to undo any change that you have committed,\nallows you to work on one codebase with multiple people, allows for\neasy backups of all your code, works seamlessly with large projects\nor even modular projects.\n\n# Projects\n\nThese are projects that interest me, usually from an academic point\nof view. These projects might be under construction, incomplete\nor unusable — but that's not really the point.\n\n## Operating Systems\n\nObviously, operating systems are interesting to a Computer Scientist.\nBut there are many more beyond the big three — Windows, macOS and Linux.\nAnd what lies beyond them is where the magic happens. \n\n### [Redox](https://www.redox-os.org)\n\n![Redox screenshot](https://i.imgur.com/MJqsqYo.png)\n\nUnix-like operating system written in Rust, aiming to being the\ninnovations of Rust to a modern microkernel and full set of\napplications.\n\n### [Ulix](http://ulixos.org)\n![Ulix screenshot](img/ulix.png)\n\nUnix-like operating system that was developed at University of Erlangen-\nNuremberg, using Donald E. Knuth's concept of Literate Programming, both\nfor the implementation and the documentation. Written in C and Assembler\nfor the Intel x86 architecture. It is available in source form, and\nas book, which includes the documentation and the source code.\n\n### [xv6](https://pdos.csail.mit.edu/6.828/2017/xv6.html)\n![img/xv6.png]\n\nA Unix-like operating systems in less than 10kLoC. Comes with booklets\ncontaining the complete source code as well as with a commentary explaining\nhow things work. Minimalistic, but good to understand the basic concepts\nof how operating systems work.\n\n# Languages\n\nWhich programming languages do I find cool? Which programming languages do I\nfind useful? Which programming languages would I recommend to a friend to learn?\n\n## Ruby: [`ruby-lang.org`](https://www.ruby-lang.org)\n\nRuby is a language of careful balance. Its creator, Yukihiro “Matz”\nMatsumoto, blended parts of his favorite languages (Perl, Smalltalk, Eiffel,\nAda, and Lisp) to form a new language that balanced functional programming\nwith imperative programming.\n\nHe has often said that he is “trying to make Ruby natural, not simple,” in a\nway that mirrors life.  Building on this, he adds: Ruby is simple in\nappearance, but is very complex inside, just like our human body.\n\nBy far my favourite language. The syntax is very expressive, the standard\nlibrary is really good and the package manager,\n[RubyGems](https://rubygems.org) is fantastic.\n\nIt is very easy to install packages, called *gems* in Ruby teminology:\n\n    $ gem install bcrypt\n\nAnd in addition to that, Ruby itself is very nice to use. \n\n```ruby\n5.times do\n  puts [\"Hello\", \"world!\"].join(' ')\nend\n```\n\n### Tools\n\n#### [Rubocop](https://github.com/bbatsov/rubocop)\n\n\u003e A Ruby static code analyzer, based on the community Ruby style guide.\n\nIt is easily installed with RubyGems:\n\n```bash\n$ gem install rubocop\n```\n\nWith a valid ruby file, like such:\n\n###### file: [`examples/rubocop/example.rb`](examples/rubocop/example.rb)\n\n```ruby\n# bad -- four spaces instead of two.\ndef bad_method\n    puts \"hello!\"\nend\n\n# bad -- uses semicolon to separate expressions.\nbad_method; bad_method\n\n# bad -- no whitespace between operator.\nsum = 1+3\n\n# bad -- don't use several empty lines in a row.\n\n\nputs(sum)\n```\n\nRunning `rubycop` on it produces a set of warnings (`--format simple` reduces the\nverbosity of the output):\n\n```bash\n$ rubocop --format simple examples/rubocop/example.rb\n== examples/rubocop/example.rb ==\nC:  3:  1: Layout/IndentationWidth: Use 2 (not 4) spaces for indentation.\nC:  3: 10: Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.\nC:  7: 11: Style/Semicolon: Do not use semicolons to terminate expressions.\nC: 10:  8: Layout/SpaceAroundOperators: Surrounding space missing for operator +.\nC: 14:  1: Layout/EmptyLines: Extra blank line detected.\n\n1 file inspected, 5 offenses detected\n```\n\nSome, but not all issues can be corrected automatically. To tell rubocop to try\nto fix things, use the `-a` option, like so:\n\n```bash\n$ rubocop --format simple -a examples/rubocop/example.rb\n== examples/rubocop/example.rb ==\nC:  3:  1: [Corrected] Layout/IndentationWidth: Use 2 (not 4) spaces for indentation.\nC:  3: 10: [Corrected] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.\nC:  7: 11: Style/Semicolon: Do not use semicolons to terminate expressions.\nC: 10:  8: [Corrected] Layout/SpaceAroundOperators: Surrounding space missing for operator +.\nC: 14:  1: [Corrected] Layout/EmptyLines: Extra blank line detected.\n\n1 file inspected, 5 offenses detected, 4 offenses corrected\n```\n\n### Libraries\n\n## Crystal: [`crystal-lang.org`](https://crystal-lang.org/)\n\n\u003e Crystal is a programming language with the following goals:\n\u003e - Have a syntax similar to Ruby (but compatibility with it is not a goal)\n\u003e - Statically type-checked but without having to specify the type of variables\n\u003e   or method arguments.\n\u003e - Be able to call C code by writing bindings to it in Crystal.\n\u003e - Have compile-time evaluation and generation of code, to avoid boilerplate\n\u003e   code.\n\u003e - Compile to efficient native code.\n\nBasically, Crystal is like an improved (in terms of performance) version of\nRuby. It is statically typed — but thanks to type inference, you don't have\nto specify types. There are some other differences, since it is a compiled\nlanguage it's not possible to evaluate code at runtime, but in exchange\nthe speed is on-par with C.\n\nThe [shards](https://crystalshards.xyz) package manager is very useful\nbecause it is decentralized and allows to install dependencies from any\ngit repository.\n\n```crystal\n# A very basic HTTP server\nrequire \"http/server\"\n\nserver = HTTP::Server.new(8080) do |context|\n  context.response.content_type = \"text/plain\"\n  context.response.print \"Hello world, got #{context.request.path}!\"\nend\n\nputs \"Listening on http://127.0.0.1:8080\"\nserver.listen\n```\n\n### Tools\n\n### Libraries\n\n## C\n\nC (/siː/, as in the letter c) is a general-purpose, imperative computer\nprogramming language, supporting structured programming, lexical variable\nscope and recursion, while a static type system prevents many unintended\noperations. By design, C provides constructs that map efficiently to typical\nmachine instructions, and therefore it has found lasting use in applications\nthat had formerly been coded in assembly language, including operating\nsystems, as well as various application software for computers ranging from\nsupercomputers to embedded systems. *Source:\n[`wikipedia.org`](https://en.wikipedia.org/wiki/C_(programming_language))*\n\nC is a little bit of an oddball: It doesn't really have a website that I\ncould link to. But I guess that's okay, I mean basically everyone knows it.\n\nWhat is awesome about it, you ask? The fact that it is still alive. It might\nnot be the nicest of all languages. In fact, when categorizing it, it is\neasiest to list the things that it doesn't have. Without a package manager,\nbuilding code is usually done with an embarassingly fragile set of scripts that\nare prone to failure when run on an unfamiliar platform. Without namespacing,\nmost libraries prefix all functions and macros with the name of the library.\nWithout memory safety, we need all kinds of tools, sanitizers, fuzzers and\ncheckers to test if programs leak and behave, and even with these tools bugs\nand security issues are common. But despite all of that, C is still the most\nimportant language. Not because it is pretty, but because it is one of the most\nbasic building blocks, with most languages implemented in C. Knowing C is\nparamount when trying to understand other languages by digging into their\nsource code.\n\n### Compilers\n\n#### [Clang](https://clang.llvm.org/)\n\n#### [Clang AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer.html)\n\n\u003e Fast memory error detector, that can find out-of-bounds accesses, \n\u003e use-after-free, double-free, invalid free, memory leaks.\n\n#### [Clang LeakSanitizer](https://clang.llvm.org/docs/LeakSanitizer.html)\n\n\u003e Run-time memory leak detector.\n\n#### [Clang MemorySanitizer](https://clang.llvm.org/docs/MemorySanitizer.html)\n\n\u003e Detector of uninitialized reads.\n\n#### [Clang UndefinedBehaviourSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html)\n\n\u003e Fast undefined behavior detector. Modifies the program at compile-time\n\u003e to catch various kinds of undefined behavior during program execution, for\n\u003e example: using misaligned or null pointers, signed integer overflows, or\n\u003e conversion to, from, or between floating-point types which would overflow\n\u003e the destination.\n\n#### gcc\n\n### Tools\n\n##### [clang-format](https://clang.llvm.org/docs/ClangFormat.html)\n\n\u003e Tool to format C/C++/Java/JavaScript/Objective-C/Protobuf code.\n\n##### [GDB](https://www.gnu.org/software/gdb/)\n\n\u003e The debugger we all know, love and hate.\n\n##### [LLDB](https://lldb.llvm.org)\n\n\u003e *Next generation, high-performance* debugger.\n\n##### [pfff](https://github.com/facebook/pfff)\n\n\u003e A set of tools and APIs to perform static analysis, code visualizations,\n\u003e code navigations, or style-preserving source-to-source transformations such\n\u003e as refactorings on source code. There is good support for C, Java,\n\u003e Javascript and PHP. There is also preliminary support for other languages\n\u003e such as C++, Rust, C#, Html, CSS, Erlang, Lisp, Haskell, Python, OPA and\n\u003e SQL. There is also very good support for OCaml code so that the framework\n\u003e can be used on the code of pfff itself.\n\n##### [rr](http://rr-project.org)\n\n\u003e Record a failure once, then debug the recording, deterministically, as many\n\u003e times as you want.\n\n##### [Valgrind](http://valgrind.org)\n\n\u003e An instrumentation framework for building dynamic analysis tools. Includes\n\u003e tools that can automatically detect many memory management and threading\n\u003e bugs, and profile code in detail.\n\n### Libraries\n\n#### Snow: [`github.com/mortie/snow`](https://github.com/mortie/snow)\n\n\u003e Header-only unit testing library for C.\n\nC really doesn't have a lot built-in. As far as testing goes, the only\ntool that C provides is the `assert()` macro, which can be used to\nset run-time assertions, which will abort the program when false.\n\nSnow wraps this into a nice-to-use DSL for defining tests for different\nmodules and pretty-prints the test invocation.\n\n###### Example\n\nThis is what a sample test with snow could look like (adapted from the\n[snow GitHub readme](https://github.com/mortie/snow/blob/master/README.md)):\n\n```c\ndescribe(files, {\n  it(\"opens files\", {\n    FILE *f = fopen(\"test\", \"r\");\n    assertneq(f, NULL);\n    defer(fclose(f));\n  });\n\n  subdesc(fread, {\n    it(\"reads 10 bytes\", {\n      FILE *f = fopen(\"/dev/zero\", \"r\");\n      assertneq(f, NULL);\n      defer(fclose(f));\n\n      char buf[10];\n      asserteq(fread(buf, 1, 10, f), 10);\n    });\n  });\n});\n\nsnow_main();\n```\n\n#### Jansson: [`github.com/akheron/jansson`](https://github.com/akheron/jansson)\n\n\u003e Parse and generate JSON formatted data.\n\n#### Debug: [`github.com/esneider/debug`](https://github.com/esneider/debug)\n\n\u003e Debug like a sir.\n\n#### utf8.h: [`github.com/sheredom/utf8.h`](https://github.com/sheredom/utf8.h)\n\n\u003e UTF-8 string handling made easy.\n\n#### Onigmo: [`github.com/k-takata/Onigmo`](https://github.com/k-takata/Onigmo)\n\n\u003e Regex library, default library used by Ruby 2.0 and later.\n\n## Rust: [`rust-lang.org`](https://rust-lang.org)\n\n\u003e Rust is a systems programming language that runs blazingly fast, prevents\n\u003e segfaults, and guarantees thread safety.\n\u003e\n\u003e Featuring: zero-cost abstractions, move semantics, guaranteed memory safety,\n\u003e threads without data races, trait-based generics, pattern matching, type\n\u003e inference, minimal runtime, efficient C bindings, \n\nWe all have a joke or two about a hipster programmer wildly fighting the\nRust borrow checker. It's a beautiful language, with a very intimidating\npromise and the potential to rival C. It does have a sweet syntax, taking\nin many inspirations from other languages.\n\n### Useful\n\n#### [Rust Iterator Cheatsheet](https://danielkeep.github.io/itercheat_baked.html)\n\n### Tools\n\n#### [rustfmt](https://github.com/rust-lang-nursery/rustfmt)\n\n\u003e   A tool for formatting Rust code according to style guidelines.\n\n#### [rustup](https://www.rustup.rs)\n\n\u003e Installer for Rust.\n\nThis description is actually a bit underwhelming, since `rustup` does a little\nmore than just installing Rust. It can keep track of different toolchains for,\nyou can use it to switch between channels (eg. `stable`, `beta`, `nightly`),\nand you can update each toolchain.\n\n### Libraries\n\n## Python: [`python.org`](https://python.org)\n\n## Scheme: [`call-cc.org`](http://call-cc.org)\n\n## OCaml: [ocaml](https://github.com/ocaml/ocaml)\n\n## Node.js: [nodejs](https://github.com/nodejs/node)\n\n## Java9: [java9](https://www.oracle.com/java/java9.html)\n\n## Haskell: [haskell](https://www.haskell.org)\n\n## RISC5: [risc5asm](https://rv8.io)\n\n## C++: [cpp](http://clang.org)\n\n### Tools\n\n#### clang-tidy: [`clang.llvm.org/extra/clang-tidy`](http://clang.llvm.org/extra/clang-tidy/)\n\n\u003e   A clang-based C++ “linter” tool. Its purpose is to provide an extensible\n\u003e   framework for diagnosing and fixing typical programming errors, like style\n\u003e   violations, interface misuse, or bugs that can be deduced via static\n\u003e   analysis.\n\n### Libraries\n\n#### Catch2: [`github.com/catchorg/Catch2`](https://github.com/catchorg/Catch2)\n\n\u003e   Simple unit testing framework for C++\n\n## Swift: [swift](https://github.com/apple/swift)\n\n## Nim: [nim](https://nim-lang.org)\n\n## LuaJIT: [luajit](https://luajit.org/luajit.html)\n\n## D: [`dlang.org`](https://dlang.org/)\n\n# Further\n\nAssorted Awesome lists worth checking out with content related to mine.\n\n- [Awesome C](https://notabug.org/koz.ross/awesome-c)\n","projects_url":"https://awesome.ecosyste.ms/api/v1/lists/xfbs%2Fawesome/projects"}