Bookmarks: Difference between revisions

From miki
Jump to navigation Jump to search
Line 148: Line 148:
* [https://godbolt.org/ Compiler Explorer]
* [https://godbolt.org/ Compiler Explorer]
: Inline tool to analyze / compare the assembly code produced by many compilers in many languages.
: Inline tool to analyze / compare the assembly code produced by many compilers in many languages.

=== Functional programming ===
* [https://typeslogicscats.gitlab.io/posts/functor-applicative-monad.html Functor, applicative and monad]
: Detailed post on the differences between ''functor'', ''applicative'' and ''monad'' (using OCaml and Haskell).


== Security ==
== Security ==

Revision as of 07:29, 18 September 2019

Show how many times frustrated Linux kernel developers have put four letter words into the source code.
An online tool to provide custom-sized placeholder images of Bill Murray! http://fillmurray.com/200/300.
I like the humor and layout of the page. Images are superb.
Check also PlaceCage (Nick Cage Filler Images) and Steven SeGALLERY (Steven Segal Filler Images) :-D
An amazing video from A Capella Science on biology science. Amazing song. More to see on the YouTube channel.

AI / ML

Student's post about replicating OpenAI's GPT2 1.5B dataset, and is about to release it, and long explanation why. GPT2 generates very interesting samples. Humanity success is more because of collaboration / trust, than intelligence, and our ability has human to identify trustable information. If we have a system charged with detecting what we can and can’t trust, we aren’t removing our need to invest trust, we are only moving our trust from our own faculties to those of the machine.
A book praised by HN [1].
Amazing page detailing the mathematics behind gaussian processes.

Mathemathics

Correlation is not causation.
  • Tangente n°182, p34-35, "Les excès de la corrélation".
Nous allons vers un changement épistémologique majeur. S'en remettre à ce type de calcul traduit un renoncement aux ambitions de la raison moderne, qui liait les phénomènes à leurs causes. Ces ambitions de la raison permettaient d'envisager la prévention, d'agir sur les causes pour changes les effets. Au lieu de cela, on se dirige vers un système de pures corrélations. [...] On ne cherche plus à comprendre l'environnement, on cherche à le prédire. Notre rapport au savoir change, mais aussi notre rapport au monde: on se focalise davantage qu'auparavant sur les risques. "Voir et comprendre" sont supplantés par détecter et prévenir". On passe d'une civilisation du signe, qui était porteur de sens, à une civilisation du signal, qui est une donnée qui ne signifie rien en soi..
How to cut fairly a cake in three (and more) pieces.
The evolution of trust — a fun lecture for understanding game theory in a broader context.

Tools

Apps

  • Krita 4.0 released, Krita is a professional FREE and open source painting program.
  • Draw.io — a free alternative to Visio, very powerful and that integrates nicely in many online platforms (GitLab...). Available offline, and as stand-alone executable as well.

Books

A book on algorithmic problem solving, the art of formulating efficient methods that solve problems of a mathematical nature.
Online digital book on typography from Matthew Butterick, including tips to learn typography in ten minutes.

Dev

Crystal-clear tutorial on how to use strace, lsof and gdb to debug inter-process issues on Linux.
open source Python graphing library, with Javascript interaction.
An optimization guide for assembly programmers and compiler makers By Agner Fog. Technical University of Denmar.
Nine reasons why Lisp and Racket are good programming languages. From Matthew Butterick, author of the book Practical Typography and of Pollen, a digital book publishing system.

Rust

Many interesting comments on RUST, and how to write / debug programs with concurrency/performance in mind.

Methodology

5 reasons not to rewrite an existing code.
About the mistake of full rewrite (Netscape 6, Borland Quattro Pro). Instead refactor, rename,
Instead of rewriting, write a strangler application, that will progressively replace the old system.
Tesler's Law, also known as The Law of Conservation of Complexity, states that for any system there is a certain amount of complexity which cannot be reduced.
About Semantic Versioning and tips / pits to introduce new functionality, and fixing security bugs.
Don't build technology unless you feel the pain of not having it. Then: First make it possible. Then make it beautiful. Then make it fast. Use cases are everything in suffering-oriented programming.

Learn

From Xv6, a simple Unix-like teaching operating system
All participants spent most of their time studying examples, rather than reading the language documentation.
Illustrate the Shlemiel the painter’s algorithm when concatenating C strings where performance is n^2 because of the lack of efficient strlen() operator.
With lots of links, recommended books, languages (Racket, C, Javascript...), discrete mathematics...
A technique to learn complex concepts in record time, retain knowledge, and study more efficiently. First, write the name of the concept. Second, write out an explanation of the concept, as if explaining to a layman. Then pinpoint gaps into the explanation, and go back to source material, and repeat previous step. Finally, put the editor's hat, and rewrite the whole (filter wordy / confusing / complex language).

Web

Delay non-critical task to idle thread, while forcing their execution if some user event depend on that task being executed first.

Network

Every byte of a TLS connection explained and reproduced.

Game

Detailed explanation on how to make a fast tile-based game engine. Tricks used:
  • Use LEA instruction, most efficient to move bytes, but requiring modifying the stack pointer.
  • Pre-process the tiles to cancel effect of fast rendering loop
  • Reverse display order to cancel graphical corruption when interrupt occurs and load registers on the stack.
Detailed explanation on 2D game optimization for a Super-Mario-like game. Various tricks are explained about fast scrolling, fast sprite handling...
  • Background is generated by a LEA-field, basically a sequence of code generated by the game engine, and when executed, draw pixel to the screen buffer. The LEA-field is organized into sequence of code, each drawing a given scanline.
  • Scrolling is obtained by a different offset in the scanline.
  • When scrolling, the code in leftmost/rightmost columns of the LEA-field must be updated. This update is done by a code, which is also generated by the engine. This column-update code is generated to avoid duplicate register loading (typ. occurs when the scene has many duplicated pixels, like a blue sky).
  • Sprite is also generated by a code, generated from sprite data.
A very fast tile engine for the Apple IIGS, using advanced techniques to achieve 1 pixels every 1.25 cycles.

CVS

Explain how to obtain perfect patch using digle (directed graph file) instead of files, as used in pijul, with some mathematical background.

Languages

A Scheme/Lisp language.
A language for pipe-based programming. Amazing master thesis, clearly written!

Design

  1. Contrast — Elements of your design (colour, size, weight, style) should be either exactly the same, or significantly different.
  2. Consistency — Make sure similar elements appear in similar ways.
  3. Occam's Razors (aka Reduce Visual Noise) — The fewer the number of elements you use in your design, the better.
  4. Space — The way things are positioned sends a meta-level message about their meaning. This deals with proximity (= relatedness), with negative space, and with importance and order.
What’s faster, incrementing a std::vector of uint8_t or of uint32_t? This is analyzed carefully, with surprising results. It turns out that uint8_t is much slower because of pointer aliasing issues that prevent the compiler to use vector instructions. To fix it, one much avoid any reference to std::vector data in the loop:
for (auto i = v.begin(), e = v.end(); i != e; ++i) {
    (*i)++;
}
Or another solution is to use keyword __restrict.

Tools

Inline tool to analyze / compare the assembly code produced by many compilers in many languages.

Functional programming

Detailed post on the differences between functor, applicative and monad (using OCaml and Haskell).

Security

Detailed description of Trinity, a fully chained exploit for the PS Vita consisting of six unique vulnerabilities, describing how it works, how it was found and built.
Summary of issues around PGP, and alternatives (Signal, Whatsapp, magic wormhole, tarsnap).

Science & Tech

The most complete and detailed description on how our eyes perceive colors.
Just wow.
A nice dynamic periodic table of elements.

Success stories

With good tips about launching new business online.
The success story on how a grad student and his professor worked together to write a 500p text book, and the tools and methodology they used.
Example on how to deploy / develop a successful web application, by one person.

Miscellaneous

A detailed explanation about color harmony, what makes some painting rich in colors...
A repository of fonts patched with lots of glyphs (icons). Include patches for Fantasque Sans Mono, Iosevka...
... animated for the internet.
Beautiful animated pages explaining how various things work, like sewing machine, engines, human eye, lcd screen...
Amazing set of interactive pages to learn how synthesizers work.
Example: shop with one cashier, 10 min processing time, 5.8 job/hour will have an average waiting time of 5 hours! This document explains why and tips to improve. And explains why it is very hard to use the last 15% of anything (wait time double at 50% capacity, and double again at 75%, and so on).
A phonic-based reading method, with direct instructions. Much more efficient than whole-word system, at least on kids of all backgrounds [2].
Elegant Python programs to generate 3D objects in SVG.
An alternate floating points representation, claimed to be better than IEEE 754 [3].
On how Netflix and Disney are reproducing the old schema of consolidation that happened before with movie studio, and that we should go again for a split into separate production, distribution, and retailing.
The idea is that there is lot of overlap with previous users. But some concerns on HN.
All tags in the browser are editable with attribute contenteditable="true".
Some insights from someone at Uber who've been building and operating a large distributed system (basically: monitoring not average but 99% percentile, monitor *business* metrics, mitigate first and fix later...)
A mere wrapper around Google, but the only website that returned as 2nd hit the correct song matching paradise "you and me" (ie. Gangsta's Paradise from Coolio).
Article on using statistics in medicine / police investigation. On average, every human has one breast and one testicle! Besides looking at statistical significance, we must also look at the size of the effect (Like save 1 in 130 lives with p=0.001, high significance but risk of adverse side effects may compensate occurence of the wanted effect)

Courses

Learn jQuery. Recommended here.
Teach you how to manage state in your React application with Redux. Recommended here as a good introduction to functional programming.

Talks

Talk from Joe Armstrong, co-author of Erlang language, about the complexity of SW and how to fix it.