Borgmarks - Merlin Corey at Github dot I/O

Table of Contents

1 Borgmarks

Bookmarks in emacs org-mode.

Curated, categorized, and tagged by hand.

2 Theory of organization

2.1 Categorization through headings

  • Top-level headings represent broad categories of related links.
  • Tagging is used for exposing topics related to a particular link.

2.2 Subcategorization through subheadings

  • Subheadings are used to represent narrower subcategories within a particular category.
  • Subheadings must come after the sibling links.

2.3 Tags for metadata

  • Tags should be single words so they can be categorized automatically without a full NLP engine
  • Tags should include the publish year and last update year if available

2.4 Master list vs Category pages

Currently there is only a single page master list, but it is getting very large to manage and read.

2.4.1 Roadmap

In the future we will want to have to category and potentially even subcategory pages.

This will mean either compiling those pages from the master list, or compiling the master list from those pages. Compiling the master list from the categories and subcategories seems most appropriate.

2.4.2 History

Originally, Borgmarks was a single index.org file with some example elisp code.

2.5 Theory of operation

  • Links should be their own headings followed by tags.
  • Optional properties with CREATED date.
  • Description.

2.5.1 Managing web bookmarks with Org-mode   emacs orgmode bookmarks

Well written post linked to from this discussion on reddit and elsewhere.

(setq org-capture-templates
  '(
    ;; many more capture templates
    ("b" "Bookmark" entry (file+headline "~/share/all/org-mode/notes.org" "Bookmarks") "* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n" :empty-lines 1)
    ;; many more capture templates
   )
)

2.5.2 Org Card :emacs:orgmode:reference:card

3 Algorithms

3.1 Books

3.1.1 Annotated Algorithms in Python   book algorithms python

3.2 Programming Exercises

3.2.1 Project Euler   programming exercise math

3.2.2 Codewars   programming exercise

3.2.3 Exercism   programming exercise opensource

3.3 Visualizing Algorithms   bostocks visualization algorithms

Great overview of various algorithms with visualizations from visualization master Mike Bostocks.

3.4 Solving pocket Rubik's cube (2 * 2 * 2) using Z3 and SAT solver   algorithms simplified rubiks cube solver

3.5 Bubble Sort: An Archaeological Algorithmic Analysis   algorithms bubble sort analysis

3.6 The Archive of Interesting Code   algorithms datastructures archive examples

3.7 Accidentally Quadratic   blog algorithms complexity big o

3.8 Hexagonal Grids   algorithms datastructures examples hexagonal grids

3.9 Pytudes - Python programs to practice or demonstrate skills.   norvig python etudes algorithms datastructures problem solving

3.10 mandliya/algorithmsanddatastructures :algorithms:datastructures:c:++:

3.11 Are statecharts the next big UI paradigm?   algorithms visualization state machines state charts

3.12 Welcome to the (unfinished) world of Statecharts   algorithms visualization state machines state charts

3.13 Functional, Stateless JS Finite State Machines and Statecharts   algorithms state machines state charts

3.15 Reading bits in far too many ways (part 1)   algorithms encoding decoding bits and bytes 2018

3.16 Reading bits in far too many ways (part 2)   algorithms encoding decoding bits and bytes 2018

3.17 Bit Twiddling Hacks   algorithms encoding decoding bit twiddling 2005

3.18 Dynamic Programming – 7 Steps to Solve any DP Interview Problem   algorithms dynamic programming recurrence 2018

3.18.1 Refdash Demystifying Interviews - Dynamic Programming   video algorithms dynamic programming recurrence 2018

3.19 trekhleb/javacript-algorithms   algorithms datastructures javascript 2018

3.19.1 Hacker News Discussion #17134831   discussion algorithms datastructures javascript 2018

The documentation and code quality is all good.

The implementation choices leave some things to be desired. The Queue and Stack implementations are Linked Lists instead of array backed, the hash table is closed instead of (the only barely more complicated) open Robin hood hash table scheme, the union-find/disjoint-set implementation doesn't have path compression or rank unions.

Overall very good, but it could be Great (tm) with just a little bit of work.

> I thought array-based queues resulted in O(n) queue/dequeue.

Not necessarily. A circular buffer[1] can be used as a queue with O(1) queue/dequeue. C++ implementations (gcc?), IIRC, uses an interesting array-of-arrays approach; it also has O(1) queue/dequeue. I'm not sure why the array-of-arrays approach is better than a circular buffer, though.

Array based designs can result is less allocations, and maybe less overhead. For example, if you have a circular buffer with space for 16 items, it only needs to allocate space if you need more room, whereas a linked list queue would allocate for each and every item placed into it. Linked lists also require space for the pointer to the next link, for each link in the list. (And, if you keep them, back pointers, though these aren't necessary for just a queue.) Arrays might have some unused slack space, however.

[1]: https://en.wikipedia.org/wiki/Circular_buffer

Resizing a fully contiguous circle buffer would cause a copy every element as well forcing you to make a single contiguous memory section. Array of arrays just needs to resize the top level array.

But the copy only has to move n items, but was constructed with m items, where n < m (and usually n << m). Where n is the max size of the queue and m is the total number of items that will ever be enqueued.

On the other hand, an array of arrays (no recursion) doesn’t change the big-O complexity cost, just the constant multiplier. That should definitely improve performance of the uncommon operation (the copy), but hypothetically might slow down the actual queuing operations (and drastically reduce throughout)

But maybe you meant the array of arrays to be recursive? That seems like it would alter the big-O (from n+m to log(n)+m). But typically m>>n, so the net result is the same.

3.20 High-Performance Matrix Multiplication   algorithms matrix multiplication 2018

4 Artificial Life

4.1 Build a working game of Tetris in Conway's Game of Life   artificial life computer tetris in game of life

The underlying idea of this project is abstraction. Rather than develop a Tetris game in Life directly, we slowly ratcheted up the abstraction in a series of steps. At each layer, we get further away from the difficulties of Life and closer to the construction of a computer that is as easy to program as any other.

From here we developed an architecture for our processor. We spent significant effort on designing an architecture that was both as non-esoteric and as easily-implementable as possible. Whereas the Wireworld computer used a rudimentary transport-triggered architecture, this project uses a much more flexible RISC architecture complete with multiple opcodes and addressing modes. We created an assembly language, known as QFTASM (Quest for Tetris Assembly), which guided the construction of our processor.

4.2 Conwayz—"A new rendition of Conway's vital cellular automaton."   artificial life game of ife web explorer

4.3 Conway Life: A community for Conway's Game of Life and reluated cellular automata   artificial life forum

4.3.1 Elementary Knightship   artificial life game of life discovery 2018

Elementary
Cannot be broken down into smaller pieces
Knightship
Glider that moves 2 horizontal and 1 vertical unit in its lifecycle
x = 31, y = 79, rule = B3/S23
4b2o$4bo2bo$4bo3bo$6b3o$2b2o6b4o$2bob2o4b4o$bo4bo6b3o$2b4o4b2o3bo$o9b
2o$bo3bo$6b3o2b2o2bo$2b2o7bo4bo$13bob2o$10b2o6bo$11b2ob3obo$10b2o3bo2b
o$10bobo2b2o$10bo2bobobo$10b3o6bo$11bobobo3bo$14b2obobo$11bo6b3o2$11bo
9bo$11bo3bo6bo$12bo5b5o$12b3o$16b2o$13b3o2bo$11bob3obo$10bo3bo2bo$11bo
4b2ob3o$13b4obo4b2o$13bob4o4b2o$19bo$20bo2b2o$20b2o$21b5o$25b2o$19b3o
6bo$20bobo3bobo$19bo3bo3bo$19bo3b2o$18bo6bob3o$19b2o3bo3b2o$20b4o2bo2b
o$22b2o3bo$21bo$21b2obo$20bo$19b5o$19bo4bo$18b3ob3o$18bob5o$18bo$20bo$
16bo4b4o$20b4ob2o$17b3o4bo$24bobo$28bo$24bo2b2o$25b3o$22b2o$21b3o5bo$
24b2o2bobo$21bo2b3obobo$22b2obo2bo$24bobo2b2o$26b2o$22b3o4bo$22b3o4bo$
23b2o3b3o$24b2ob2o$25b2o$25bo2$24b2o$26bo!
  1. Hackernews Discussion #16546152   2018

5 Build Systems

5.1 Recursive Make Considered Harmful   build systems paper make 2002

5.2 GNU Make: Rules of Makefiles   build systems make 2002

5.3 A Tutorial on Portable Makefiles   build systems portable make 2017

5.4 Build System Rules and Algorithms   paper shal build systems 2009

5.5 tup   build systems tup shal reverse dag

In a typical build system, the dependency arrows go down. Although this is the way they would naturally go due to gravity, it is unfortunately also where the enemy's gate is. This makes it very inefficient and unfriendly. In tup, the arrows go up. This is obviously true because it rhymes. See how the dependencies differ in make and tup:

            Make                     Tup
            ----                     ---
        hello-world              hello-world
       V           V            ^           ^
     foo.o       bar.o        foo.o        bar.o
    V     V     V     V      ^     ^      ^     ^
   foo.c foo.h bar.c bar.h  foo.c foo.h  bar.h bar.c

See the difference? The arrows go up. This makes it very fast. In fact, in at least one case, tup is optimal. See the Build System Rules and Algorithms (PDF) paper for more detailed information.

5.6 Some nice and accurate CMake tips   build systems cmake 2018

6 Compilers

6.1 GCC

6.1.1 StackOverflow: "-ftrapv" and "-fwrapv": Which is better for efficiency?   compilers gcc 2016

hvd answers:

The whole point of both of these options is to give the optimiser less leeway than it normally has. Therefore, unless you encounter a bug in the optimiser, the fastest should be to use neither, where the optimiser assumes your code doesn't have any overflows and doesn't emit code to handle overflows.

> What what does it mean when the -ftrapv definition says it generates "traps?" Does this mean exceptions?

It doesn't mean a C++ exception. It's target-dependent, but assuming x86, it means the GCC runtime libraries cause SIGABRT to be raised that will normally abort your program. On other platforms, it might use special CPU instructions that cause a hardware exception. It's mainly useful for debugging purposes and perhaps in a few cases for safety, where the risk of continuing after overflow is greater than the risk of the program suddenly terminating.

7 Cryptography

7.1 Advanced Introduction to GnuPG   cryptography tutorial gnupg

7.2 GCHQ CyberChef   cryptography tools

Forked on my own github merlincorey/CyberChef.

7.3 Cryptopals   cryptography ctf

8 Crypto currencies

8.1 Mining Bitcoin with pencil and paper: 0.67 hashes per day   cryptography currency bitcoin 2014

8.3 List Of High Profile Cryptocurrency Hacks So Far   cryptography currency crime and theft 2017

8.4 Can you really hack Ethereum smart contracts?   cryptography currency ethereum hate 2017

8.5 Roll your Own Bitcoin Exchange in Haskell   cryptography currency exchange haskell

8.6 Why Everyone Missed the Most Important Invention in the Last 500 Years   cryptography accounting triple entry bookkeeping

8.6.1 Yuji Ijiri's obituary at CMU   obituary  2017

Former Carnegie Mellon University professor Yuji Ijiri, founder of the transitional momentum accounting practice, also known as triple-entry accounting, died on Jan. 18. He was 81.

Born Feb. 24, 1935, educated and employed as an accountant in his native Japan, Ijiri later adopted the Graduate School of Industrial Administration (GSIA), now the Tepper School of Business, and Carnegie Mellon University as his workplace and home for the final half-century of his life. He earned a Ph.D. in industrial administration at Carnegie Mellon in 1963 and, after four years at the Stanford Graduate School of Business, joined the faculty of GSIA. He remained a central Carnegie Mellon figure from 1967 until his death.

Until his retirement in 2011, Ijiri was the R.M. Trueblood University Professor of Accounting and Economics, emeritus. During his time in this position he collaborated and taught alongside such notables as Nobel laureate Herb Simon, former university president Richard Cyert, global operations and accounting visionary Bill Cooper, Ijiri’s thesis adviser James March, political scientist and co-author of the Behavioral Theory of the Firm, and global economics expert and Federal Reserve historian Allan Meltzer.

“Yuji played an instrumental role in the history of the Tepper School and is considered one of the intellectual giants of his era,” said Robert Dammon, dean of the Tepper School and professor of financial economics, who remembers his own 1984 arrival at the school, meeting the luminaries such as Simon and Ijiri. “Throughout his career, Yuji was an intellectual leader who had tremendous impact on the field of accounting, his colleagues, and the legions of Ph.D. students he worked with over the years. His influence and contributions have left an enduring legacy of research productivity and impact that sets one of the highest standards for academic achievement.”

Ijiri was named to the Accounting Hall of Fame in 1989, an honor afforded just 94 people through its 67-year history at Ohio State University. He authored 200 published papers and 25 books, some translated into Spanish, French and Japanese, but none more important to him than his 1989 work about triple-entry accounting. He was among the founding members of the Journal of Accounting and Public Policy in the early 1980s, as well as the only four-time winner of the American Accounting Association (AAA) Notable Contributions to Accounting Lecturer Award: 1966, 1967, 1971 and 1976. Ijiri served the AAA as vice president in the mid-1970s and president in the 1980s.

Ijiri, by his own description a “constant gardener” in education, once said, “Carnegie Mellon has indeed been ‘small gardens’ of learning blessed with exceptional teachers and students. Yet there seems to be something more. The gardens seem to have a special way of letting people grow.”

Ijiri was 6 years old when he attended the Abacus Math School in Kobe, Japan, and by the 10th grade was doing the bookkeeping for his father’s bakery. In 1952, before even graduating from the Nara High School of Commerce, he passed a test that allowed him to take the CPA examination without a college degree. He passed the CPA exam in 1953, while attending Doshisha Junior College at night. He finished three years at Ritsumeikan University, also in Kyoto, with a bachelor’s of law degree. Thus, he had completed all requirements for a CPA certificate at age 21, the youngest on record in Japan.

He worked at a small accounting firm and then with Price Waterhouse & Co. before leaving in 1959 to attend graduate school at the University of Minnesota, where he received a master’s degree in 1960. From there, he attended Carnegie Mellon, where he remained except for four years at Stanford.

Ijiri also was recognized internationally in accounting for aggregation theory, firm size distributions, accounting measurement theory, computer languages, and quantitative models in business and economics. Fair value accounting in the early 2000s brought his concepts to the forefront again, and among his final papers were works exploring connections between triple-entry accounting and quantum physics and quantum computing. At Carnegie Mellon, his service included academic councils, dean policy advisory and more. He was awarded the Weil Prize for faculty research in 2009-10. Established in 1990, the Yuji Ijiri Award for Excellence in Accounting is awarded to an MBA student during the school’s diploma ceremony each year.

Surviving are his wife of 54 years, Tomoko, of Oberlin, Ohio; and two daughters, Yumi (Oberlin, Ohio) and Lisa (Boston, Massachusetts).

8.9 Write your next Ethereum Contract in Pyramid Scheme   cryptography currency 2017

8.10 DSLs for Ethereum Contracts   cryptography currency 2018

8.11 EtherFiddle   cryptography currency ethereum solidity ide

8.12 RED: a full-stack, open-source toolchain for simple smart contracts and decentralized apps development   paper cryptography currency smart contracts language 2018

8.13 AxLang: Formally Verifiable Smart Contracts for the Ethereum Ecosystem   cryptography currency smart contracts language 2018

8.14 Ethereum Smart Contract Best Practices: Static Analysis   cryptography currency ethereum smart contracts 2018

8.15 How to Secure Your Smart Contracts: 6 Solidity Vulnerabilities and how to avoid them (Part 1)   cryptography currency ethereum smart contracts 2018

8.15.1 How to Secure Your Smart Contracts: 6 Solidity Vulnerabilities and how to avoid them (Part 2)   cryptography currency ethereum smart contracts 2018

8.16 Inside an Ethereum transaction   cryptography currency ethereum 2017

8.17 The ultimate guide to audit a Smart Contract + Most dangerous attacks   cryptography currency smart contracts 2017

8.18 Writing upgradable contracts in Solidity   cryptography currency smart contracts 2018

9 Datastructures, Databases, and Filesystems

9.1 Multi-Dimensional Analog Literals   datastructures analog literals 2006

9.2 Datastructures for Coding Interviews   datastructures python interviews

9.3 The Lost Art of C Structure Packing   datastructures c packing esr 2014

9.4 Let's Build a Simple Database   datastructures databases c language sql sqlite

Writing a sqlite clone from scratch in C

9.5 We need tool support for keyset pagination   datastructures databases sql pitfall pagination offset

9.6 ZFS from a MySQL perspective   datastructures databases filesystems mysql zfs 2017

9.7 Demystifying Floating Point Precision   datastructures floating point numbers 2017

9.8 Design Patterns in Dynamic Programming   datastructures design patterns norvig 1996

9.9 Clojure Design Patterns   datastructures design patterns 2017

9.10 6.851 MIT Open Courseware - Advanced Datastructures   mit open courseware advanced datastructures 2012

9.11 Cache Oblivious Datastructures   datastructures cache obliious 2017

9.12 SQL Pivot — Rows to Columns   databases sql pivot

9.13 Parsing JSON is a Minefield   datastructure parsing json 2016 2018

9.14 The memory models that underlie programming languages   datastructures programming languages memory models 2016

9.15 A new fast hash table in response to Google’s new fast hash table   datastructures hash table 2018

9.15.1 skarupke/flathashmap   datastructures hash table 2018

9.16 Architecture of a Database System   paper databases architecture 2007

9.17 Functional Data Structures   book datastructures functional

9.18 Alembic

9.18.1 A Practical Guide to using Alembic   database migrations sqlalchemy alembic

9.18.2 Schema Migrations with Alembic, Python, and PostgreSQL   databse migrations sqlalchemy alembic postgres

9.19 postgres

9.19.1 The State of VACUUM   database postgres vacuum 2018

10 Development Environments and Editors

10.1 A Brief Glance at How Various Text Editors Manage Their Textual Data   editors data structures text representation 2015

10.2 ZSH, tmux, Emacs and SSH: A copy-paste story   environments editors copy paste compatibility

10.3 Emacs

10.3.1 Emacs Wiki   emacs xemacs emacs lisp wiki

10.3.2 OrgMode Manual   emacs orgmode manual

10.3.3 How to use Emacs Org as a Basic Day Planner   emacs orgmode day planner 2007

10.3.4 Using org-mode as a Day Planner   emacs orgmode org day planner 2007

10.3.5 David O'Toole Org tutorial   emacs orgmode tutorial todo agenda

10.3.6 Writing Non-Beamer presentations in org-mode   emacs orgmode presentations slides

10.3.7 Portacle - Portable Common Lisp IDE   emacs slime sbcl common lisp

10.3.8 helm - Emacs incremental completion and selection narrowing framework   emacs package incremental completion search

10.3.9 projectile - Project Interaction Library for Emacs   emacs package project management

10.3.10 notmuch for emacs   emacs package notmuch integration

Searchable and scriptable email in shell and emacs, yes please.

10.3.11 Emacs configuration for C++/CMake/git   emacs configuration c language integrated development environment explained

10.3.12 A CEO's Guide to Emacs   emacs configuration exposition 2015

10.3.14 Literate Devops   emacs orgmode devops

  1. YouTube: Literate Devops   emacs orgmode devops youtube video

10.3.15 eshell as a main shell   emacs eshell 2017

10.3.16 Emacs for Writers   emacs video writers 2015

  1. Hackernews Discussion #17048907   2018
  2. incandescentman/Emacs-Settings   emacs configuration

10.3.17 melling/EditorNotes: Emacs   emacs writers

10.3.18 Emacs 26 Brings Generators and Threads   emacs threads 2018

10.3.20 C/C++ Development Environment for Emacs   emacs c cplusplus 2015

10.3.21 Packages

  1. pashky/restclient   emacs package rest 2016 2018
  2. ReadTheDocs: projectile   emacs package
    1. Open a terminal with projectile in emacs   emacs package 2017
      ;; Enable Projectile globally
      (projectile-global-mode)
      
      (defun projectile-term ()
        "Create an ansi-term at the project root"
        (interactive)
        (let ((root (projectile-project-root))
        (buff-name (concat " [term] " (projectile-project-root))))
          (if (get-buffer buff-name)
            (switch-to-buffer-other-window buff-name)
            (progn
            (split-window-sensibly (selected-window))
            (other-window 1)
            (setq default-directory root)
            (ansi-term (getenv "SHELL"))
            (rename-buffer buff-name t)))))
      
      (global-set-key (kbd "C-x M-t") 'projectile-term)
      

10.3.22 Kanban

  1. Emacs, org-mode, Kanban, Pomodoro… Oh my…   emacs orgmode kanban 2011
  2. El Kanban Org: parse org-mode todo-states to use org-tables as Kanban tables   emacs orgmode kanban 2012
  3. Kanban in Emacs Org-Mode to Get More Work Done   emacs orgmode kanban 2016
  4. Kanban workflow with Emacs, and org-mode   emacs orgmode kanban 2017
  5. Github: hagmonk/org-kanban   emacs orgmode kanban 2017 2018
  6. Github: gizmomogwai/org-kanban   emacs orgmode kanban 2016 2018

11 Emulators and Game Consoles

11.1 codeslinger Emulation Basics   emulator 2008

11.1.1 Study of the techniques for emulation programming   paper emulation 2001

11.1.2 codeslinger chip8 emulator   emulator chip8 2008

11.2 Emulator 101   emulator arcade tutorial 2016

11.3 GBATek - Gameboy Advance / Nintendo DS / DSi - Technical Info   nintendo gameboy nintendo dsi documentation

11.4 Nintendo Entertainment System

11.4.1 blanham/ChickeNES   nintendo entertainment system emulator c 2013 2015

11.4.2 I made an NES emulator. Here’s what I learned about the original Nintendo.   nintendo entertainment system emulator 2015

  1. fogleman/nes   nintendo entertainment system emulator golang 2015 2018

11.4.3 Writing your own NES emulator - overview   nintendo entertainment system emulator cpp 2018

  1. yizhang82/neschan   nitendo entertainment system emulator cpp 2018

11.4.4 How to Program an NES game in C   programming nintendo entertainment system 2017

11.4.6 NES Development Day 1: Creating a ROM   nintendo entertainment system rom programming 2018

11.4.7 NES Dev Wiki   nintendo entertainment system dev wiki

11.5 Nintendo Gameboy

11.5.1 Game Boy CPU Manual   nintendo gameboy manual

11.5.2 Gameboy Dev Wiki   nintendo gameboy wiki

  1. Gameboy Dev Wiki: Gameboy sound hardware   nintendo gameboy sound

11.5.3 PANDOCS: Everything You Always Wanted to Know about GAMEBOY   nintendo gameboy documentation 2001

11.5.4 Blargg's Gameboy Tests   nintendo gameboy test suite 2013

11.5.5 djhworld/gomeboycolor   nintendo gameboy emulator golang 2013

11.5.6 The Ultimate Game Boy Talk (33c3)   video nintendo gameboy 2016

11.5.7 Why did I spend 1.5 months creating a Gameboy emulator?   nintendo gameboy emulator java 2017

  1. trekawek/coffee-gb   nintendo gameboy emulator java 2017

12 Free Books (TODO: REMOVE)

Books can be categorized by tags to generate a general Books section/page.

12.1 Software Foundations Series (books)   books logic math computer science proofs coq

12.2 Certified Programming with Dependent Types   book logic types proofs coq 2017

13 Great Talks

13.1 Brian Kernighan - How to succeed at language design without really trying   talk kernighan language design awk

Mentions Alan Perlis' Epigrams in Programming

13.2 Gerald Sussman - We Don't Really Know how to Compute   talk sussman computation

13.3 William Byrd - The Most Beautiful Program Ever Written   talk byrd interpreters provers solvers minikanren

The first half is an overview of Scheme and writing an interpreter in scheme. The second half goes into using an advanced interpreter along with logic programming in minikanren to find programs that match test constraints.

13.7 Rich Hickey

Creator of Clojure known for many great talks.

13.7.1 Are we there yet?   talk hickey clojure design

13.7.2 Hammock Driven Development   talk hickey design

13.7.3 Simple Made Easy   talk hickey complexity

13.7.4 The Value of Values   talk hickey

13.7.5 The Language of the System   talk hickey distrubuted language design

13.7.6 Design, Composition, and Performance   talk hickey

13.7.7 Effective Programs - 10 Years of Clojure - Rich Hickey   talk hickey effectiveness 2017

13.8 Pycon

14 Frontend Web Design

14.1 CSS Flexbox Froggy   css flexbox tutorial game

14.2 CSS Grid Garden   css grid tutorial game

14.3 7 Practical Tips for Cheating at Design   ui design tips

14.3.1 Use color and weight to create hierarchy instead of size

  • Try using color or font weight to do the same job to differentiate importantness
  • Stay away from font weights under 400 for UI work

14.3.2 Don't use grey text on colored backgrounds

  1. Reduce the opacity of white text
  2. Hand-pick a color that's base don the background color

14.3.3 Offset your shadows

14.3.4 Use fewer borders

  1. Use a box shadow
  2. Use two different background colors
  3. Add extra spacing

14.3.5 Don't blow up icons that are meant to be small

14.3.6 Use accent borders to add color to a bland design

14.3.7 Not every button needs a background color

14.4 Resilient CSS: How to Write CSS That Works in Every Browser, Even the Old Ones   2018

14.4.1 Hacker News discussion #16546725

  1. CSS and HTML are extremely resilient, they ignore your typos and unsupported features gracefully and never crash, so just daring to use them in your code, no need for exception handling comparing to JS, in that sense, if you can do it in CSS, avoid JS.
  2. Leverage CSS override
  3. Use browser devtools to test all browsers. No need install all older browser to check CSS. icanuse helps greatly too.
  4. Use feature-queries for CSS.

These indeed can make your CSS code work for both the stone age and hottest browsers, all at the same time, without much hacking. Great videos.

14.4.2 Introduction to Resilient CSS – 1/7   video 9 minutes 2018

14.4.3 The Secrets of ‘Can I Use’ – 2/7 Resilient CSS   video 10 minutes 2018

14.4.4 How Browsers Handle Errors in CSS – 3/7 Resilient CSS   video 7 minutes 2018

14.4.8 Making Your CSS Fail Excellently – 7/7 Resilient CSS   video 5 minutes 2018

14.5 EnderJS - The no library library   javascript browser 2018

14.6 Tachyons - Responsive CSS framework   css framework

14.7 BEM - Block Element Modifier   css methodology

15 Functional Programming

15.1 Metacircular Adventures in Functional Abstraction   functional programming common lisp clojure

15.2 Clojure from the ground up   functional programming clojure

15.3 Reducers, transducers, and core.async in clojure   functional programming clojure

15.4 Functors, Applicatives, And Monads In Pictures   functional programming functors monads visualizations

15.5 The Haskell Pyramid   functional programming haskell

15.6 Professor Frisby's Mostly Adequate Guide to Functional Programming   book functional programming javascript

16 Game Development

16.1 Books I had to read to develop a game engine   game development game engine 2018

16.2 Sin & Cos: The Programmer's Pals!   game development mathematics trigonometry

16.2.1 Conclusion

In this article I set out to answer some of the most common questions on sine and cosine, or trigonometry in general. I could give you a more mathematical explanation of sine and cosine, but I wanted this article to be of practical use to game programmers, especially to Allegro game programmers, not to give an encyclopedic description of abstract mathematics. I hope that this has been of some use to you, my dear reader. Please send me an e-mail if you have something to say about this article, whether you like it, dislike it, find it useful, or just want to say hi. If you have any questions you can ask them on the forums at http://www.allegro.cc/. It is very likely that I'll see it there. And if you ever write an effect in a demo or game using the explanations in this article, I would very much like to see the result.

Amarillion E-mail: amarillion@yahoo.com Home page: http://www.helixsoft.nl/

16.3 Confessions of an Unreal Engine 4 Engineering Firefighter   game development unreal engine fire fighting 2018

17 Game Theory

17.1 Ward Farnsworth's Predator at the Chessboard   gametheory book chess

17.2 mindsports.nl   gametheory gamedesign puzzles

18 Graphics

18.1 Lou's Psuedo 3d Page   graphics 3d rendering

18.2 3D Rendering without shaders   graphics 3d rendering shaders

Hackernews discussion with some interesting discourse and links such as The Barycentric Conspiracy.

18.3 I Am Graphics And So Can You   graphics 3d rendering vulkan

18.4 Íñigo Quílez' Demo and Shader Graphics Articles   graphics demo scene shaders

19 Hardware

19.1 The Amazing $1 Microcontroller

Exploration of 21 different microcontrollers each costing less than $1 to help familiarize oneself with all the major ecosystems out there.

While some projects that come across my desk are complex enough to require a hundreds-of-MHz microcontroller with all the bells and whistles, it’s amazing how many projects work great using nothing more than a $1 chip — so this is the only rule I established for the shoot-out. 1

I wanted to explore the $1 pricing zone specifically because it’s the least amount of money you can spend on an MCU that’s still general-purpose enough to be widely useful in a diverse array of projects.

Any cheaper, and you end up with 6- or 8-pin parts with only a few dozen bytes of RAM, no ADC, nor any peripherals other than a single timer and some GPIO.

Any more expensive, and the field completely opens up to an overwhelming number of parts — all with heavily-specialized peripherals and connectivity options.

These MCUs were selected to represent their entire families — or sub-families, depending on the architecture — and in my analysis, I’ll offer some information about the family as a whole.

If you want to scroll down and find out who the winner is, don’t bother — there’s really no sense in trying to declare the “king of $1 MCUs” as everyone knows the best microcontroller is the one that best matches your application needs. I mean, everyone knows the best microcontroller is the one you already know how to use. No, wait — the best microcontroller is definitely the one that is easiest to prototype with. Or maybe that has the lowest impact on BOM pricing?

I can’t even decide on the criteria for the best microcontroller — let alone crown a winner.

What I will do, however, is offer a ton of different recommendations for different users at the end. Read on!

19.3 Disambiguating the first computer   hardware history

20 Home Automation and Internet of Things

20.1 Bruh Automation   home automation tutorials reviews

Lots of resources including their github for various home automation things.

21 Locksmithery and Lockpickery

21.1 A FAILURE OF IMAGINATION: Kwikset Smartkey® and Insecurity Engineering   physical security lockpicking kwikset smart key

22 Machine Learning

22.1 The Neural Network Zoo   machine learning neural networks

22.2 Machine Learning 101   machine learning slides 2017

22.3 Google Machine Learning: Crash Course   machine learning crash course

22.4 glouw/tinn   machine learning neural network library

The tiny neural network library

22.5 Few Machine Learning Problems (with Python implementations)   machine learning neural networks 2018

23 Mazes

23.1 Maze Generation Algorithm Recap   maze algorithms

Nice recap of maze generation algorithms from a minecraft modder. Check out his minecraft maze generator.

24 Networking

24.2 Beej's Guide to Network Programming   networking programming c unix sockets beejs guide

Famous and extensive introductory text to programming with unix sockets. Only really touches on simple synchronous socket servers for the most part.

TODO - recategorize as their own links See also:

24.3 Modern IRC Client Protocol   networking protocol living documentation irc

24.4 VPN in a Nutshell   networking linux vpn per application

24.5 Network latencies and the speed of light   networking physics 2018

24.6 The case of the 500 mile long email   networking physics statistics

24.7 16 Tips to Better Network Diagrams   networking diagrams

24.9 Minion - Wire Protocol   paper networking protocols minion 2013

24.10 TCP Hollywood   networking protocols 2016

24.11 Linux Raw Sockets   networking raw sockets linux 2018

24.12 Start your own (wireless) ISP   networking wisp 2018

24.13 The headers we don't want   networking http headers 2018

24.13.1 Hacker News Discussion #17074721   2018

  1. Importance of Via

    Via is not safe to remove and Fastly know this as well as Akamai, Cloudflare and others.

    A very cheap attack is to chain CDNs into a nice circle. This is what Via protects against: https://blog.cloudflare.com/preventing-malicious-request-loops/

    Just because a browser doesn't use a header does not make the header superfluous.

  2. Expires tricks

    #+BEGINQUOTE

    cache-control doesn't completely replace Expires for some use cases.

    If you have a scheduled task that generates data every hour, you can set Expires accordingly so all clients will refresh the data as soon as the hour rolls over.

    You can do this using max-age but then you have to dynamically calculate this header per request which means you can't do things like upload your data to s3 and set the cache-control header on it.

    With expires, I can upload a file to s3 and set

    Expires: … 17:00

    and then not have to touch it again for an hour.

    you can work around this client side with per hour filenames or the other usual cache busting tricks, but that's annoying. #+ENDQUO

24.14 The Two-Napkin Protocol   networking bgp history 1989 2018

24.15 HTTP Made Really Easy   networking http 2012

24.16 Playing battleships over BGP   networking bgp games 2018

24.16.1 benjoho/bgp-battleships   github networking bgp games 2018

24.16.2 /r/networking/Playing Battleship over BGP   discussion networking bgp games 2018

24.17 Broadcom vs Mellanox based platforms: 100 Gbps networking   networking performance 2018

24.19 Oldest domains in the .com, .net, and .org TLDs   networking history dns 2018

24.20 Software-Defined Radio for Engineers, 2018   book networking sdr 2018

25 Object Oriented Programming and Design

25.1 Wizards and Warriors: Part One   object oriented design

25.1.1 Wizards and Warriors: Part Two   object oriented design

25.1.2 Wizards and Warriors: Part Three   object oriented design

25.1.3 Wizards and Warriors: Part Four   object oriented design

25.1.4 Wizards and Warriors: Part Five   object oriented design

26 Operating Systems

26.1 Think OS: A Brief Introduction to Operating Systems   operating systems 2015

27 Papers

27.1 As We May Think   paper 1945

Some musings on hypertext and what we might build after the conclusion of World War II.

27.2 A Mathematical Theory of Communication   paper networking 1948

Defines the term "bit" for Binary digIT.

27.3 Computing Machinery and Intelligence   paper turing artificial intelligence 1950

27.4 Error Detecting and Error Correcting Codes   paper hamming 1950

27.6 How do Committees Invent   paper design organization 1968

Apparently this some of the inspiration for Mythical Man Month.

27.7 New Directions in Cryptography   paper cryptography diffie hellman 1976

27.9 Reflections on Trusting Trust   paper security trust unix 1984

27.10 The Limits of Corrrectness   paper 1985

27.11 Communicating Sequential Processes   paper concurrent 1985

27.12 The Rendering Equation   paper graphics rendering pipeline 1986

27.13 StateCharts: A Visual Formalism for Complex Systems   paper state machine 1987

27.13.1 Are statecharts the next big UI paradigm?   blog post statemachine 2017

27.14 A Sample of Brilliance   paper randomness sampling 1987

27.15 On Visual Formalisms   paper state machine 1988

27.16 A Cookbook for an Emacs   paper emacs 1991

27.17 CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.   paper lisp scheme tail recursion c 1994

27.18 State in Haskell   paper haskell state 1995

27.19 Purely Functional Data Structures   paper functional programming data structures 1996

27.20 Constructive Logic   paper logic 2000

27.21 Making Reliable Distributed Systems in the Presence of Software Errors   paper distributed systems 2003

27.22 Out of the Tarpit   paper design complexity 2006

27.23 Dynamo: Amazon’s Highly Available Key-value Store   paper distrubted database dynamodb 2007

27.24 Bitcoin: A Peer-to-Peer Electronic Cash System   paper cryptography currency bitcoin 2008

27.26 In Search of an Understandable Consensus Algorithm   paper distributed consenus 2014

28 Physics

28.1 So You Want to Learn Physics…   physics susan flower 2016

28.2 Physics Travel Guides   physics study tool

28.3 Physics Course Notes with Simulations   physics course javascript simulations 2018

28.4 Math and Physics Simulations   physics java script simulations

28.5 PhET: Interactive (Physics) Simulations   physics simulations

29 Programming Languages

29.2 Assembly

29.2.2 ICTeam28/PiFox   assembly arm raspberry pi 2014

29.2.3 Compiling Python syntax to x86-64 assembly for fun and (zero) profit   assembly x86 python static 2017

29.2.4 JIT compiling a subset of Python to x86-64   assembly x86 python jit 2017

29.3 C

29.3.1 Tearing apart printf()   c language low level 2018

29.3.2 Minimalist C Libraries   c language libraries 2018

29.3.3 iso-9899 wiki: Alignment   wiki c language 2017

29.3.4 Massacring C Pointers   c language  2018

  1. Code Listing from Massacring C Pointers   c language 2018

29.3.5 Libraries

  1. mitv/acutest   c language test framework 2017
  2. GLFW   c language opengl framework 2017

29.4 C++

29.4.1 C++ FQA   language cpp98 fqa

A bit dated now, especially with regards to consistency between implementations and support for modern features. However, many of the general concerns still ring true today.

29.4.2 C++ Truths   blog language cpp 2017

A blog exploring C++ features and best practices with articles posted between 2005 and 2017.

  1. I love C++ Programming   blog language cpp 2005
  2. Fun with Lambdas: C++14 Style (part 1)   blog language cpp 2014
  3. Fun with Lambdas: C++14 Style (part 2)   blog language cpp 2014
  4. Fun with Lambdas: C++14 Style (part 3)   blog language cpp 2014
  5. Fun with Lambdas: C++14 Style (part 4)   blog language cpp 2015

29.4.3 lefticus/cppbestpractices   language cpp best practices 2015 2018

  1. GitBook: C++ Best Practices   book language cpp best practices 2018

29.4.4 rigtorp/awesome-modern-cpp   language cpp awesome list 2016

29.4.5 Microsoft: Welcome back to C++ - Modern C++   language cpp11 cpp14 2016

29.4.6 Google C++ Style Guide   language cpp style guide

29.4.7 isocpp/CppCoreGuidelines   language cpp11 cpp14 cpp17 guidelines 2018

C++ core guidelines maintained by Dr. Bjarne Stroustrup.

  1. ISO CPP: C++ Core Guidelines   language cpp11 cpp14 cpp17 guidelines 2018

29.4.8 Microsoft/GSL   language cpp11 cpp14 cpp17 2016 2018

The Microsoft reference Guideline SUpport Library.

29.4.9 ISO CPP: C++ FAQ Super FAQ   language cpp11 cpp14 faq

29.4.10 HackerNews Discussion #16535886: Ask HN: Best way to learn modern C++?   language cpp learning modern hacker news 2018

29.4.11 clang-format: Automated formatting for C and C++   language cpp clang formatter

(load "<path-to-clang>/tools/clang-format/clang-format.el")
(global-set-key [C-M-tab] 'clang-format-region)

29.4.12 conan - The C / C++ package manager for developers   language cpp library package manager

29.4.13 Parsing C++ is literally undecidable   language cpp compilers decideability 2013

29.4.14 Examples of Parallel Algorithms From C++17   language cpp cpp17 algorithms parallel 2018

29.4.15 Libraries

  1. Testing
    1. catchorg/Catch2   language cpp test framework 2018

      Modern test framework in a header (or few, with extensions).

  2. Command Line Argument Parsing
    1. kmurray/libargparse   language cpp argument parsing library 2017

      A C++11 command-line parsing single-header library inspired by Python's argparse.

    2. catchorg/Clara   language cpp argument parsing library 2018

      A simple to use, composable, command line parser for C++ 11 and beyond in a single-header library.

      int width = 0;
      std::string name;
      bool doIt = false;
      std::string command;
      auto cli
          = Opt( width, "width" )
              ["-w"]["--width"]
              ("How wide should it be?")
          | Opt( name, "name" )
              ["-n"]["--name"]
              ("By what name should I be known")
          | Opt( doIt )
              ["-d"]["--doit"]
              ("Do the thing" )
          | Arg( command, "command" )
              ("which command to run");
      
    3. meullan/clipp   language cpp argument parsing library 2018

      Easy to use, powerful and expressive command line argument handling for C++11/14/17 contained in a single header file.

      #include <iostream>
      #include "clipp.h"
      using namespace clipp; using std::cout; using std::string;
      
      int main(int argc, char* argv[]) {
          bool rec = false, utf16 = false;
          string infile = "", fmt = "csv";
      
          auto cli = (
              value("input file", infile),
              option("-r", "--recursive").set(rec).doc("convert files recursively"),
              option("-o") & value("output format", fmt),
              option("-utf16").set(utf16).doc("use UTF-16 encoding")
          );
      
          if(!parse(argc, argv, cli)) cout << make_man_page(cli, argv[0]);
          // ...
      }
      
  3. Terminal Colors
    1. agaunival/rang   language cpp terminal colors library 2018

      A Minimal, Header only Modern c++ library for colors in your terminal.

  4. Formatting
    1. fmtlib/fmt   language cpp string formatting 2018

      Pythonic and C-style stand-alone and efficient (compile and runtime). Implements P0645 Text Formatting C++ standards proposal.

  5. Functional
    1. beark/ftl   language cpp functional 2015

29.4.16 Videos

  1. CppCon 2015: Herb Sutter "Writing Good C++14… By Default"   video talk language cpp sutter 2015
  2. CppCon 2017: Bjarne Stroustrup “Learning and Teaching Modern C++”   video talk language cpp stroustrup 2017

29.5 Go

29.5.1 chaseadamsio/goorgeous   github golang emacs orgmode 2017 2018

29.6 Erlang

29.6.1 The Erlang Runtime System (a.k.a. The Beam Book   book erlang runtime

29.7 Javascript

29.7.1 mozilla/narcissus   javascript meta circular interpreter 2012

29.7.2 Professor Frisby introduces composable functional Javascript   video course javascript functional programming

29.7.3 isomorphic-git/isomorphic-git   javascript git implementation 2018

29.8 Lisp

29.8.1 (How to Write a (Lisp) Interpreter (in Python))   norvig implementing lisp in python 2010

29.8.2 Lisp In Less Than 200 Lines Of C   implementing lisp in c 2017

29.8.3 Faust Programming Language   dsp programming compiling to cpp 2016

29.8.6 What did Alan Kay mean by, "Lisp is the greatest single programming language ever designed"? Answer by Alan Kay   alan kay programming language design lisp 2017

Alan Kay, I am the Alan Kay in question. Updated 2017 October 29.

First, let me clear up a few misconceptions from the previous answers. One of them said “Try writing an operating system with Lisp”, as though this would be somehow harder. In fact, one of the nicest operating systems ever done was on “The Lisp Machines” (in Zeta-Lisp), the hardware and software following the lead of “The Parc Machines” and Smalltalk — and we in turn had been very influenced by the Lisp model of programming and implementation. (These operating systems in both Smalltalk and Lisp were both better (claim) and easier to write (simpler to demonstrate) than the standard ones of today.)

Another interesting answer assumed that “the test of time” is somehow a cosmic optimization. But as every biologist knows, Darwinian processes “find fits” to an environment, and if the environment is lacking, then the fits will be lacking. Similarly, if most computer people lack understanding and knowledge, then what they will select will also be lacking. There is abundant evidence today that this is just what has happened.

But neither of these has anything to do with my praise of Lisp (and I did explain what I meant in more detail in “The Early History of Smalltalk”).

To start with an analogy, let’s notice that a person who has learned calculus fluently can in many areas out-think the greatest geniuses in history. Scientists after Newton were qualitatively more able than before, etc. My slogan for this is “Point of view is worth 80 IQ points” (you can use “context” or “perspective” etc.). A poor one might subtract 80 IQ points! (See above). A new more powerful one makes some thinking possible that was too difficult before.

One of our many problems with thinking is “cognitive load”: the number of things we can pay attention to at once. The cliche is 7±2, but for many things it is even less. We make progress by making those few things be more powerful.

This is one of the reasons mathematicians like compact notation. The downside is the extra layers of abstraction and new cryptic things to learn — this is the practice part of violin playing — but once you can do this, what you can think about at once has been vastly magnified. There were 20 Maxwell’s Equations in their original form (in terms of partial differentials and cartesian coordinates). Today the four equations we can think about all at once are primarily due to their reformulation by Heaviside to emphasize what is really important about them (and what is likely to be problematic — e.g. the electric and magnetic fields should probably be symmetric with respect to movement, etc).

Modern science is about experiencing phenomena and devising models whose relationships with the phenomena can be “negotiated”. The “negotiation” is necessary because what’s inside our heads, and our representations systems etc have no necessary connection to “what’s out there?”.

Taking this point of view, we can see there can be a “bridge science” and “bridge scientists” because engineers build bridges and these furnish phenomena for scientists to make models of.

Similarly, there can be a “computer science” and “computer scientists” because engineers build hardware and software and these furnish phenomena for scientists to make models of. (In fact, this was a large part of what was meant by “computer science” in the early 60s — and it was an aspiration — still is — not an accomplished fact).

The story behind Lisp is fun (you can read John McCarthy’s account in the first History of Programming Languages). One of the motivations was that he wanted something like “Mathematical Physics” — he called it a “Mathematical Theory of Computation”. Another was that he needed a very general kind of language to make a user interface AI — called “The Advice Taker” — that he had thought up in the late 50s.

He could program — most programs were then in machine code, Fortran existed, and there was a language that had linked lists.

John made something that could do what any programming language could do (relatively easy), but did it in such a way so that it could express the essence of what it was about (this was the math part or the meta part or the modern Maxwell’s Equations part, however you might like to think of it). He partly did this — he says — to show that this way to do things was “neater than a Turing Machine”.

Another observation about this is that the “slope” from the simplest machine structures to the highest level language was the steepest ever — meaning that the journey from recognizable hardware to cosmic expression is a rocket jump!

As is often the case — especially in engineering — a great scientific model is often superior to what exists, and can lead to much better artifacts. This was certainly true here. Steve Russell (later famous for being the main inventor and programmer of “SpaceWar”) looked at what John had done, and said: “That’s a program. If I coded it up we’d have a running version”. As John remarked: “He did, and we did”!

The result was “unlimited programming in an eyeful” (the bottom half of page 13 in the Lisp 1.5 manual). The key was not so much “Lisp” but the kinds of thinking that this kind of representational approach allowed and opened up regarding all kinds of programming language schemes.

A fun thing about it this is that once you’ve grokked it, you can think right away of better programming languages than Lisp, and you can think right away of better ways to write the meta descriptions than John did. This is the “POV = 80 IQ points” part.

But this is like saying that once you’ve seen Newton, it becomes possible to do electrodynamics and relativity. The biggest feat in science was Newton’s!

This is why “Lisp is the greatest!”

29.8.7 Robust Clojure: The best way to handle nil   programming language lisp clojure nil null handling 2018

29.8.8 How to Design Programs 2   book programming language lisp scheme 2014

29.8.9 Teach Yourself Scheme in FIXNUM days   book programming language lisp scheme

29.9 Python

29.9.1 Automate the Boring Stuff with Python   book python programming automation

29.9.2 Explore Flask   python programming web site api

29.9.5 Programming in the Debugger   python jupyter 2018

29.9.6 Libraries

  1. npyscreen Documentation   python library terminal ui 2014
  2. prompt-toolkit Documentation   python library terminal ui 2014 2018

30 Reverse Engineering

30.1 Open Security Training YouTube Channel   videos binary reverse engineering

30.2 Colourful visualization tool for binary files   binary data visualization

30.3 Binary Ninja   reverse engineering platform

30.4 Trail of Bits: Binary Ninja   reverse engineering platform

30.5 radareorg/cutter   github reverse engineering platform

30.6 Reverse engineering Animal Crossing's developer mode   reverse engineering 2018

31 Revision Control

31.1 Git Book (v2)   git book

31.2 git ready   git tips tricks

31.3 GitAlias/gitalias/gitalias.txt   git alias aliases tricks

31.4 Understanding git filter-branch   git advanced branch tricks

31.5 A successful Git branching model   git workflow branch model

Original post from 2010. Also check out Van Driessen's git flow plugin.

31.6 Atlassian's comparing workflows and tutorials   git workflow branch model

31.7 HGFlow - Generalized Driessen's Branching Model   hg workflow branch model

31.8 Understanding the Github Flow   git github workflow branch model

31.9 tig   git porcelain curses

31.10 Magit   git porcelain emacs

31.10.1 Magit User Manual - Getting Started   git magit user manual

31.10.2 magit walk through   git magit walkthrough 2017

31.11 gittup   git linux distribution

31.12 ohshitgit   git oh shit pitfalls remedies

31.13 scottnonnenberg/.gitconfig with GPG signing and other goodies   git config 2018

[alias]
  prune = fetch --prune
  # Because I constantly forget how to do this
  # https://git-scm.com/docs/git-fetch#git-fetch--p

  undo = reset --soft HEAD^
  # Not quite as common as an amend, but still common
  # https://git-scm.com/docs/git-reset#git-reset-emgitresetemltmodegtltcommitgt

  stash-all = stash save --include-untracked
  # We wanna grab those pesky un-added files!
  # https://git-scm.com/docs/git-stash

  glog = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
  # No need for a GUI - a nice, colorful, graphical representation
  # https://git-scm.com/docs/git-log
  # via https://medium.com/@payload.dd/thanks-for-the-git-st-i-will-use-this-4da5839a21a4

[merge]
  ff = only
  # I pretty much never mean to do a real merge, since I use a rebase workflow.
  # Note: this global option applies to all merges, including those done during a git pull
  # https://git-scm.com/docs/git-config#git-config-mergeff

  conflictstyle = diff3
  # Standard diff is two sets of final changes. This introduces the original text before each side's changes.
  # https://git-scm.com/docs/git-config#git-config-mergeconflictStyle

[commit]
  gpgSign = true
  # "other people can trust that the changes you've made really were made by you"
  # https://help.github.com/articles/about-gpg/
  # https://git-scm.com/docs/git-config#git-config-commitgpgSign

[push]
  default = simple
  # "push the current branch back to the branch whose changes are usually integrated into the current branch"
  # "refuse to push if the upstream branch’s name is different from the local one"
  # https://git-scm.com/docs/git-config#git-config-pushdefault

  followTags = true
  # Because I get sick of telling git to do it manually
  # https://git-scm.com/docs/git-config#git-config-pushfollowTags

[status]
  showUntrackedFiles = all
  # Sometimes a newly-added folder, since it's only one line in git status, can slip under the radar.
  # https://git-scm.com/docs/git-config#git-config-statusshowUntrackedFiles

[transfer]
  fsckobjects = true
  # To combat repository corruption!
  # Note: this global option applies during receive and transmit
  # https://git-scm.com/docs/git-config#git-config-transferfsckObjects
  # via https://groups.google.com/forum/#!topic/binary-transparency/f-BI4o8HZW0


# A nice little github-like colorful, split diff right in the console.
# via http://owen.cymru/github-style-diff-in-terminal-with-icdiff/
[diff]
  tool = icdiff
[difftool]
  prompt = false
[difftool "icdiff"]
  cmd = /usr/local/bin/icdiff --line-numbers $LOCAL $REMOTE

31.14 Five Key Git Concepts Explained the Hard Way   2018

Author of the book Learn Git The Hard Way offers some git exercises.

31.14.1 References

HEAD
HEAD is a special reference that always points to where the git repository is.
tag
A tag is a reference that points to a specifi commit.
branch
A branch is like a tag, but will move when the HEAD moves.
remote reference
A remote reference is a reference to code that’s from another repository.

Type out these commands and explain what’s going on. Take your time:

mkdir lgthw_origin
cd lgthw_origin
git init
echo 1 > afile
git add afile
git commit -m firstcommit
git log --oneline --decorate --all --graph
git branch otherbranch
git tag firstcommittag
git log --oneline --decorate --all --graph
echo 2 >> afile
git commit -am secondcommit
git checkout otherbranch
git log --oneline --decorate --all --graph
echo 3 >> afile
git commit -am thirdcommit
git log --oneline --decorate --all --graph

31.14.2 Detached Head

git checkout firstcommit
# You are in 'detached HEAD' state.
git log --oneline --decorate --all --graph
git checkout -b firstcommitbranch
git log --oneline --decorate --all --graph

31.14.3 Remote Reference

cd ..
git clone lgthw_origin lgthw_cloned
cd lgthw_cloned
git remote -v
git log --oneline --decorate --all --graph
git branch -a
git checkout master
# Branch master set up to track remote branch master from origin. Switched to a new branch 'master'
cd ../lgthw_origin
git checkout master
echo origin_change >> afile
git commit -am 'Change on the origin'
cd ../lgthw_cloned
git fetch origin
git log --oneline --decorate --all --graph

31.14.4 Fast Forward

git merge origin/master
git log --oneline --decorate --all --graph

31.14.5 Rebase

cd ../lgthw_origin
git status
echo origin_change_rebase >> afile
git commit -am 'origin change rebase'
git log --oneline --decorate --all --graph
cd ../lgthw_cloned
echo cloned_change_rebase >> anewfile
git add anewfile
git commit -m 'cloned change rebase in anewfile'
git log --oneline --decorate --all --graph
git fetch origin
git log --oneline --decorate --all --graph
git rebase origin/master
git log --oneline --decorate --all --graph

31.15 esr/reposurgeon   revision control repository surgery 2018

31.16 The Biggest and Weirdest Commits in Linux Kernel Git History   revision control git linux 2017

31.17 Git Log: The Good Parts   revision control git log 2018

31.17.1 Hacker News Discussion #16677308   discussion revision control git log 2018

32 Shells and Terminals

32.1 Zsh Configuration From the Ground Up   zsh configuration tutorial 2013

32.2 Eschewing Zshell for Emacs Shell   zsh emacs eshell

32.3 Termux   android terminal emulator

32.4 anordal/shellharden: How to do things safely in bash   bash shell safety 2018

32.5 Shell Magic: Set Operations with uniq   shell scripting 2018

33 Software Engineering

33.1 Python API Checklist   python api programming checklist 2017

33.2 Python Packaging Pitfalls   python packaging 2014

33.3 Less known (python) packaging features and tricks   python packaging talk slides video 2015

33.4 Migrating to Python 3 with pleasure   python 3 migration features

33.5 Zeal is an offline documentation browser for software developers.   software engineering programming languages offline documentation reference

34 Systems Engineering

34.1 Logging user-data Script Output on EC2 Instances   systems cloudinit logging aws ec2

34.2 Linux Load Averages: Solving the Mystery   systems linux load average algorithm history

34.3 SSH Escape Sequences   systems linux ssh escape sequences 2011

~.
terminate connection (and any multiplexed sessions)
~B
send a BREAK to the remote system
~C
open a command line
~R
Request rekey (SSH protocol 2 only)
(no term)
~Z:: suspend ssh
~#
list forwarded connections
~&
background ssh (when waiting for connections to terminate)
~?
this message
~~
send the escape character by typing it twice

34.4 NginX   systems backwards proxy web mail

I have been using NginX since version 0.5.x and have been involved in the community here and there.

These are some great resources mostly from the docs I commonly share:

34.5 In defence of swap: common misconceptions   systems swap memory 2018

34.6 Terraform

34.6.1 Terraform Infrastructure Design Patterns   systems terraform 2015

34.6.2 Self-invented “how to Terraform” rules   systems terraform 2017

35 Uncategorized Otherwise

35.1 Advanced SQL Recipes to jumpstart your Analysis   sql tricks data analysis

35.2 The TTY Demystified   unix history tty

35.3 How to Interview Engineers   hiring engineers

35.4 The Eye's ROM Section   open index emulation nes snes gba n64

The Eye's Rom Section is a project dedicated towards the preservation and archival of video games. All game versions present on the site are already out of production and are unavailable in the primary market.

35.5 Evolution of a Haskell Programmer   haskell humor

35.6 FarmOS   open source farm management

35.7 Destroy All Monsters   role playing dungeons and dragons 2006

35.8 Doomsday planning for less crazy folk   planning for life

35.9 Frameless Geodesic Dome   construction design geodesic dome

35.10 The Most Officialest SkiFree Home Page!   software history skifree

35.11 What makes a good REPL?   programming language interpreter design clojure

35.12 Side Project Marketing Checklist   open source marketing checklist 2017

35.13 Software Engineering ≠ Computer Science   software engineering architecture design 2009

35.14 Worldbuilding   world building

Resource on all things world-building with lots of interesting information and pointers to more information about world building.

35.15 Eckkehard The German Butcher   youtube channel charcutery butchery

35.16 Topposting and Bottomposting   opinion holy war  netiquette

35.17 Basic security precautions for non-profits and journalists in the United States   computer security guidelines precautions 2017

35.18 Neural Symphony - Neuromodulated Tinnitus Relief   audio neural tinnitus relief

Sounds purported to help provide temporary relief to tinnitus sufferers.

35.19 Game Design FAQs   game design frequently asked questions

35.20 An Invitation to Live Consciously in Business   fred kofman linkedin conscious business academy 2015

35.21 17776-football   digital novel artificial intelligence artificial life 2017

A most intriguing story about Football in the year 17776.

35.22 CS 007 - Personal Finance for Programmers   personal finance programmers course 2017

35.23 How to Read Mathematics   mathematics reading how to

35.24 standupmaths - Why is TV 29.97 frames per second?   mathematics color television video ntsc

35.25 Learn ffmpeg the hard way   video ffmpeg tutorial

35.26 The GNU C Programming Tutorial   gnu c programming tutorial

35.27 snaptoken C utility

These tutorials walk you through writing medium-size software projects from scratch, step by step. The projects are based on real open-source software projects, and most of the tutorials stay true to the original source code. Every line of code is explained in detail, allowing you to thoroughly understand the project’s entire codebase.

kilo
Guide for building text editor in C based on antirez's 1000 line editor

35.28 Sunday Morning Breakfast Comics: The Talk 3   web comic quantum mechanics

35.29 Programmer's Guide to Polynomials and Splines   mathematics guide splines

35.30 How to Study Mathematics   mathematics study tool

35.31 The Benjamin Franklin Method of Reading Programming Books   programming study method 2018

35.32 Let’s talk about usernames   programming foibles usernames 2018

35.33 So you want to Abolish Time Zones   time zones 2015

A thought experiment about why abolishing time zones is a generally bad idea.

  • You need to know what solar time (daylight) a remote area is for reasons
  • Calendaring becomes more complicated with many places have split-day schedules
  • UTC already exists for synchronizing times regardless of time zone
  • The past will still have timezones and each region will switch at different times so you'll still need zoneinfo databases

35.34 Akin's Laws of Spacecraft Design   engineering spacecraft design axioms

35.36 Completely Silent Computer   computer hardware 2018

35.36.1 Hacker News Discussion #17075489   2018

One can make a passive build much more powerful.

NSG S0, once out, will most likely be the go-to case for such setups. Until then, an HDPLEX H5 is cool.

My desk has a H5 on it, housing an i7 8700 (non-K) and a GTX 1060. The TIM under the heatspreader is replaced with Thermal Grizzly Conductonaut and Thermal Grizzly Kryonaut is used as every other TIM that the case setup needs. The CPU is on stock clocks with a voltage offset of -30 mV. The GPU has the power target reduced to 90% and clocks increased by 130 MHz, so that it is effectively undervolted as well. The PSU is a Seasonic Ultra Prime Titanium 650. Prime95 with AVX throttles really, really fast, under a minute, perhaps, but is a very unrealistic load. Non-AVX stress tests and FurMark take a while to start throttling (20 minutes?), as the thermal capacity of the aluminum case is quite big. After hours of gaming, the GPU and CPU float around 80 C while providing full stock performance. I don't do 3D rendering (other than in-game) or video en/decoding, so have not had long, real-world, full loads to see how temperatures behave with those.

From the discussion I've had and forums I've read, I think that people are afraid of putting more power in passive cases and having their components at "high" temperatures, despite those being rated for them.

35.37 How to be a Manager   management 2018

35.38 Github: kanboard/kanboard   kanban 2015 2018

Open source kanban board web application in PHP with MySQL database.

36 UNIX and BSD

36.1 My BSD Sucks Less Than Yours   talk unix openbsd freebsd

36.4 FreeBSD - a lesson in poor defaults   freebsd defaults security 2017

37 Video Series

37.1 Professor Leonard   video  mathematics lectures

37.2 3Blue1Brown   video series mathematics

37.3 Little Bits of Lisp with Baggers   video series common lisp

37.4 Rewriting BSD 4.4 Shell Commands (part 1: cat)

According to learnto.computer/courses not all of the episodes are intended to be free, but at least at one time they were.

38 Web Comics

38.1 Darths and Droids   webcomic tabletop rpg starwars

Author: merlin

Created: 2018-06-29 Fri 13:38

Validate