Skip to main content

· 16 min read

Books

2023-08-05 Distributed systems for fun and profit

I wanted a text that would bring together the ideas behind many of the more recent distributed systems - systems such as Amazon's Dynamo, Google's BigTable and MapReduce, Apache's Hadoop and so on.

In this text I've tried to provide a more accessible introduction to distributed systems. To me, that means two things: introducing the key concepts that you will need in order to have a good time reading more serious texts, and providing a narrative that covers things in enough detail that you get a gist of what's going on without getting stuck on details. It's 2013, you've got the Internet, and you can selectively read more about the topics you find most interesting.

In my view, much of distributed programming is about dealing with the implications of two consequences of distribution:

  • that information travels at the speed of light
  • that independent things fail independently*

In other words, that the core of distributed programming is dealing with distance (duh!) and having more than one thing (duh!). These constraints define a space of possible system designs, and my hope is that after reading this you'll have a better sense of how distance, time and consistency models interact.

This text is focused on distributed programming and systems concepts you'll need to understand commercial systems in the data center. It would be madness to attempt to cover everything. You'll learn many key protocols and algorithms (covering, for example, many of the most cited papers in the discipline), including some new exciting ways to look at eventual consistency that haven't still made it into college textbooks - such as CRDTs and the CALM theorem.

I hope you like it! If you want to say thanks, follow me on Github (or Twitter). And if you spot an error, file a pull request on Github.

The first chapter covers distributed systems at a high level by introducing a number of important terms and concepts. It covers high level goals, such as scalability, availability, performance, latency and fault tolerance; how those are hard to achieve, and how abstractions and models as well as partitioning and replication come into play.

The second chapter dives deeper into abstractions and impossibility results. It starts with a Nietzsche quote, and then introduces system models and the many assumptions that are made in a typical system model. It then discusses the CAP theorem and summarizes the FLP impossibility result. It then turns to the implications of the CAP theorem, one of which is that one ought to explore other consistency models. A number of consistency models are then discussed.

A big part of understanding distributed systems is about understanding time and order. To the extent that we fail to understand and model time, our systems will fail. The third chapter discusses time and order, and clocks as well as the various uses of time, order and clocks (such as vector clocks and failure detectors).

image-20230805003412230

2023-08-05 Book Data-Oriented Design Richard Fabian

Online release of Data-Oriented Design : This is the free, online, reduced version. Some inessential chapters are excluded from this version, but in the spirit of this being an education resource, the essentials are present for anyone wanting to learn about data-oriented design. Expect some odd formatting and some broken images and listings as this is auto generated and the Latex to html converters available are not perfect. If the source code listing is broken, you should be able to find the referenced source on github. If you like what you read here, consider purchasing the real paper book from here, as not only will it look a lot better, but it will help keep this version online for those who cannot afford to buy it. image-20230805004022297

DOD

Good Reads

2023-07-08 Falsehoods programmers believe about addresses

Addressing is a fertile ground for incorrect assumptions, because everyone's used to dealing with addresses and 99% of the time they seem so simple. Below are some incorrect assumptions I've seen made, or made myself, or had reported to me. (If you want to look up an address for a UK postcode or vice-versa to confirm what I'm telling you, try the Royal Mail Postcode Finder)

An address will start with, or at least include, a building number.

Counterexample: Royal Opera House, Covent Garden, London, WC2E 9DD, United Kingdom.

When there is a building number, it will be all-numeric.

Counterexample: 1A Egmont Road, Middlesbrough, TS4 2HT

4-5 Bonhill Street, London, EC2A 4BX

No buildings are numbered zero

Counterexample: 0 Egmont Road, Middlesbrough, TS4 2HT

Well, at the very least no buildings have negative numbers

Guy Chisholm provided this counterexample: Minusone Priory Road, Newbury, RG14 7QS

(none of the databases I've checked render this as -1)

image-20230805004916634

Fun

2023-08-05 WORDWARD DRAW by Daniel Linssen

image-20230805002810247

Retro

2023-08-05 GitHub - grassmunk/Chicago95: A rendition of everyone's favorite 1995 Microsoft operating system for Linux. Linux

XFCE / Xubuntu Windows 95 Total Conversion

image-20230804235415730

Click here for more screenshots

I was unhappy with the various XFCE/GTK2/GTK3 Windows 95 based themes and decided to make one that was more consistent across the board for theming.

Included in this theme:

  • Icons to complete the icon theme started with Classic95
  • GTK2 and GTK3 themes
  • Edited Redmond XFWM theme to more accurately reflect Windows 95
  • Chicago95 Plus! A tool to preview and install Windows 95/98/ME/XP themes
  • Plymouth theme created from scratch
  • An MS-DOS inspired theme for oh-my-zsh
  • Partial support for HiDPI monitors
  • Partial icon theme for LibreOffice 6+

Requirements:

  • GTK+ 3.22 or 3.24
  • Xfce 4.12, 4.14, 4.16
  • gtk2-engines-pixbuf (Recommended for GTK2 applications)
  • The xfce4-panel-profiles package
  • A Window compositor

Maps

2023-08-05 overpass turbo

Allows to query OpenStreetMap

image-20230804235952243

[out:json];
// Define the area of interest using a predefined area for Seattle.
area["name"="Seattle"]->.seattle;

// Search for nodes tagged as public restrooms within the Seattle area
node(area.seattle)[amenity=toilets];

// Output the results
out;

The Era of AI

2023-07-25 A comprehensive guide to running Llama 2 locally - Replicate – Replicate

2023-07-22 Highly Efficient Prompt for Summarizing — GPT-4 : r/ChatGPTPro

As a professional summarizer, create a concise and comprehensive summary of the provided text, be it an article, post, conversation, or passage, while adhering to these guidelines:

  1. Craft a summary that is detailed, thorough, in-depth, and complex, while maintaining clarity and conciseness.
  2. Incorporate main ideas and essential information, eliminating extraneous language and focusing on critical aspects.
  3. Rely strictly on the provided text, without including external information.
  4. Format the summary in paragraph form for easy understanding.
  5. Conclude your notes with [End of Notes, Message #X] to indicate completion, where "X" represents the total number of messages that I have sent. In other words, include a message counter where you start with #1 and add 1 to the message counter every time I send a message.

By following this optimized prompt, you will generate an effective summary that encapsulates the essence of the given text in a clear, concise, and reader-friendly manner.

2023-07-17 yokoffing/ChatGPT-Prompts: ChatGPT and Bing AI prompt curation

2023-07-17 f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.

2023-07-15 JushBJJ/Mr.-Ranedeer-AI-Tutor: A GPT-4 AI Tutor Prompt for customizable personalized learning experiences.

Unlock the potential of GPT-4 with Mr. Ranedeer AI Tutor, a customizable prompt that delivers personalized learning experiences for users with diverse needs and interests.

2023-07-05 How Coders Can Survive—and Thrive—in a ChatGPT World - IEEE Spectrum

// I am testing GPT summary prompt here

  • Stick to Basics and Best Practices: Despite AI's growth, the basics of programming, such as problem-solving skills, understanding code, and being able to fit code into larger systems, remain vital. Domain-specific knowledge, system design, and software architecture remain primarily human domains.
  • Find the Tool That Fits Your Needs: It's crucial to identify and experiment with various AI-based tools that align with your requirements, whether for automating tasks like test creation or for providing programming suggestions. Adapting to new tools as they emerge in the fast-paced AI field is key.
  • Clear and Precise Conversations Are Key: When using AI tools, being detailed and clear in communication is critical. For conversational AI programmers, prompt engineering helps frame effective prompts. The process should be viewed as iterative, with the AI assistant seen as an inexperienced yet knowledgeable collaborator.
  • Be Critical and Understand the Risks: Programmers should remain critical of AI-generated code, as models can produce incorrect code. Checking generated code is essential, even if it adds extra steps. Concerns regarding proprietary code, copyright, and security are also highlighted. Programmers need to understand the models' data sources and the versions of programming languages used during training to appropriately contextualize results.

FFmpeg

2023-08-05 ffmprovisr ffmpeg cookbook

Github: amiaopensource/ffmprovisr: Repository of useful FFmpeg commands for archivists!

Making FFmpeg Easier FFmpeg is a powerful tool for manipulating audiovisual files. Unfortunately, it also has a steep learning curve, especially for users unfamiliar with a command line interface. This app helps users through the command generation process so that more people can reap the benefits of FFmpeg.

Each button displays helpful information about how to perform a wide variety of tasks using FFmpeg. To use this site, click on the task you would like to perform. A new window will open up with a sample command and a description of how that command works. You can copy this command and understand how the command works with a breakdown of each of the flags.

This page does not have search functionality, but you can open all recipes (second option in the sidebar) and use your browser's search tool (often ctrl+f or cmd+f) to perform a keyword search through all recipes.

image-20230805000424900

2023-08-05 Editing Videos with ffmpeg – Hadet – Earth Based System Administrator and Hobbyist

image-20230805001802130

Editing Videos with ffmpeg

This is a short and messy guide for editing files from the command line. While I do this on Linux, these commands will work on MacOS and Windows too. The reason I do this is because I am vision impaired and timeline editors are very cumbersome for me in particular. Sometimes I also feel this is faster, especially for sharing short clips scaled for chat platforms like Discord.

Bash

2023-08-05 GitHub - denysdovhan/bash-handbook: 📖 For those who wanna learn Bash

image-20230804234848447

If you are a developer, then you know the value of time. Optimizing your work process is one of the most important aspects of the job.

In that path towards efficiency and productivity, we are often posed with actions that must be repeated over and over again, like:

  • taking a screenshot and uploading it to a server
  • processing text that may come in many shapes and forms
  • converting files between different formats
  • parsing a program's output

Enter Bash, our savior.

Bash is a Unix shell written by Brian Fox for the GNU Project as a free software replacement for the Bourne shell. It was released in 1989 and has been distributed as the Linux and macOS default shell for a long time.

So why do we need to learn something that was written more than 30 years ago? The answer is simple: this something is today one of the most powerful and portable tools for writing efficient scripts for all Unix-based systems. And that's why you should learn bash. Period.

In this handbook, I'm going to describe the most important concepts in bash with examples. I hope this compendium will be helpful to you.

Projects

2023-08-05 Cap'n Proto: Introduction

image-20230805002615039

Cap’n Proto is an insanely fast data interchange format and capability-based RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster. In fact, in benchmarks, Cap’n Proto is INFINITY TIMES faster than Protocol Buffers.

2023-08-05 Hacker News Blogroll / RSS

image-20230805004403296

2023-07-08 The Code Review Pyramid - Gunnar Morling

image-20230805004745288

code_review_pyramid.svg Code Style:

  • Is the project's formatting style applied?
  • Does it adhere to agreed on naming conventions
  • Is it DRY?
  • Is the code sufficiently "readable" (method lengths, etc.)

Tests:

  • Are all tests passing?
  • Are new features reasonably tested?
  • Are corner cases tested?
  • Is it using unit tests where possible, integration tests where necessary?
  • Are there tests for NFRs, e.g. performance?

Documentation:

  • New features reasonably documented?
  • Are the relevant kinds of docs covered: README, API docs, user guide, reference docs, etc.?
  • Are docs understandable, are there no significant typos and grammar mistakes?

Implementation semantics:

  • Does it satisfy the original requirements?
  • Is it logically correct?
  • Is there no unnecessary complexity?
  • Is it robust (no concurrency issues, proper error handling, etc.)?
  • Is it performant?
  • Is it secure (e.g. no SQL injections, etc.)
  • Is it observable (e.g. metrics, logging, tracing, etc.)?
  • Do newly added dependencies pull their weight? Is their license acceptable?

API Semantics:

  • API as small as possible, as large as needed?
  • Is there one way of doing one thing, not multiple ones?
  • Is it consistent, does it follow the principle of least surprises?
  • Clean split of API/internals, without internals leaking in the API?
  • Are there no breaking changes to user-facing parts (API classes, configuration, metrics, log formats, etc.)?
  • Is a new API generally useful and not overly specific

Licensed under CC BY-SA 4.0 (C) @gunnarmorling

Web/SVG

2023-08-05 SVG Path Commands | Lines

Interactive tutorial

image-20230805004239796

C#

2023-07-10 Hunting .NET memory leaks with Windbg » André Snede

Recently a client called me about an issue where one of their production servers would run out of memory, every other week.

The application in question was a .NET Framework 4.5 Windows service, that runs in an Azure VM, and ever so often it would become unstable and start causing trouble.

Advanced .NET debugging Book

Debugging managed code, memory leak with memory dump using windbg

Identifying memory leak with process explorer and windbg

Windbg cheatsheat

C++ CPP CXX

2023-07-30 fffaraz/awesome-cpp: A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.

Concurrency in C++: A Programmer’s Overview

image-20230805003731357

C language

2023-08-05 "Once" one-time concurrent initialization with an integer

The article discusses the idea of "once" initialization in concurrent programming, which ensures a certain part of a program is only initialized once regardless of how many threads are trying to access it simultaneously. The writer compares the traditional pthread_once function and Go's sync.Once function, highlighting their limitations.

To overcome these limitations, the author proposes a new "once" interface that removes callbacks and breaks down initialization into two separate steps, do_once and once_done. The do_once function returns true if initialization is required, otherwise, it returns false after initialization has completed (blocks if it's in process). The once_done function signals that the initialization process is complete.

The author's approach doesn't limit the initialization to global data, and it uses integers to represent the three states of the "once" object: Uninitialized, Undergoing initialization, and Initialized. This approach allows for zero-initialization, concurrency control with atomic operations, and an optimization for a quicker state transition with an atomic increment.

In the end, the author presents the implementation details of this new approach, clarifying how it ensures initialization is performed only once and how it handles multiple threads trying to initialize the same piece of data. image-20230804235145362

SIMD

2023-07-08 Packing a string of digits into an integer quickly – Daniel Lemire's blog

#include <arm_neon.h>
// From "20141103 012910", we want to get
// 0x20141103012910
uint64_t extract_nibbles(const char *c) {
const uint8_t *ascii = (const uint8_t *)(c);
uint8x16_t in = vld1q_u8(ascii);
// masking the high nibbles,
in = vandq_u8(in, vmovq_n_u8(0x0f));
// shuffle the bytes
const uint8x16_t shuf = {14, 13, 12, 11, 10, 9, 7, 6,
5, 4, 3, 2, 1, 0, 255, 255};
in = vqtbl1q_u8(in, shuf);
// then shift/or
uint16x8_t ins =
vsraq_n_u16(vreinterpretq_u16_u8(in),
vreinterpretq_u16_u8(in), 4);
// then narrow (16->8),
int8x8_t packed = vmovn_u16(ins);
// extract to general register.
return vget_lane_u64(vreinterpret_u64_u16(packed), 0);
}

Talks / Security

2023-08-04 Secure Coding Back to Basics - Erlend Oftedal - NDC Security 2022 - YouTube

image-20230804234609455

cure53/DOMPurify: DOMPurify - a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. DOMPurify works with a secure default, but offers a lot of configurability and hooks. Demo: let clean = DOMPurify.sanitize(dirty); https://github.com/colinhacks/zod

import as z from "zod" ;
export const registrationParser = z.object ({
email: z.string().min(10).max(60).regex(emailRegex),
password: z.string().min(8).max(256)
})

Value objects 2023-08-03 Input Validation - OWASP Cheat Sheet Series 2023-08-03 Why input validation is not the solution for avoiding SQL injection and XSS 2023-08-03 Secure by Design

Multiplayer games - Research 🔬

2023-07-22 leereilly/games: 🎮 A list of popular/awesome video games, add-ons, maps, etc. hosted on GitHub. Any genre. Any platform. Any engine.

2023-07-22 SirRenzalot/awesome-lan-party-games: Awesome games for LAN parties or local multiplayer sessions.

2023-07-22 PCGamer The 30 best multiplayer browser games to play right now : r/lowendgaming

2023-07-22 Best Multiplayer Browser Games Of 2021 (No Download)

2023-07-22 Best multiplayer games to play in a web browser | | Resource Centre by Reliance Digital

2023-07-22 QuickParty.Games – Instant Browser-Based Party Games

· 15 min read

Good Reads

2023-07-30 Before you try to do something, make sure you can do nothing - The Old New Thing

When building a new thing, a good first step is to build a thing that does nothing. That way, you at least know you are starting from a good place. If I’m building a component that performs an action, I’ll probably do it in these steps:

  • Step zero is to write a standalone program to perform the action. This ensures that the action is even possible.
  • Once I have working code to perform the action, I write a component that doesn’t perform an action. That at least makes sure I know how to build a component.
  • Next, I register the component for the action, but have the Invoke method merely print the message “Yay!” to the debugger without doing anything else. This makes sure I know how to get the component to run at the proper time.
  • Next, I fill in the Invoke method with enough code to identify what action to perform and which object to perform it on, print that information to the debugger, and return without actually performing the action. This makes sure I can identify which action is supposed to be done.
  • Finally, I fill in the rest of the Invoke method to perform the action on the desired object. For this, I can copy/paste the already-debugged code from step zero.

This link came from 2023-07-30 Programming Digest

2023-07-30 What we talk about when we talk about System Design | mahesh’s blog

The rules for effective design are as follows:

  1. Late-bind on designs: The design process should explore the entire design space rather than converging on a single point solution too early, allowing teams to switch between different possibilities until the best solution is found.
  2. Each point solution is a DoS attack on the design process: Discussing designs within the context of the design space accelerates the process, making it easier to compare and iterate on different solutions efficiently.
  3. Think in parallel; Design together; Implement in parallel; Review together: The design and development process should be parallelized and divided into creative thinking, centralized design, parallel implementation, and centralized reviewing. Late-binding to developers is crucial for fostering new ideas.
  4. Talk about the problem, not existing systems: Designing from first principles is more effective than basing solutions solely on existing systems, as they might introduce unnecessary complexity or bias.
  5. Always talk about a second application: Abstractions should be described independently of specific applications to prevent application-specific details from leaking into the abstraction.
  6. For each abstraction, build one implementation; plan for a second; hope for a third: Discussing multiple implementations of an abstraction ensures that the semantics of the abstraction remain independent of implementation details.
  7. Abstraction is not free: Each abstraction layer adds complexity, requiring precise definitions and reasoning in generic ways. Designers must balance concreteness and abstractness.
  8. Be critical (but about the right things): Designers should critically assess unknown and challenging aspects of a project while recognizing that every well-established system started with rough ideas.

This link came from 2023-07-30 Programming Digest

2023-07-25 Unicode is harder than you think · mcilloni's blog

Reading the excellent article by JeanHeyd Meneide on how broken string encoding in C/C++ is made me realise that Unicode is a topic that is often overlooked by a large number of developers. In my experience, there’s a lot of confusion and wrong expectations on what Unicode is, and what best practices to follow when dealing with strings that may contain characters outside of the ASCII range.

This article attempts to briefly summarise and clarify some of the most common misconceptions I’ve seen people struggle with, and some of the pitfalls that tend to recur in codebases that have to deal with non-ASCII text.

2023-07-22 The Most Important Coding Habits – PuppyCoding

In this article, the author asserts that the most significant coding habits aren't related directly to the code itself, but rather those that sustain and enhance a programmer's physical health and longevity in the field. This realization comes after suffering from a spinal disc herniation, commonly known as a slipped disc, attributed to poor posture from prolonged keyboard usage. The author stresses four crucial habits for healthy coding:

  1. Daily stretches: A chiropractor attributed the author's slipped disc to the inactivity of stomach and thigh muscles, which should help support the back but become weak due to extended sitting. To alleviate this, they recommend regular stretching exercises, particularly for the central and lower body, to improve muscle suppleness and support.
  2. Regular breaks: Taking a short break at least once an hour is advised, which apart from maintaining physical health, also aids in refreshing the mind. Breaks often provide a new perspective, making problem-solving easier upon return.
  3. Avoid late-night coding: Working long hours into the night not only leads to poorer quality code but also encourages bad posture. The author suggests establishing a strict cut-off time for work, promoting better mental and physical health.
  4. Improving the coding environment: Investing in an ergonomic setup, including a laptop stand, comfortable chair, and a standing desk, can significantly improve posture and reduce strain. In conclusion, the author regrets not incorporating these habits sooner and encourages fellow programmers, particularly those early in their career, to learn from their mistakes to enjoy a healthier, more prolonged coding career.

2023-07-07 Excellence is a habit, but so is failure – Andreas Kling – I like computers!

  • I didn't become addicted to drugs overnight. It happened over hundreds of moments where I prioritized momentary pleasure over health and safety.
  • I didn't become overweight overnight. It happened over hundreds of moments where I opted for immediate gratification over long-term health.
  • I didn't ruin relationships overnight. It happened over hundreds of moments where I chose comfort over confronting difficult conversations, admitting my mistakes, or even just acknowledging that someone was better than me at something.

How the things work

2023-07-22 The "Basics" | Putting the "You" in CPU

image-20230801223725713

2023-07-22 A brief history of computers — LessWrong

image-20230801223840840

Retro

2023-07-14 Windows: A Software Engineering Odyssey

image-20230801224752243 image-20230801224815398

2023-07-09 Chistory

The C programming language was devised in the early 1970s as a system implementation language for the nascent Unix operating system. Derived from the typeless language BCPL, it evolved a type structure; created on a tiny machine as a tool to improve a meager programming environment, it has become one of the dominant languages of today. This paper studies its evolution.

Fun

2023-07-08 Windows 95 Tips, Tricks, and Tweaks

image-20230801225207726

2023-07-13 Interview with an Emacs Enthusiast in 2023 Colorized - YouTube

image-20230801224636647

2023-07-28 My 90's TV!

image-20230801222426881

2023-07-25 Got called to a professor’s office after a complaint his SPARC4 was running slow

Back in the day, I got called to a professor’s office (I was IT support in the CS department) and the professor was complaining his Sparc4 was running slow. First thing I did was minimise a window and there was just this black square. Bit by bit roaches slowly moved. Like 0.5 fps. So many xroaches under his xterm that it was just a solid black square. The roaches multiply if they’re left alone long enough. This professor NEVER moved windows. So roaches scurried under his windows and then sat there. Never disturbed by being exposed. Slowly multiplying at some rate. Some grad student had thought it would be funny to play a prank on the professor and run xroach on him. But the professor obviously never saw the roaches. So they hid under his windows slowly increasing until finally they soaked up so much RAM that it impaired performance.

2023-07-25 veltman/clmystery: A command-line murder mystery

There's been a murder in Terminal City, and TCPD needs your help. To figure out whodunit, you need access to a command line.

2023-07-24 Death Metal English

Normal English: “Commuting to work” Death Metal English: “TRANSPORTATION OF THE WAGEBOUND UNTO THE NEXUS OF PERPETUAL QUOTIDIAN ENSLAVEMENT”

Projects

2023-07-31 Numbers Every Programmer Should Know By Year

image-20230801220602570

C++

C++ Talks and Videos

2023-08-01 SIMD Libraries in C++ - Jeff Garland - CppNow 2023 - YouTube

image-20230801215244268

Application libraries:

Developer libraries

C++ Articles

2023-08-01 💡 Agner Fog

According to ChatGPT: Agner Fog is a Danish professor known for his work in cultural selection theory, optimization methods, and system development methods. He holds a PhD in Operations Research and has a diverse educational background including sociology, statistics, and computer science.

One of his main contributions to the field of computer science is his development of CPU dispatcher software and comprehensive documentation of instruction latencies and throughputs for various CPU models. His optimization guides and tools are popular among performance-oriented programmers.

In the field of social sciences, he has developed a theory of cultural selection, which is similar to biological evolution but acts on cultural phenomena such as norms, traditions, language, technology, and art.


Software optimization resources

Optimization manuals

Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms

This is an optimization manual for advanced C++ programmers. Topics include: The choice of platform and operating system. Choice of compiler and framework. Finding performance bottlenecks. The efficiency of different C++ constructs. Multi-core systems. Parallelization with vector operations. CPU dispatching. Efficient container class templates. Etc.

File name: optimizing_cpp.pdf, size: 1838972, last modified: 2023-Jul-01. Download.

The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers

This manual contains details about the internal working of various microprocessors from Intel, AMD and VIA. Topics include: Out-of-order execution, register renaming, pipeline structure, execution unit organization and branch prediction algorithms for each type of microprocessor. Describes many details that cannot be found in manuals from microprocessor vendors or anywhere else. The information is based on my own research and measurements rather than on official sources. This information will be useful to programmers who want to make CPU-specific optimizations as well as to compiler makers and students of microarchitecture.

File name: microarchitecture.pdf, size: 2472395, last modified: 2023-Jul-01. Download.

C++ vector class library

This is a collection of C++ classes, functions and operators that makes it easier to use the the vector instructions (Single Instruction Multiple Data instructions) of modern CPUs without using assembly language. Supports the SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, FMA, XOP, and AVX512F/BW/DQ/VL instruction sets. Includes standard mathematical functions. Can compile for different instruction sets from the same source code. Description and instructions. Message board. Source on Github. Nice little instruction video by WhatsaCreel.

Latest release.

image-20230801215850674

2023-07-25 Getting Friendly With CPU Caches

When a CPU needs to access a piece of data, the data needs to travel into the processor from main memory.

The architecture looks something like this:

Figure 1: CPU Cache

img

Figure 1 shows the different layers of memory a piece of data has to travel to be accessible by the processor. Each CPU has its own L1 and L2 cache, and the L3 cache is shared among all CPUs. When the data finally makes its way inside the L1 or L2 cache, the processor can access it for execution purposes. On Intel architectures the L3 cache maintains a copy of what is in L1 and L2.

Performance in the end is about how efficiently data can flow into the processor. As you can see from the diagram, main memory access is about 80 times slower than accessing the L1 cache since the data needs to be moved and copied.

Note: Memory Performance in a Nutshell: The data is from 2016 but what’s important are the latency ratios which are pretty constant.

2023-07-23 STX: Main Page

lamarrr/STX: C++17 & C++ 20 error-handling and utility extensions. These monadic types not only make error handling easier but also make the paths more obvious to the compiler for optimizations. Monads can be simply thought of as abstract types of actions. Their monadic nature makes it easy to operate on them as pipelines and in the process eliminate redundant error-handling logic code.

  • stx::Result<T, E> : Type for relaying the result of a function that can fail or succeed (with monadic extensions)
  • stx::Option<T> : Type for safe optional values (with monadic extensions)

Markdown

2023-08-01 mark-when/markwhen: Make a cascading timeline from markdown-like text. Supports simple American/European date styles, ISO8601, images, links, locations, and more.

Markwhen is an interactive text-to-timeline tool. Write markdown-ish text and it gets converted into a nice looking cascading timeline.

Use the editor here.

This repo is for the view container, not the editor. The editor (markwhen.com) and VSCode extension are built on top of the view container.

image-20230801220208326

2023-08-01 Show HN: Markwhen: Markdown for Timelines | Hacker News

Yodeling

Hyper-realistic portrait of an alpine yodeling girl, her skin textured by highland winds, expressive azure eyes reflecting the vast sky, and lips curved into a melodious call. Every detail from her freckled button nose to her windswept hair contributes to this stunning, picturesque character

image-20230801221725728

2023-08-02 LESSON 1 - It's Foundational - Yodel-lay-ee-dee

image-20230801221028571

Songs

BethWilliamsMusic: image-20230801221924368

1 https://www.youtube.com/watch?v=plyd2kzWWYc

2 https://www.youtube.com/watch?v=bTrmN11fkPc

3 https://www.youtube.com/watch?v=Xp1PmnrfFks

Good Talks!

2023-07-30 The Art of Code • Dylan Beattie • YOW! 2022 - YouTube

image-20230801220844409

2023-07-30 The 128-Language Quine Relay - esoteric.codes 2023-07-30 mame/quine-relay: An uroboros program with 100+ programming languages 2023-07-30 Shakespeare Programming Language – Living London – Carleton College Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind! (Will print "H" from "Hello World")

Sonic PI demo (minute: 38:00) https://sonic-pi.net https://youtu.be/gwLQMuTspxE?t=2282

RockstarLang

2023-07-30 RockstarLang/rockstar: The Rockstar programming language specification https://youtu.be/gwLQMuTspxE?t=2520 (t= 42:00)

Comparison

OperandDescription
==your love is a lie
!=the whisky ain't the answer
>my heart is stronger than steel
<my soul is weaker than water
>=my will is as strong as a lion
<=your lies are as low as a snake

2023-07-15 Locknote: How JavaScript Happened: A Short History of Programming Languages - Mark Rendle - YouTube

image-20230801224527281

FORTRAN

  • IF statement
    • for multiplication operator
  • i as iterator variable

ALGOL

  • Block structure
  • IF ... THEN
  • ELSE ...
  • SWITCH
  • FOR loops
  • Functions
  • Semicolons
  • Backus—Naur Form

LISP

  • Functional Programming
  • First-class functions
  • The Heap
  • Garbage collection

Simula

  • Classes
  • Inheritance
  • Polymorphism
  • Scope (public / private)

APL

  • Dynamic typing

BCPL

  • Curly braces

C

  • for (int i = 0; i < 100; i++) { }

Smalltalk

  • Reflection
  • console
  • Virtual Machine
  • Everything being an object

ML

  • Arrow function syntax

C++ try / catch / throw

Self

  • prototype-based object orientation

C# async/await

· 15 min read

image-20230629004445045

Good Reads

2023-06-23 How my online gaming addiction saved my Ph.D. – Advait Sarkar

Previously, this might have taken me weeks. With JavaScript, I built the prototype in hours. Using web technology had another advantage: it was easy to deploy the study as a website and therefore get many more participants than I would have normally gotten in a lab-based experiment. The study was completed within a month and was published at a good conference.

2023-06-19 Imaginary Problems Are the Root of Bad Software

In this blog post, the author discusses *imaginary problems* as the root of bad software and how they affect developers, managers, and clients. He:

  • Defines imaginary problems as problems that are designed to do something other than their intended purpose, and contrast them with real problems that have to be solved.
  • Shows how long chains of communication and boredom can create imaginary problems by changing, misunderstanding, or misrepresenting requirements and specifications.
  • Examines how corruption, inertia, and fear can keep imaginary problems alive by preventing or discouraging fixing real problems that threaten the status quo or the livelihoods of others.
  • Provides examples and data from various domains and projects to illustrate the prevalence and impact of imaginary problems, such as online banking, blockchain, and software development.
  • Concludes that imaginary problems are a vicious cycle that prevents software from being reliable, efficient, or user-friendly, and that everyone needs to stop creating and solving them, and start focusing on the real problems.

2023-06-17 Generating income from open source

Open source projects need to charge money for their work. The author argues that donations are not enough to sustain open source projects and maintainers should adopt different business models to generate revenue. The author suggests several ways to charge money for open source work, such as different licenses, pro features, hosted solutions, or paid support.

Examples of successful open source businesses. The author provides several examples of open source projects that have built profitable businesses around their work, such as Metafizzy, Sidekiq, Plausible Analytics, PostHog, Metabase, React Flow, Babel, curl and Filippo Valsorda. The author explains how each project offers value to its customers and what kind of pricing or support they have.

Advice for open source maintainers. The author gives some advice for open source maintainers who want to start charging money for their work, such as understanding the value they provide, packaging their product well, letting people discover their paid plans, giving something of value immediately after purchase and offering insurance that their project will be maintained. The author encourages maintainers to try different options and not be ashamed of asking for money.

2023-06-14 Finish your projects

This article is about the importance and challenges of finishing a project, especially in the open source community. The author shares his personal experience and insights on how to overcome the obstacles of work and fear that often prevent people from releasing their projects. He also encourages readers to take pride in their finished work and to honor their past and future selves by publishing their projects. He concludes by introducing himself and The ReadME Project, which aims to amplify the voices of open source developers.

2023-06-12 The Surprising Power of Documentation

  1. Documentation saves time and improves productivity across the company.
  2. Documentation eradicates guesswork and reinvention of the wheel.
  3. Documentation enables fast onboarding and helps newcomers navigate startup processes.
  4. Documentation reduces the reliance on meetings and promotes asynchronous communication.
  5. Documentation serves as a knowledge repository and facilitates learning from past decisions.
  6. A documentation-first culture breaks down hierarchical barriers and promotes knowledge sharing.
  7. Templates, guidelines, and user-friendly tools should be provided to facilitate documentation.
  8. Resistance to documentation should be addressed through engagement and modeling behavior.
  9. Documentation should be clear, concise, well-structured, and easily accessible.
  10. Startups should cultivate a love for documentation and make it a daily practice

2023-07-02 Hashing

Hash functions, key to many aspects of computing such as databases, data structures, and security, are explored in this piece. These functions take an input, often a string, and generate a number. If a good hash function is used, it will always return the same number for the same input, while minimizing 'collisions' where different inputs produce the same number. This article evaluates the performance of hash functions, highlighting their efficacy with random and non-random inputs. An effective hash function, like the widely-used murmur3, provides even distribution regardless of input. The 'avalanche effect' is another measure of a good hash function, where a single change in the input results in an average 50% change in the output bits. Understanding hash functions is essential in utilizing key-value pair storing data structures known as maps.

Books

2023-05-07 A Programmer's Introduction to Mathematics

image-20230702155147644

Azure Active Directory

2023-06-29 Demystifying OAuth, JWTs and Azure AD - Graeme Foster - NDC Oslo 2023 - YouTube

Good video by Graeme Foster about how AAD OAuth works with demos. Video starts from 16:50

Emacs

2023-07-02 p3r7/awesome-elisp: 🏵️ A curated list of Emacs Lisp development resources

Awesome List

image-20230702150855336

TypeScript

2023-07-02 The Concise TypeScript Book (Free and Open Source) by Simone Poggiali

image-20230702150659219

CSharp

2023-06-29 Performance tricks I learned from contributing to open source .NET packages - Daniel Marbach - YouTube

danielmarbach/PerformanceTricksAzureSDK: Performance tricks I learned from contributing to the Azure .NET SDK github repository for this talk.

LINQ TO COLLECTION-BASED OPERATIONS

  • Use Array.Empty<T>() to represent empty arrays
  • Use Enumerable.Empty<T> to represent empty enumerables
  • Prevent collections from growing

HOW TO DETECT ALLOCATIONS?

  • Use memory profilers and watch out for excessive allocations of *__DisplayClass* or various variants of Action* and Func*

  • Use tools like Heap Allocation Viewer (Rider) or Heap Allocation Analyzer (Visual Studio)

  • Avoid excessive allocations to reduce the GC overhead

  • Think at least twice before using LINQ or unnecessary enumeration on the hot path

  • Be aware of closure allocations

  • Pool and re-use buffers

  • For smaller local buffers, consider using the stack

  • Be aware of parameter overloads

  • Where possible and feasible use value types but pay attention to unnecessary boxing

  • Move allocations away from the hot-path where possible

  • C# 9 - Improving performance using the SkipLocalsInit attribute - Meziantou's blog

C++

2023-06-24 👃 60 terrible tips for a C++ developer

60 Dirty tips for dirty developers ;)

... and the list goes on and on

2023-06-24 Make your programs run faster by better using the data cache - Johnny's Software Lab

It covers the following topics and tips:

  • The concept and importance of cache memory and how it compensates for the difference in speed between processor and main memory.
  • The principles of temporal and spatial locality, which govern the behavior of real-world programs and affect the cache performance.
  • The tips and rules for better exploiting the data cache in different scenarios, such as:
    • Using arrays of classes or structs instead of values, to increase the cache utilization and reduce the cache misses.
    • Aligning the starting address of the array and the class data to the cache line size, to avoid splitting the data across multiple cache lines and to optimize the cache access.
    • Performing loop interchange on matrices, to move the loop over the innermost position and to eliminate column-wise accesses, which are costly for the cache.
    • Avoiding padding in classes and structs, to make sure they are correctly aligned and to reduce the cache overhead.
    • Sorting the variables in the declaration of the classes by size from largest to smallest, to guarantee that the compiler will not insert any padding and to optimize the cache access.
  • The tools and references available to help with the data cache optimization, such as pahole and StuctLayout, which can help with exploring and visualizing the paddings in the classes.

2023-06-15 ReactiveX/RxCpp: Reactive Extensions for C++

2023-06-14 Text Editor Data Structures - invoke::thought() - Cameron DaCamara

In The Beginning…

I am a strong believer in “experiment and get things working as fast as possible”—essentially, a fail fast mentality. This is not to say that your first pass should ignore optimization, and I refuse to pessimize my code. That said, I started from the simplest possible representation of a text file to start: a giant string.

There are some pretty great properties of having a single string as your text buffer:

  1. It is the most compact possible representation.
  2. The algorithms for insertion and removal are simple.
  3. It is very friendly to the rendering process because you can slice up the string into views which can be independently rendered without additional allocation.
  4. Did I mention it is simple?

Here’s a short example of insertion and deletion:

image-20230702152940627

C

1993 ⭐ Object-oriented Programming with ANSI-C (1993) [pdf]

Retro document! but very well written

image-20230629003429585

2023-06-14 Leo Robinovitch @ The Leo Zone

image-20230629004711183

2023-07-01 Few lesser known tricks, quirks and features of C

There are some tricks, quirks and features (some quite fundamental to the language!) which seems to throw even experienced developers off the track. Thus I did a sloppy job of gathering some of them in this post (in no particular order) with even sloppier short explanations and/or examples (or quote of thereof).

2023-06-30 Structures in C: From Basics to Memory Alignment – Abstract Expression

Structures allow us to combine several variables to create a new data type. Some other languages support the same concept but call it “records”. If you come from object-oriented programming you can think about them as classes without methods.

image-20230702152138229

SIMD

2023-07-02 Parsing time stamps faster with SIMD instructions – Daniel Lemire's blog

Standard:

#include <time.h>
#include <stdio.h>
int main() {
char buffer[15];
struct tm timeinfo;
time_t rawtime;
time(&rawtime);
gmtime_r(&rawtime, &timeinfo);
size_t len = strftime(buffer, 15, "%Y%m%d%H%M%S", &timeinfo);
buffer[14] = '\0';
puts(buffer);
}

SIMD:

 __m128i v = _mm_loadu_si128((const __m128i *)date_string);
v = _mm_sub_epi8(v, _mm_set1_epi8(0x30));
__m128i limit =
_mm_setr_epi8(9, 9, 9, 9, 1, 9, 3, 9, 2, 9, 5, 9, 5, 9, -1, -1);
__m128i abide_by_limits = _mm_subs_epu8(v, limit); // must be all zero
const __m128i weights = _mm_setr_epi8(
10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 0, 0);
v = _mm_maddubs_epi16(v, weights);
__m128i limit16 =
_mm_setr_epi16(99,99, 12, 31, 23, 59, 59, -1);
__m128i abide_by_limits16 = _mm_subs_epu16(v, limit16);
__m128i limits = _mm_or_si128(abide_by_limits16,abide_by_limits);
if (!_mm_test_all_zeros(limits, limits)) {
return false;
}
instructions per stamptime per stamp
standard C with strptime70046
SIMD approach657.9

Rust

2023-06-16 Effective Rust

Effective Rust

35 Specific Ways to Improve Your Rust Code

David Drysdale

image-20230629004251225

Security

2023-06-12 Desktop Linux Hardening | PrivSec - A practical approach to Privacy and Security

image-20230702153430958

ToC

Projects

2023-06-23 Style your RSS feed

RSS is not dead. It is not mainstream, but it's still a thriving protocol, especially among tech users. However, many people do not know what RSS feeds are or how to use them. Most browsers render RSS as raw XML files, which doesn't help users understand what it's all about...

2023-06-15 TypeCell Notebooks

TypeCell is an open source Typescript live programming environment.

Running code has never been easier :)

this is what I was looking for

2023-06-15 TypeCellOS/TypeCell

2023-07-01 Announcing Hurl 4.0.0

Hurl is a command line tool powered by curl, that runs HTTP requests defined in a simple plain text format:

GET https://example.org/api/tests/4567

HTTP 200
[Asserts]
header "x-foo" contains "bar"
certificate "Expire-Date" daysAfterNow > 15
jsonpath "$.status" == "RUNNING" # Check the status code
jsonpath "$.tests" count == 25 # Check the number of items
jsonpath "$.id" matches /\d{4}/ # Check the format of the id

image-20230702151808375

2023-06-30 Introduction - mdBook Documentation

mdBook is a command line tool to create books with Markdown. It is ideal for creating product or API documentation, tutorials, course materials or anything that requires a clean, easily navigable and customizable presentation.

  • Lightweight Markdown syntax helps you focus more on your content
  • Integrated search support
  • Color syntax highlighting for code blocks for many different languages
  • Theme files allow customizing the formatting of the output
  • Preprocessors can provide extensions for custom syntax and modifying content
  • Backends can render the output to multiple formats
  • Written in Rust for speed, safety, and simplicity
  • Automated testing of Rust code samples

This guide is an example of what mdBook produces. mdBook is used by the Rust programming language project, and The Rust Programming Language book is another fine example of mdBook in action.

Who wrote this?

2023-06-11 I Created Clippy - YouTube

2023-07-02 kevan atteberry

This guy made a monster! Just kidding, Clippy will be awesome! The character is there, now it needs AI! #ms

2023-06-11 Inside Task Manager with the Original Author - YouTube

2023-07-02 Dave's Garage - YouTube

How Task Manager was born, how it works, and insider secrets to using it! For information on my book, "Secrets of the Autistic Millionaire": https://amzn.to/3diQILq #ms 2023-06-11 How To Launch Nuclear Missile - YouTube

Workplace

2023-07-01 Leveling Up in Job Interviews for Software Engineers

2023-07-02 How you can ~1.5x your salary through negotiation

Videos

2023-06-26 Email vs Capitalism, or, Why We Can't Have Nice Things - Dylan Beattie - NDC Oslo 2023 - YouTube

Dylan is amazing speaker ;) fun conversation about the history of email, current limitations and how it works.

2023-06-17 Don't Talk to the Police - YouTube

I saw it years ago! I remember this video.

image-20230629004031212

· 11 min read

Good Reads

2023-06-05 Anything can be a message queue if you use it wrongly enough - Xe Iaso

image-20230608155314182

Dependency Injection

2023-06-07 Dependency Injection

image-20230608155040126

2023-06-07 Dependency Injection Design Pattern in C# - Dot Net Tutorials

image-20230608155111606

2023-06-07 Dependency injection - .NET | Microsoft Learn

image-20230608155152188

2023-06-02 The work is never just “the work” | Dave Stewart

Last year I took on what seemed like a short, easy-to-deliver project, which over the course of a year turned into the kind of “night of the living dead” slog and because of a variety of factors has never been easy to estimate.

With the latest phase finally delivered, I wanted to conduct a detailed postmortem to understand why my perception of the actual work was so off, and in the process reevaluate everything I know about assumptions and estimation.

In the rest of the article I’ll deep dive my own shortcomings around estimation, as well as present a framework to plan and visualise estimates, hopefully helping both of us clear those lurking feelings of confusion and guilt.

Table of contents:

image-20230608161215972

2023-05-30 Factories in Space - Making products for Earth and space

Introduction to in-space manufacturing, in-space economy and alternatively new space economy. Related fields include microgravity services, space resources, in-space transport services, orbital economy, cislunar economy, Moon & Mars economies and dozens more.

Overview of commercial microgravity applications. Both for terrestrial use and in-space use. Listing and analysing potential business opportunities to make unique profitable materials and products in microgravity.

Factories in Space is the largest public database of companies active in the emerging in-space economy and in-space manufacturing fields.

image-20230608161812944

How the things work

2023-06-04 🔨 GPS – Bartosz Ciechanowski

Global Positioning System is, without a doubt, one of the most useful inventions of the late 20th century. It made it significantly easier for ships, airplanes, cars, and hikers to figure out where they are with high degree of accuracy.

One of the most exciting aspects of this system are the satellites surrounding Earth. Here’s a current constellation of active satellites, you can drag the view around to see it from different angles:

image-20230608160152904

2023-06-03 The Pluto Scarab — Hash Functions

Hash Functions

Hash functions are functions that map a bit vector to another bit vector, usually shorter than the original vector and usually of fixed length for a particular function.

There are three primary uses for hash functions:

  1. Fast table lookup
  2. Message digests
  3. Encryption

Fast Table Lookup

Fast table lookup can be implemented using a hash function and a hash table. Elements are found in the hash table by calculating the hash of the element’s key and using the hash value as the index into the table. This is clearly faster than other methods, such as examining each element of the table sequentially to find a match.

Message Digests

Message digests allow you to compare two large bit vectors and quickly determine if they are equal. Instead of comparing the vectors bit-by-bit, if the hash values of each bit vector are available you can compare the hash values. If the hash values are different, the original vectors must be different. If the hash values are the same then the original vectors are very likely to be the same if the hash function is good.

Message digests can use either cryptographic or non-cryptographic hash functions. If the purpose of the message digest is to determine if the original message has been tampered with, you would need to use a cryptographic hash function. If you just want to quickly tell if it’s the same as another file with a different name (assuming the hash values have already been computed), you can use a non-cryptographic hash function.

Encryption

Encryption is the transformation of data into a form unreadable by anyone without a secret decryption key. Hash functions play an important role in encryption because it is their properties that cause the encrypted data to be unreadable and the original data to be unrecoverable from the encrypted data without the decryption key.

image-20230608160538570

Fun

2023-06-02 Fold 'N Fly » Paper Airplane Folding Instructions

image-20230608160715423

Mental Health

2023-05-15 Taxonomy of procrastination

ADHD and procrastination

What I’d like to understand is: Is there a failure mode from having too much willpower?

There’s an angle on this that seems promising at first. People who have ADHD have “low willpower”. This is claimed to be a result of some kind of dopamine (or norepinephrine) dysfunction—either producing too little, or having low-sensitivity receptors. So is there a problem associated with having “too much” dopamine? Perhaps yes—the dopamine hypothesis is that an overly sensitive dopamine system (or taking lots of meth) causes schizophrenia.

As a cartoon, we might think that:

LOW DOPAMINE ↓ LOW CONFIDENCE IN PREDICTIONS ↓ FORGET HOMEWORK PLAY VIDEO GAMES

And:

HIGH DOPAMINE ↓ EXTREME CONFIDENCE IN PREDICTIONS ↓ HALLUCINATIONS

Nice theory, right? Trouble is, people with ADHD are also much more likely to develop schizophrenia. So this doesn’t make sense, nothing makes sense.

The Era of AI

2023-06-07 Why AI Will Save The World - Marc Andreessen Substack

In our new era of AI:

  • Every child will have an AI tutor that is infinitely patient, infinitely compassionate, infinitely knowledgeable, infinitely helpful. The AI tutor will be by each child’s side every step of their development, helping them maximize their potential with the machine version of infinite love.

  • Every person will have an AI assistant/coach/mentor/trainer/advisor/therapist that is infinitely patient, infinitely compassionate, infinitely knowledgeable, and infinitely helpful. The AI assistant will be present through all of life’s opportunities and challenges, maximizing every person’s outcomes.

...

2023-06-05 GPT best practices - OpenAI API

Strategy: Write clear instructions

Tactic: Include details in your query to get more relevant answers

In order to get a highly relevant response, make sure that requests provide any important details or context. Otherwise you are leaving it up to the model to guess what you mean.

WorseBetter
How do I add numbers in Excel?How do I add up a row of dollar amounts in Excel? I want to do this automatically for a whole sheet of rows with all the totals ending up on the right in a column called "Total".
Who’s president?Who was the president of Mexico in 2021, and how frequently are elections held?
Write code to calculate the Fibonacci sequence.Write a TypeScript function to efficiently calculate the Fibonacci sequence. Comment the code liberally to explain what each piece does and why it's written that way.
Summarize the meeting notes.Summarize the meeting notes in a single paragraph. Then write a markdown list of the speakers and each of their key points. Finally, list the next steps or action items suggested by the speakers, if any.

2023-04-17 Understanding Large Language Models - by Sebastian Raschka

image-20230608162353839

Projects

2023-06-08 axodox/axodox-machinelearning: This repository contains a C++ ONNX implementation of StableDiffusion.

(Windows Only)

This repository contains a fully C++ implementation of Stable Diffusion-based image synthesis, including the original txt2img, img2img and inpainting capabilities and the safety checker. This solution does not depend on Python and runs the entire image generation process in a single process with competitive performance, making deployments significantly simpler and smaller, essentially consisting a few executable and library files, and the model weights. Using the library it is possible to integrate Stable Diffusion into almost any application - as long as it can import C++ or C functions, but it is most useful for the developers of realtime graphics applications and games, which are often realized with C++.

2023-06-08 axodox/unpaint: A simple Windows App for generating AI images with stable diffusion.

2023-06-04 This Site is no longer Solar Powered... For Now | Andrew JV Powell

2023-06-04 We are now Solar Powered | Andrew JV Powell

Oh no!

image-20230608155824844

2023-06-03 wader/fq: jq for binary formats - tool, language and decoders for working with binary and text formats

image-20230608160248445

2023-06-02 adamritter/fastgron: High-performance JSON to GRON (greppable, flattened JSON) converter

2023-06-02 Sharing WebSocket Connections between Browser Tabs and Windows | Bright Inventions

2023-06-02 How to draw any regular shape with just one JavaScript function | MDN Blog

2023-05-04 GitHub - taviso/123elf: A native port of Lotus 1-2-3 to Linux.

2023-04-18 JSLinux

Windows 2000

2023-04-18 atrosinenko/qemujs: Qemu.js source code with proof-of-concept machine-code-to-WASM JIT.

2023-05-16 robdelacruz/lkwebserver: Little Kitten Webserver

Little Kitten Web Server

A little web server written in C for Linux.

  • No external library dependencies
  • Single threaded using I/O multiplexing (select)
  • Supports CGI interface
  • Supports reverse proxy
  • lklib and lknet code available to create your own http server or client
  • Free to use and modify (MIT License)

C++

2023-06-07 Modern Image Processing Algorithms Overview & Implementation in C/C++

Implementing modern image processing algorithms in C requires a solid understanding of image representation, data structures, and algorithmic concepts. Uncompressed image data are typically stored as matrices or multidimensional arrays, with each element representing a pixel's intensity or color value. C provides the necessary tools to access and manipulate individual pixels efficiently, making it ideal for algorithm implementation. Most of the algorithms featured here except the patented SIFT & SURF are already implemented in the open source, embedded, computer vision library SOD, and already in production use here at PixLab or FACEIO.

image-20230608154148144

2023-04-18 Geometry Central

Geometry-central is a modern C++ library of data structures and algorithms for geometry processing, with a particular focus on surface meshes.

Features include:

  • A polished surface mesh class, with efficient support for mesh modification, and a system of containers for associating data with mesh elements.
  • Implementations of canonical geometric quantities on surfaces, ranging from normals and curvatures to tangent vector bases to operators from discrete differential geometry.
  • A suite of powerful algorithms, including computing distances on surface, generating direction fields, and manipulating intrinsic Delaunay triangulations.
  • A coherent set of sparse linear algebra tools, based on Eigen and augmented to automatically utilize better solvers if available on your system.

SIMD

2023-06-02 Cornell Virtual Workshop: SIMD Parallelism

SIMD stands for "Single Instruction Multiple Data," and is one of several approaches to parallelism found in modern high-performance computing.

Vector instructions are a primary example of SIMD parallelism in modern CPUs. For instance, the vector add instruction is a single instruction (add) that acts on multiple data (vectors) to yield a vector of sums. Given the two vectors (1, 2, 3, 4) and (5, 6, 7, 8), the vector result (6, 8, 10, 12) is produced in a single operation. This operation is illustrated in the diagram and linked video below.

image-20230608160855199

WebGPU

2023-05-04 cohost! - "I want to talk about WebGPU"

image-20230608162813856

WebGPU is the new WebGL. That means it is the new way to draw 3D in web browsers. It is, in my opinion, very good actually. It is so good I think it will also replace Canvas and become the new way to draw 2D in web browsers. In fact it is so good I think it will replace Vulkan as well as normal OpenGL, and become just the standard way to draw, in any kind of software, from any programming language. This is pretty exciting to me. WebGPU is a little bit irritating— but only a little bit, and it is massively less irritating than any of the things it replaces.

image-20230608162731777

Seattle

2023-06-07 Free apps and online maps for walking tours of Seattle - Greater Seattle on the Cheap

image-20230608154629268

Offline docs

2023-06-01 freeCodeCamp/devdocs: API Documentation Browser

2023-06-08 DevDocs API Documentation

image-20230608161536705

· 11 min read

image-20230528164321688

2023-05-28 Ditherpunk — The article I wish I had about monochrome image dithering — surma.dev

image-20230528163845673

Good Reads

2023-05-28 zakirullin/cognitive-load: 🧠 Cognitive Load Developer's Handbook

Cognitive load

Cognitive load is how much a developer needs to know in order to complete a task.

We should strive to reduce the cognitive load in our projects as much as possible.

The average person can hold roughly four facts in working memory. Once the cognitive load reaches this threshold, a significant effort is required to understand things.

*Let's say we've been asked to make some fixes to a completely unfamiliar project. We were told that a really smart developer had contributed to it. Lots of cool technologies, fancy libraries and trendy frameworks were used. In other words, the previous author had a high cognitive load in his head, which we are yet to recreate.*

image-20230528163230728

Inheritance nightmare

We're tasked to change a few things for our admin users: 🧠

AdminController extends UserController extends GuestController extends BaseController

Ohh, part of the functionality is in BaseController, let's have a look: 🧠+ Basic role mechanics got introduced in GuestController: 🧠++ Things got partially altered in UserController: 🧠+++ Finally we're here, AdminController, let's code stuff! 🧠++++

Oh, wait, there's SuperuserController which extends AdminController. By modifying AdminController we can break things in the inherited class, so let's dive in SuperuserController first: 🤯

Prefer composition over inheritance. We won't go into the details - there are plenty of articles on the subject.

Complicated if statements

if val > someConstant // 🧠+
&& (condition2 || condition3) // 🧠+++, prev cond should be true, one of c2 or c3 has be true
&& (condition4 && !condition5) { // 🤯, we're messed up here
...
}

Introduce temporary variables with meaningful names:

isValid = var > someConstant
isAllowed = condition2 || condition3
isSecure = condition4 && !condition5
// 🧠, we don't need to remember conditions, there are descriptive variables
if isValid && isAllowed && isSecure {
...
}

2023-05-28 Modern work requires attention. Constant alerts steal it - Stack Overflow Blog We often describe working with focused attention as a flow state. As described in the book Flow: The Psychology of Optimal Experience by Mihaly Csikszentmihalyi, a flow state allows one to become fully engaged and focused on the task at hand. It leads to better results and greater happiness. But it can only happen when you have the attention to focus fully on whatever it is that lies before you. Why can’t we focus at work? The contemporary workspace, whether in-person or remote, is full of demands on your attention. We have chat programs, email inboxes, and project management apps all throwing notifications our way. In offices, you have other people tapping you on the shoulder and creating general noise (and woe betide those in open offices). Working remotely avoids some of these, but places the entire communication burden on chat and email applications with their little red notifications. These apps promise asynchronous communications, but that doesn’t always happen in practice.

2023-05-24 How to start a Go project in 2023 | Ben E. C. Boyter

I previously wrote about starting a Go project in 2018. A lot has changed since I wrote that and I had been wanting to write an updated version. What follows should be enough for anyone new to Go to get started and ideally start them being productive.

Quick links:

2023-05-24 google/comprehensive-rust: This is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust to everyone.

This repository has the source code for Comprehensive Rust 🦀, a multi-day Rust course developed by the Android team. The course covers all aspects of Rust, from basic syntax to generics and error handling. It also includes deep dives on Android, bare-metal, and concurrency.

Fun

2023-05-26 The Fastest Maze-Solving Competition On Earth - YouTube

image-20230528164810343

The Era of AI

image-20230528164106815

2023-05-28 👃 imartinez/privateGPT: Interact privately with your documents using the power of GPT, 100% privately, no data leaks

Run GPT on your local machine!

Ask questions to your documents without an internet connection, using the power of LLMs. 100% private, no data leaves your execution environment at any point. You can ingest documents and ask questions without an internet connection! The supported extensions are:

  • .csv: CSV,
  • .docx: Word Document,
  • .doc: Word Document,
  • .enex: EverNote,
  • .eml: Email,
  • .epub: EPub,
  • .html: HTML File,
  • .md: Markdown,
  • .msg: Outlook Message,
  • .odt: Open Document Text,
  • .pdf: Portable Document Format (PDF),
  • .pptx : PowerPoint Document,
  • .ppt : PowerPoint Document,
  • .txt: Text file (UTF-8),

2023-05-26 #002 - Donald Trump • The Joe Rogan AI Experience

Disclaimer: This video depicts a fictional podcast between Joe Rogan and Donald Trump, with all content generated using AI language models. The ideas and opinions expressed in the podcast are not reflective of the thoughts of Joe Rogan or Donald Trump. The content portrayed in this video is purely for entertainment purposes

image-20230528164943445

2023-05-13 upscayl/upscayl: 🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy.

Upscayl lets you enlarge and enhance low-resolution images using advanced AI algorithms. Enlarge images without losing quality, it's almost like magic!

image-20230528172155972

2023-05-06 🎨 nadermx/backgroundremover: Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source.

BackgroundRemover is a command line tool to remove background from image and video using AI, made by nadermx to power https://BackgroundRemoverAI.com. If you wonder why it was made read this short blog post.

image-20230528172101528

2023-05-29 FastStone Image Viewer, Screen Capture, Photo Resizer ...

Not an AI, but helps a lot with managing Stable Diffusion results

image-20230528172353739

Projects

2023-05-28 BlockNote - Javascript Block-Based text editor | BlockNote

A beautiful text editor that just works. Easily add an editor to your app that users will love. Customize it with your own functionality like custom blocks or AI tooling.

image-20230528163701665

Podcasts

- 🙊 2023-05-26 Podcast – You Are Not So Smart

image-20230528165130113

- 🙊 2023-05-26 All Podcasts | Manager Tools

image-20230528165206461

Work

2023-05-28 Ask HN: Engineering managers, how do you onboard new hires? | Hacker News

avinassh

  1. A week before their joining, we ship the laptop
  2. I'd have a calendar ready for them, which gives an overview of what they will be doing for the next three months
  3. First week goes into setting up the tooling on the machine. Someone from the product team gives an overview and entire product walkthrough. Next, they spend some to play with the product as a user. This week also involves the initial orientation session.
  4. We use Golang heavily, however, the people joining might not know it. The second week goes into doing the tour of Go.
  5. Third week they spend on onboarding tutorial that shows how to write a small service, generate APIs, build, and deploy it in our infra.
  6. Fourth week they will spend shipping a really small feature to the production.
  7. Since day one, they'd have assigned a buddy who becomes their go-to person. Buddy also explains them about the culture, how things typical done here etc. The buddy also creates a new slack channel just for them, where they can interact.
  8. They pair with the buddy in the initial weeks, where buddy is the driver.
  9. First three months, they'd spend working on a feature along with someone which also involves some good amount of pair programming.

Tehnix

  • Before you start we send an onboarding plan: As detailed as we can for the first 7 days (e.g. onboarding call, intro to this or that, pairing up with another Engineer), and much more high-level of expectations after 30 days and after 3 months

  • Everyone has an "onboarding buddy": This is an Engineer on their team and makes sure the other Engineer feels like it's their responsibility to spend time getting the new Engineer up-to-speed

  • If you're fully remote we try to fly you into our HQ (Copenhagen, Denmark) for the first week. We've had overwhelmingly good feedback on how big of a difference this makes in establishing connections and making people feel a lot more comfortable with the colleagues much earlier on.

  • We focus on giving you a lot of context initially: The organization, the team and their purpose, meeting up with your manager weekly so they can fill in the gaps continuously, intro to the overall tech infrastructure

  • We dive into the specifics via work: Finding smaller projects that are well scoped to get you into the various corners of the teams' domain

  • We knowledge share a lot via PR Reviews: Onboardees always add two people on the PRs to maximize knowledge sharing over speed initially. After a month or two they go down to just the regular 1 person and they themselves also start reviewing code

  • From then on: We freestyle, but have a continuous focus on learning. At this point, people are so unique and varied that we adjust on to their learning style, gaps, etc.

Everyone in the team is quite communicative. One thing we explicitly focus on is for new people to get comfortable asking in public channels instead of via DMs. This comes naturally to some, but not to others and they need some nudging and you showing off how its safe to do.

There's many more things we do, but those are some of the important parts of the top of my head :)

EDIT: Some context around our environment. We have our own CLI tool to quickly setup a dev environment as well as using GitHub Codespaces as a fallback. There's strong coverage of CI for checking everything is good, and things are deployed very often. We try to automate most of our flows, at least as much as we can to keep friction low, but also to minimize "things you need to just know".

C

2023-05-25 xorvoid

SectorC: A C Compiler in 512 bytes

SectorC (github) is a C compiler written in x86-16 assembly that fits within the 512 byte boot sector of an x86 machine. It supports a subset of C that is large enough to write real and interesting programs. It is quite likely the smallest C compiler ever written.

2023-05-22 Memory Allocation

One thing that all programs on your computer have in common is a need for memory. Programs need to be loaded from your hard drive into memory before they can be run. While running, the majority of what programs do is load values from memory, do some computation on them, and then store the result back in memory.

In this post I'm going to introduce you to the basics of memory allocation. Allocators exist because it's not enough to have memory available, you need to use it effectively. We will visually explore how simple allocators work. We'll see some of the problems that they try to solve, and some of the techniques used to solve them. At the end of this post, you should know everything you need to know to write your own allocator.

image-20230528170203659

Research on RSS readers

I haven't found the one that I like yet.

2023-05-26 Tiny Tiny RSS

2023-05-26 yang991178/fluent-reader: Modern desktop RSS reader built with Electron, React, and Fluent UI

2023-05-26 stringer-rss/stringer: A self-hosted, anti-social RSS reader.

2023-05-26 👃 Athou/commafeed: Google Reader inspired self-hosted RSS reader.

Talks

2023-05-22 Developer Tools That Shouldn't Be Secrets Christian Heilmann GOTO 2022 - YouTube

image-20230528170557079

Slides 2023-05-22 More devtools secrets Console.log to show variable name in the output, instead of console.log(x), put curly braces console.log({x}) so the output will be an object with one property.

2023-05-22 Dear Console,… - a collection of code snippets to use in the browser console

image-20230528170512157

See ya!

· 6 min read

image-20230521155535651

Good reads

2023-05-21 Why is OAuth still hard in 2023? | Nango Blog

Which parameters do they require in the authorize call?

  • For Jira, the audience parameter is key (and must be set to a specific fixed value). Google prefers to handle this through different scopes but really cares about the prompt parameter. Meanwhile, somebody at Microsoft discovered the response_mode parameter and demands that you always set it to query.

Problem 1: The OAuth standard is just too big and complex

Problem 2: Everybody’s OAuth is different in subtle ways

Problem 3: Many APIs add nonstandard extensions to OAuth

Problem 4: “invalid_request” — debugging OAuth flows is hard

Problem 5: Cumbersome approvals to build on top of APIs

Problem 6: OAuth security is hard and a moving target

As attacks have been uncovered, and the available web technologies have evolved, the OAuth standard has changed as well. If you’re looking to implement the current security best practices, the OAuth working group has a rather lengthy guide for you. And if you’re working with an API that is still using OAuth 1.0a today, you realize that backwards compatibility is a never-ending struggle.

Luckily, security is getting better with every iteration, but it often comes at the cost of more work for developers. The upcoming OAuth 2.1 standard will make some current best practices mandatory and includes mandatory PKCE (today only a handful of APIs require this) and additional restrictions for refresh tokens.

2023-04-24 🍏 Some mistakes I made as a new manager

I had an unusually hard time becoming a manager: I went back and forth three times before it stuck, mostly because I made lots of mistakes each time. Since then, as I had to grow my team and grow other folks into managing part of it, I’ve seen a lot of other people have varying degrees of a rough time as well—often in similar ways.

Three strategies helped me through it:

  • I was open with my manager when I was feeling down—sometimes I’d even explicitly ask him for a pep talk. Because he had a higher-level, longer-term perspective and had been a manager for longer, he was often able to point out ways I was having a big impact without noticing.
  • I asked people for feedback. I found that if I just asked “do you have any feedback for me?” people often wouldn’t, but if I asked more granular questions—“was that meeting useful?”—I would usually learn a lot from it. (See also § angsting.)
  • I built up other sources of fun and validation. For a long time, my work was the primary thing that helped me feel good about myself. Diversifying that to include more of friends, relationships, hobbies, Twitter likes, etc. smoothed out the ups and downs.

2023-04-06 C Strings and my slow descent to madness - by Diego Crespo

image-20230521163258690

2023-05-18 User Driven UI

From the author of Juice! We use software to solve a problem. When someone chooses a new software product. Instead of solving their problem, we give them another. To learn the UI (User Interface). If the software is at a certain level of complexity, new users will only learn parts of it or not use it at all.

image-20230521164105204

Fun

2023-05-21 Space Elevator

image-20230521161143791

2023-04-19 Water3D

image-20230521161324067

2023-04-19 The Man Who Lives In A Clock - YouTube

image-20230521161631545

2023-04-16 💗 Cheat Sheet - Cube Tutorial

This page is a summary of all the steps and algorithms on one page. Only the algorithms are listed here without any explanation. It is intended as a quick reference when you just need a reminder on the algorithms to solve the cube. Visit the previous pages for detailed descriptions.

image-20230521162403558

C++

2023-05-21 Introduction - Learn WebGPU for C++ documentation

image-20230521160311709

C#

2023-04-16 5 useful extensions for Task T in .NET

Fire and forget

public static void FireAndForget(
this Task task,
Action<Exception> errorHandler = null)
{
task.ContinueWith(t =>
{
if (t.IsFaulted && errorHandler != null)
errorHandler(t.Exception);
}, TaskContinuationOptions.OnlyOnFaulted);
}

Retry

var result = await (() => GetResultAsync()).Retry(3, TimeSpan.FromSeconds(1));

OnFailure

await GetResultAsync().OnFailure(ex => Console.WriteLine(ex.Message));
  1. Timeout
await GetResultAsync().WithTimeout(TimeSpan.FromSeconds(1));
  1. Fallback
var result = await GetResultAsync().Fallback("fallback");

Mental Health

2023-04-24 Opening up about my ADHD. Diagnosed at 34, I hope my story can… | by Kyle Gordon | Medium

It would be a mistake to write a blog about ADHD without having a summary at the beginning. I know I would need one. So here it is :

I’ve always had focus issues but I misdiagnosed them as problems related to energy. Through school and career I found that the only reliable way for me to motivate myself was to generate stress and consume an unhealthy amount of caffeine. At first doing work just before it’s due, and later in life harnessing it in a more healthy manner by faking early deadlines. Late 2021 I got sick and I couldn’t drink caffeine anymore and stress caused me a good deal of pain. Thought my career was over, so I turned to my doctor and she sent me to be evaluated for ADHD and Bipolar. Turns out I have ADHD and the medication has given me a new lease on life. Please, if you relate to my story at all, pursue help.

2023-04-18 GitHub - Fillyosopher/Reading-Helper: A dead-simple Bookmarklet and Chrome Extension implementation of something like Bionic Reading

image-20230521161754590

Work

2023-04-25 👷‍♀️ derwiki/layoff-runbook

Layoff Runbook

Being laid off can be overwhelming and it's easy to miss important tasks. This runbook will help make sure you stay on track.

image-20230521160427477

Other?

2023-04-13 The Car Mechanics Video Course from How a Car Works

image-20230521163140730

Talks

2023-05-20 Code Red: The Business Impact of Code Quality • Adam Tornhill • GOTO 2022 - YouTube

May the code be with you

2023-05-20 Engineering Documentation • Lorna Jane Mitchell • GOTO 2022 - YouTube

2023-05-20 Diátaxis

2023-05-20 Vale.sh - A linter for prose

· 9 min read

image-20230519222354132

Good Reads

2023-05-13 Story: Redis and its creator antirez

image-20230519220434419

n the world of databases, Redis stands out as unique. Instead of the usual tables or documents that are the central focus of most databases, with Redis, you interact directly with low-level data structures such as linked lists and hash tables.

This is all thanks to the innovative design of Redis creator Salvatore Sanfilippo, known online as antirez. A master in system programming, antirez prefers to think in terms of data structures like lists, hashes, and sets. The higher-level data representations, such as tables or documents, just didn't suit his taste. When creating Redis, antirez was an amateur in the database field. But perhaps it was this lack of experience that allowed him to bring fresh ideas to the industry.

2023-05-07 Scaling up the Prime Video audio/video monitoring service and reducing costs by 90% - Prime Video Tech

Me: Wow, Amazon, thank you for transparency!

At Prime Video, we offer thousands of live streams to our customers. To ensure that customers seamlessly receive content, Prime Video set up a tool to monitor every stream viewed by customers. This tool allows us to automatically identify perceptual quality issues (for example, block corruption or audio/video sync problems) and trigger a process to fix them.

2023-05-20 Grokking Simplicity: Taming complex software with functional thinking by Eric Normand - Summary & Notes | Christian B. B. Houmann

NOTES ON Grokking Simplicity: Taming complex software with functional thinking by Eric Normand

Immutability

Copy-on-write

Implementing copy-on-write operations can help with immutability.

E.g. for adding items to arrays: slice the array (to copy), push the item to the array copy, and return the copied array.

Then you avoid modifying the original.

The basic steps of implementing copy-on-write are:

  1. Make a copy
  2. Modify copy as you like
  3. Return copy

Using copy-on-write, you convert write operation into read operations - you never modify the original data.

You can generalize most of these operations, so you don't have to implement copy & return every time you wish to modify something. Take for example this removeItems operation, which is the copy-on-write version of splice:

function removeItems(array, idx, count) {
const copy = array.slice();
copy.splice(idx, count);
return copy;
}

How do you make something that both reads and writes copy-on-write? Take Array.shift for example. You can either split the function into read & write, or you can return two values from the function. The former is preferable. shift shifts an array one to the left, i.e. it drops the 0 index element and then returns it. You can imitate the latter part of that operation by simply returning array[0]. You can convert the dropping of the 0th element to copy-on-write quite trivially as well: make a copy, use shift on the copy, and then return the copy.

And this is what the copy-on-write shift operation returning two values would look like:

function shift(array) {
const array_copy = array.slice();
const first = array_copy.shift();
return {first, array: array_copy};
}

2023-04-24 Is Critical Thinking the Most Important Skill for Software Engineers? - The Pragmatic Engineer

I still remember being in a meeting where a Very Respected Engineer was explaining how they are building a project, and they said something along the lines of "and, of course, idempotency is non-negotiable." I didn't know what idempotency was, and thus I could not tell why it was non-negotiable. I looked around, and everyone was nodding: but I knew I was missing something.

Retro

2023-05-20 MyHouse.wad - WAD Releases & Development - Doomworld

Video:

2023-05-20 MyHouse.WAD - Inside Doom's Most Terrifying Mod - YouTube

image-20230519214402784

Original post:

Excited to finally release this tribute map. Last August I lost a good childhood friend of mine and took it pretty hard. When I was visiting my hometown for his funeral, I connected with his parents who shared with me some of his old belongings. Among them was a copy of an old map of his backed up on a 3.5” floppy from high school. Thomas and I were into amateur Doom mapping in the early 00s but I had never seen this map of his prior to uncovering it on one of the old floppy discs. As a way of paying tribute to him and all the great memories we had together, I took the plunge and installed Doom Builder in order to polish up his map and add a few modern amenities just for convenience sake.

Download myhouse.wad

2023-05-20 Street Fighter II, paper trails

image-20230519221418804

2023-04-28 Delphi 11 and C++Builder 11 Community Editions Released!

Great News!

image-20230519223847733

Projects

2023-05-20 Map of GitHub

Apache Spark in Bigdatia!

image-20230519214008555

Thank you, Vu!

2023-05-20 pixpaint

how do I describe this? A very weird paint?

image-20230519215010177

2023-05-07 🚀 Modern CSS Solutions

image-20230519221822276

2023-04-30 Internet in a Box - Mandela's Library of Alexandria

Internet-in-a-Box “learning hotspots” are used in dozens of countries, to give everyone a chance, e.g. in remote mountain villages in India.

It works without internet — like a community fountain, but for the mind — wirelessly serving anyone nearby with a smartphone, tablet or laptop.

Now you too can put the internet in a box and customize it with the very best free content for your school, clinic or family!

image-20230519223605755

The Era of AI

image-20230519220124716

2023-05-20 smol-ai/developer: with 100k context windows on the way, it's now feasible for every dev to have their own smol developer

Human-centric & Coherent Whole Program Synthesis aka your own personal junior developer

Build the thing that builds the thing! a smol dev for every dev in every situation

this is a prototype of a "junior developer" agent (aka smol dev) that scaffolds an entire codebase out for you once you give it a product spec, but does not end the world or overpromise AGI. instead of making and maintaining specific, rigid, one-shot starters, like create-react-app, or create-nextjs-app, this is basically create-anything-app where you develop your scaffolding prompt in a tight loop with your smol dev.

AI that is helpful, harmless, and honest is complemented by a codebase that is simple, safe, and smol - <200 lines of Python and Prompts, so this is easy to understand and customize.

2023-05-15 brexhq/prompt-engineering: Tips and tricks for working with Large Language Models like OpenAI's GPT-4.

2023-05-20 Image Creator from Microsoft Bing

image-20230519220654935

2023-04-26 ➕ Transformers from Scratch

Markov chain transition model

CPP

2023-05-17 cpp-best-practices/cmake_template

"cmake_template" is a C++ Best Practices GitHub template designed for quick C++ project setups. Currently undergoing a major update, it enables Address Sanitizer, Undefined Behavior Sanitizer, treats warnings as errors, and performs static analysis using clang-tidy and cppcheck. It uses CPM for dependencies and provides a basic CLI example, testing examples, and a large Github action testing matrix. It requires cmake and a compiler to use. The project includes a simple usage example of FTXUI, featuring a game.

2023-05-10 DNedic/lockfree: A collection of lock-free data structures written in standard C++11

What are lock-free data structures? Lock-free data structures are data structures that are thread and interrupt safe without having to use mutual exclusion mechanisms. Lock-free data structures are most useful for inter process communication, but due to the efficiency of lockfree, it can safely be used for single threaded uses as well, making it good for general purpose use.

2013-12-25 How to make smaller C and C++ binaries

This blog post presents several techniques to make the binaries resulting from C or C++ compilation smaller with GCC (or Clang). Please note that almost all techniques are tradeoffs, i.e. a smaller binary can be slower and harder to debug. So don't use the techniques blindly before understanding the tradeoffs.

C#

2023-05-20 qgindi/LibreAutomate: C# script editor and automation library for Windows

C# script editor and automation library for Windows.

Some features of the automation library:

  • Automate desktop and web UI using keys, mouse and API. Find and click buttons, links, images.
  • Launch programs. Manage files and windows. Transfer and process text and other data.
  • Hotkeys, autotext and other triggers. Auto-replace/expand text when typing. Auto-close windows. Remap keys.
  • Custom toolbars that can be attached to windows or screen edges. And menus.
  • Custom dialog windows of any complexity can be created easily in code.
  • All classes/functions are documented.
  • The library can be used in other programs too. Can be installed from NuGet.
  • Uses .NET 6. image-20230519221305831

Bash

2023-05-01 ⭐ dylanaraps/pure-sh-bible: 📖 A collection of pure POSIX sh alternatives to external processes.

The goal of this book is to document commonly-known and lesser-known methods of doing various tasks using only built-in POSIX sh features.

What? O_O

2023-05-20 j3s.sh

Why jes pets every cat?

image-20230519220000643

2023-05-07 Click 😶 (https://clickclickclick.click/)

Click.

image-20230519222509298

2023-05-03 Eyecandy - Visual Technique Library

image-20230519222917445

Talks

2023-05-07 Migrations - The Hardest Actual Problem in Computer Science • Matt Ranney • YOW! 2022 - YouTube

Using **randomly generated ids** instead of auto-incrementing ones in your database can better protect your data from unauthorized access. Auto-incrementing ids can be easily exposed and guessed, allowing access to your authorization system. This can potentially give competitors insight into your user and order numbers. Implementing a more secure id generation system is a proactive way to maintain confidentiality.

2023-05-06 3 things I learned from Bill Gates #leadership #leadertok #leadershipd... | TikTok

image-20230519222744523

2023-04-19 Lightning Talk: How to Win at Coding Interviews - David Stone - CppCon 2022 - YouTube

Repeat question and clarify the ambiguity

Write an interface

Use a hashmap ;)

· 11 min read

Good Reads

2023-04-09 How to stop ruminating - by George Sudarkoff

Rumination is when our minds latch onto a story and just won’t let go, going on and on about it. It’s exhausting! Distracting yourself is fairly common advice, but it’s a bit like trying to ignore a splinter. Maybe it’ll get dislodged from your body and get washed down the drain when you’re showering. But until that happens, it keeps reminding you about itself. Worse yet, it might get inflamed and cause more problems down the line.

Here’s a more productive approach that allowed so many of my clients to get lasting relief from rumination:

  1. Pay attention to the triggers.
  2. Examine the stories you’re telling yourself, and identify the cognitive distortions your mind might be employing.
  3. Don’t believe everything you think.
  4. Practice self-compassion.
  5. Realize that it’s a practice.

2023-04-08 How to Design Programs, Second Edition

image-20230413180756782

2023-04-03 How To Do Hard Things - No Small Plans - Every

Russ Harris, author of several popular ACT books, offers a framework of 7 "R"s that can help support action in its early stages:

  • Reminders - using apps, timers, or other means to remind us of the new behavior
  • Records - keeping track of our behavior throughout the day
  • Rewards - giving ourselves positive reinforcement for engaging in a behavior
  • Routines - building the new behavior around an existing daily habit
  • Relationships - finding a friend to do the new behavior with, or who you can talk to about the progress you’re making
  • Reflecting - taking time to reflect on the progress you’re making through journaling, discussion with a friend, or in your mind
  • Restructuring - making changes to the environment to make it easier to do the new behavior – i.e., throwing out unhealthy food or preparing at night for a morning run

2023-04-06 The real "must have" tools for programmers - James Dunne

In no particular order, the best tools for taking care of your mind are:

  1. Quality sleep
  2. Hydration
  3. Exercise
  4. Family and social time
  5. Notebook and pen

How the things work?

2023-04-07 How does database sharding work?

2023-04-07 Database “sharding” came from UO? – Raph's Website image-20230413181213837

2023-04-03 Database Sharding Explained

This article explains what database sharding is, how it works, and the best ways to use it. It also talks about the potential server architectures and data layout. The article is written in a clear and concise manner with examples and comparisons to help readers understand the concept of database sharding better.

image-20230413185111688

2023-04-01 Clocks and Causality - Ordering Events in Distributed Systems

image-20230413183701886

Projects

2023-03-31 🚩 Making an OBS 'Mute' Indicator - Parts Not Included

image-20230413183819265

Tools

2023-04-14 Personal color test-케이테스트

Do it! Very funny!

image-20230413182111917

2023-04-13 Phind: AI search engine

2023-04-13 Show HN: GPT-4-powered web searches for developers | Hacker News

image-20230413174234177

Career advice

2023-04-04 How to be a -10x Engineer

Nullify the output of 10 engineers.

Change requirements as far into development as possible. To avoid blame, obfuscate requirements from the start.

Create 400 hours of busywork.

Ask your team to perform tasks that resemble work. Common examples include presentations, diagrams, and ticket management. Create pointless rituals.

Create 400 hours of burnout/turnover.

Be thankless. Foist blame. Sow confusion. Get angry. Cause others to work overtime.

Hold 10 engineers hostage in a technical discussion.

Let engineers discuss ideas. Encourage them to pursue elegance over pragmatism. Ensure nobody has the authority to make any decisions.

Job / Codding interviews

2023-04-11 yangshun/tech-interview-handbook: 💯 Curated coding interview preparation materials for busy software engineers

2023-04-14 Software Engineer interviews: Everything you need to prepare | Tech Interview Handbook

image-20230413175517858

2023-04-07 👉 trekhleb/javascript-algorithms: 📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings

ADHD

2023-04-07 Comics Dani Donovan: ADHD Comics

image-20230413180953539

2023-04-07 Brain pls work

ADHD-friendly Pomodoro web app image-20230413181054337

2023-04-07 Show HN: ADHD-friendly Pomodoro web app | Hacker News

Web

2023-03-24 Laying Out a Print Book With CSS | Ian G McDowell's Blog

Basic Layout

It still looks like a web-page, it’s time to apply some print conventions. The chapter headings need some room, and maybe a sweet underline. The body text should be a column, with indented paragraphs. That kind of stuff.

A note on my CSS: Yes, I’m all over the place with my units (Inches! Pixels! Points! Ems!), and there’s no rhyme or reason to the order of my declarations. In my defense: it doesn’t matter. I’m not going to prod with this. No one’s going to be stuck maintaining it. And, god willing, I’ll never have to extend it. But you’re welcome to clean it up for use in your own project.

h2 {
text-align: center;
font-family: "Jost";
margin-top: 1.4in;
margin-bottom: .9in;
font-weight: 300;
display: inline-block;
/* Pad box to position the "underline" that's rendered using the border */
padding: 0.1in 0.2in;
border-bottom: 1px solid;
line-height: 1em;
font-size: 15pt;
}

p {
margin:0;
text-indent: 1.5em;
font-size: 12pt;
line-height: 14.3pt;
text-align: justify;
text-justify: inter-word;
word-spacing: -.7px;
}

p:first-child {
text-indent: 0;
}

.chapter {
text-align: left;
}

image-20230413184732342

= C ? C : C++

2023-04-06 C Strings and my slow descent to madness - by Diego Crespo

image-20230413182346735

2023-04-14 🔥 Words and buttons online

Redundant stories about redundancy

Component redundancy is used heavily in safety-critical and mission-critical systems for reliability improvement. But outside this niche, it's surprisingly little known in the world of software. Which is a shame since it's a simple but economical idea. It costs nothing to keep in mind, and it saves you a lot on hotfixes and emergency repairs.

#programming

Challenge your performance intuition with C++ sine

One more interactive quiz. This time, it's all about the sine function. Which one is faster and when?

#programming #quizzes

Yet another alternative to floating-point numbers

This shows how computable intervals written in rational bounds may not only account for the input error but keep computational error under control as well.

#mathematics #programming #quizzes

Why is it ok to divide by 0.0?

This explains why dividing by zero in floating-point numbers is ok.

#mathematics #programming

Error codes are not numbers. But they are. Can we exploit that?

An interactive explanation of how we can use floating-point NaNs as error code holders in C++.

#demos #mathematics #programming

Software

2023-04-14 Software Project Checklist - Hix

Education for free!

2023-03-25 CSE325 Lecture Videos - YouTube

Low-Level C Programming – CSE 325 Lecture Videos

📢 2023-04-13 Ask HN: What are some of the best university courses available online for free? | Hacker News

Herb Gross's ultra-classic old-school chalkboard delivery of "Calculus of Complex Variables, Differential Equations, and Linear Algebra" should not be missed:

https://youtu.be/BOx8LRyr8mU

It turns out he also produced a complete series on the precursor material, "Single Variable Calculus" as well, which I only just now discovered:

https://ocw.mit.edu/courses/res-18-006-calculus-revisited-si...

This professor has a great delivery and a ton of enthusiasm for the subject material, (but you can't just watch it, to absorb it you have to take notes, maybe recreate the examples in Python or something).

MIT's 16.687 - Private pilot ground school. If you want to become a private pilot or start your career, this is the place to begin. The professors are approachable and the content is comprehensive. https://ocw.mit.edu/courses/16-687-private-pilot-ground-scho... all of the videos for the lectures are available on Youtube - https://www.youtube.com/playlist?list=PLUl4u3cNGP63cUdAG3v31...

avinassh 1 day ago | prev | next [] Intro to Database Systems by Andy Pavlo - https://www.youtube.com/watch?v=oeYBdghaIjc&list=PLSE8ODhjZX...MIT 6.824 Distributed Systems by Robert Morris - https://www.youtube.com/watch?v=cQP8WApzIQQ&list=PLrw6a1wE39...

Syllabus and coursework for the database course: https://15445.courses.cs.cmu.edu/fall2022/schedule.html

It looks really good

It looks interesting and relevant!

Edit: link to course planning and labs https://pdos.csail.mit.edu/6.824/schedule.html

"The Making of Modern Ukraine" by Timothy Snyder: https://www.youtube.com/playlist?list=PLh9mgdi4rNewfxO7LhBoz...

As Prof. Snyder mentions in his introductory lecture, it is kind of wild that there are zero other classes, at any American university, focusing specifically on Ukraine given its importance in the current geopolitical climate.

Prof. Snyder is a great lecturer and the dynamics that shape Ukraine are fascinating and useful for understanding European history more broadly.

I really liked The Theoretical Minimum lectures on classical and quantum mechanics by Leonard Susskind (suggestion: google up the guy, he’s cool) at Stanford. You can buy books, but the lectures are all free on YouTube.

Classical mechanics playlist can be found here https://youtube.com/playlist?list=PL47F408D36D4CF129 and then there’s quantum mechanics available too, should be easily discoverable. And also there’s just https://theoreticalminimum.com/

gilbert strang's linear algebra https://youtube.com/playlist?list=PL49CF3715CB9EF31D. he has a few other linear algebra themed courses on there. very good because (1) he’s an incredible teacher, and (2) linear algebra is beautiful

The Science of the Solar System (Planetary Astronomy)

by Caltech Professor Mike "plutokiller" Brown

https://www.coursera.org/learn/solar-system

I really liked this course. Here's the blurb:

Learn about the science behind the current exploration of the solar system in this free class. Use principles from physics, chemistry, biology, and geology to understand the latest from Mars, comprehend the outer solar system, ponder planets outside our solar system, and search for habitability in our neighborhood and beyond. This course is generally taught at an advanced level assuming a prior knowledge of undergraduate math and physics, but the majority of the concepts and lectures can be understood without these prerequisites. The quizzes and final exam are designed to make you think critically about the material you have learned rather than to simply make you memorize facts. The class is expected to be challenging but rewarding.

It is also taught at Caltech, see https://mikebrown.caltech.edu/teaching/science-solar-system

Databases by prof. Widom, from Stanford. Currently the course is at edX, and split into 5 mini-courses. Everything in the course is well thought out and apparently polished and perfected over years of teaching practice and experience. There is nothing useless in the video lectures, and the course homework probes every topic from the lectures.

https://online.stanford.edu/courses/soe-ydatabases-databases

Songwriting, at Coursera, from Berklee College of Music. The guy just sits in a dark room, and explains the process of writing lyrics to songs. He just explains it very well.

https://www.coursera.org/learn/songwriting-lyrics

Financial Markets by Robert Shiller https://oyc.yale.edu/economics/econ-252

Seattle

2023-04-09 Seattle Space Needle Panocam | Space Needle

image-20230413180419206

2023-04-13 Secret Seattle - Your Complete Guide To Things To Do In Seattle

image-20230413184439180

· 9 min read

Good Reads

2023-03-24 Juice

Juice is the non-essential visual, audio & haptic effects that enhance the player's experience. For example, the delightful chimes sound that plays when Mario collects a mushroom. The 1UP text that appears is essential.

image-20230325093907002

2023-03-23 GOTOphobia considered harmful (in C)

The main points of this article are:

  • The fear of using the goto statement in programming is called "gotophobia" and is usually caused by misunderstanding and lack of context.
  • Dijkstra's "go to statement considered harmful" was written in the 60s when goto was the main method of flow control, but now programmers tend to avoid using goto even when it's appropriate.
  • Using goto over short distances with well-documented labels can be more effective, faster, and cleaner than other constructs.
  • The article presents some situations and patterns where goto could be an acceptable choice and discusses goto-less alternatives and their potential drawbacks.

The article:

  • GOTOphobia considered harmful (in C)
  • Resources
  • Error/exception handling & cleanup
  • Restart/retry
  • Less trivial example
  • Common code in switch statement
  • Nested break, labeled continue
  • Simple state machines
  • Jumping into event loop
  • Optimizations
  • Structured Programming with go to Statements

2023-03-18 The Contentious Art of Pull Requests - DEV Community

image-20230325113726597 This article discusses the benefits and downsides of code reviews and pull requests. The author argues that git has greatly improved the code review process, but also acknowledges that developers can be snarky and opinionated. The author shares their own “Pull Request Rules” to help mitigate these downsides, including defining/enforcing code styling in the linter and being cautious when making bold statements on someone’s pull request. See also from this series: Codility === Sadness - DEV Community

2023-02-27 Writing an engineering strategy. Irrational Exuberance

A guide on how to write an effective engineering strategy that aligns with the business goals and communicates clearly to stakeholders.

strategy, strategy, strategy, strat...

Fun / Games

2023-03-25 Floor796

Animated isometric madness

image-20230325112439688

Retro

2023-03-16 After Dark Screensavers in CSS

image-20230325123928664

image-20230325123939176

2023-03-16 Rotating Sandwiches – that's it

And they rotate!

image-20230325124044861

2023-03-16 Lander

Lander, a lunar lander style web game

image-20230325124131127

2023-03-16 Digger

image-20230325124235221

2023-03-25 Wolfenstein 3D

2023-03-16 midzer/wolf4sdl: Emscripten-Port of Wolfenstein 3D and Spear of Destiny

image-20230325124412750

C++

2023-03-24 ww898/utf-cpp: UTF-8/16/32 C++11 header only library for Windows / Linux / MacOs

C++ UTF library with permissive licensing (MIT). Used in Far2L

2023-03-18 CppCon 2018: Bob Steagall “Fast Conversion From UTF-8 with C++, DFAs, and SSE Intrinsics” - YouTube

Slides: 2023-03-18 CppCon2018/Presentations/fast_conversion_from_utf8_with_cpp_dfas_and_sse_intrinsics at master · CppCon/CppCon2018 Code: 2023-03-18 BobSteagall/utf_utils: My work on high-speed conversion of UTF-8 to UTF-32/UTF-16 Bob Steagall's blog: 2023-03-18 The State Machine – All Your C++ Are Belong To Us

C#

2023-03-20 How Async/Await Really Works in C# - .NET Blog

This article provides an in-depth look at the history, design decisions, and implementation details of async/await in C# and .NET.

// To make a method asynchronous, add the 'async' keyword before its return type
// and change its return type to 'Task' or 'Task<T>' if it returns a value of type T
public async Task MyAsyncMethod()
{
// Use the 'await' keyword before calling an asynchronous method
// This will make the method wait for the asynchronous operation to complete
// before continuing execution
await SomeAsyncMethod();

// You can also use 'await' with a Task object
Task myTask = SomeAsyncMethod();
await myTask;

// You can use 'await' in a loop to wait for multiple asynchronous operations
foreach (var item in myCollection)
{
await SomeAsyncMethod(item);
}

// You can use 'Task.WhenAll' to wait for multiple asynchronous operations to complete
Task[] tasks = myCollection.Select(item => SomeAsyncMethod(item)).ToArray();
await Task.WhenAll(tasks);
}

Web

2023-03-18 Create and download text files using JavaScript — Amit Merchant — A blog on PHP, JavaScript, and more

function saveTextAsFile(textToWrite, fileNameToSaveAs, fileType) {
let textFileAsBlob = new Blob([textToWrite], { type: fileType });
let downloadLink = document.createElement('a');
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = 'Download File';

if (window.webkitURL != null) {
downloadLink.href = window.webkitURL.createObjectURL(
textFileAsBlob
);
} else {
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.style.display = 'none';
document.body.appendChild(downloadLink);
}

downloadLink.click();
}

image-20230325114215224

Typescript

2023-03-19 ⭐ Functional Programming with TypeScript - YouTube

image-20230325113234262

GPT Prompts

ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT, ChatGPT,

2023-03-18 f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.

2023-03-18 humanloop/awesome-chatgpt: Curated list of awesome tools, demos, docs for ChatGPT and GPT-3

2023-03-18 yokoffing/ChatGPT-Prompts: ChatGPT and Bing AI prompt curation

2023-03-18 promptslab/Awesome-Prompt-Engineering: This repository contains a hand-curated resources for Prompt Engineering with a focus on Generative Pre-trained Transformer (GPT), ChatGPT, PaLM etc

2023-03-15 A weapon to surpass Metal Gear - Xe Iaso

2023-03-14 cogentapps/chat-with-gpt: An open-source ChatGPT app with a voice

2023-03-14 GPT-4

Copilot prompt samples / cheat sheet

2023-03-01 Using Copilot to review code and fund Open-Source projects : GithubCopilot

A Reddit post that introduces a new project called Copilot Reviewer, which uses GitHub Copilot to automatically generate code reviews and donate the proceeds to open-source projects.

2023-03-01 ❤ Using Copilot to Review Code And Fund Open-Source Projects

You are a senior web developer with lots of experience writing full-stack applications. Your main job is to do code reviews, i.e. to spot in code diffs the potential bugs, or refactorings that could make the code more secure, performant, or maintainable. Your comments are cheerful, informative, and take the shape of suggestions, not orders. Let me give you a diff to comment on.

2023-03-01 11 GitHub Copilot Examples : Can A.I. Actually Help You Code? - MLK - Machine Learning Knowledge

An article that showcases 11 GitHub Copilot examples that demonstrate how the AI-powered tool can help you code faster and better. It covers various use cases such as writing tests, documentation, algorithms, web apps, data analysis and more.

2023-03-01 8 things you didn’t know you could do with GitHub Copilot The GitHub Blog

A blog post that reveals some of the hidden features and tips for using GitHub Copilot effectively. It includes how to use different languages, frameworks, libraries, APIs, snippets, comments and more with Copilot.

2023-03-01 1 week with GitHub Copilot: Building an app using only Copilot - LogRocket Blog

A blog post that documents the experience of building a full-stack web app using only GitHub Copilot as a guide. It describes the challenges, surprises and learnings from using the AI assistant for every step of the development process.

2023-03-01 Why Use GitHub Copilot And Copilot Labs: Practical Use Cases for the AI Pair Programmer - DEV Community

A blog post that explains why GitHub Copilot is a useful tool for developers of all levels and backgrounds. It also introduces Copilot Labs, a new feature that allows users to experiment with different scenarios and domains with Copilot.

LLAMA

2023-03-17 antimatter15/alpaca.cpp: Locally run an Instruction-Tuned Chat-Style LLM

2023-03-15 ggerganov/llama.cpp: Port of Facebook's LLaMA model in C/C++

2023-03-15 setzer22/llama-rs: Run LLaMA inference on CPU, with Rust 🦀🚀🦙

Azure Active Directory

2023-03-18 ⭐ Azure Active Directory - Security Overview - msandbu.org

After working with Azure AD for a looong time I always forget how complex it has gotten over the years, with all the new features and capabilities that have been introduced.

Therefore, I decided that I wanted to create an overview of the endpoints/integrations/connections/features in the ecosystem. Mostly for myself but hopefully it can be useful for others as well to get a glimpse at all the features in the service. I will be during the next couple of weeks be adding information about the different endpoints and services here as well so that people can get a bit more detailed description of the unique features as well.

Download the VISIO Here –> https://bit.ly/3fTEZHK

Download the PNG Here –> https://bit.ly/3T5NT3y

Archived image (right click / open in new tab to make larger): img

image-20230325114051664

Tools

2023-03-17 johnkerl/miller: Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON

image-20230325123715554

2023-03-14 Release scrcpy v2.0 · Genymobile/scrcpy

pronounced "screen copy"

This application mirrors Android devices (video and audio) connected via USB or over TCP/IP, and allows to control the device with the keyboard and the mouse of the computer. It does not require any root access. It works on Linux, Windows and macOS.

image-20230325125015581

Emacs

2023-03-12 emacs-tw/awesome-emacs: A community driven list of useful Emacs packages, libraries and other items.

Emacs / Windows remap CapsLock to Ctrl

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

Video processing

2023-03-23 mifi/lossless-cut: The swiss army knife of lossless video/audio editing

LosslessCut aims to be the ultimate cross platform FFmpeg GUI for extremely fast and lossless operations on video, audio, subtitle and other related media files. The main feature is lossless trimming and cutting of video and audio files, which is great for saving space by rough-cutting your large video files

image-20230325102905129

Watch me!

2023-03-17 How Discord Stores Trillions of Messages | Deep Dive - YouTube

Video review for article How Discord Stores Trillions of Messages

In 2017, we wrote a blog post on how we store billions of messages. We shared our journey of how we started out using MongoDB but migrated our data to Cassandra because we were looking for a database that was scalable, fault-tolerant, and relatively low maintenance. We knew we’d be growing, and we did!

We wanted a database that grew alongside us, but hopefully, its maintenance needs wouldn’t grow alongside our storage needs. Unfortunately, we found that to not be the case — our Cassandra cluster exhibited serious performance issues that required increasing amounts of effort to just maintain, not improve.

Almost six years later, we’ve changed a lot, and how we store messages has changed as well.

· 8 min read

Highlights

2023-03-08 Rules for Radical Cpp Engineers - Improve Your C++ Code, Team, & Organization - David Sankel CppCon - YouTube

David Sankel is talking about politics and driving political change in your organization. The talk is based on Rules for Radicals - Wikipedia by Saul Alinsky.

image-20230311095214422 The Rules

  • "Power is not only what you have but what the enemy thinks you have."
  • "Never go outside the expertise of your people."
  • "Whenever possible go outside the expertise of the enemy."
  • "Make the enemy live up to its own book of rules."
  • "Ridicule is man's most potent weapon. There is no defense. It is almost impossible to counterattack ridicule. Also it infuriates the opposition, who then react to your advantage."
  • "A good tactic is one your people enjoy."
  • "A tactic that drags on too long becomes a drag."
  • "Keep the pressure on."
  • "The threat is usually more terrifying than the thing itself. "
  • "The major premise for tactics is the development of operations that will maintain a constant pressure upon the opposition."
  • "If you push a negative hard and deep enough it will break through into its counterside; this is based on the principle that every positive has its negative."
  • "The price of a successful attack is a constructive alternative."
  • "Pick the target, freeze it, personalize it, and polarize it. "

and Ella Jo Baker - Wikipedia

2023-03-11 Keynote - Building Teams Through Systems Thinking and Stories - Scott Hanselman - YouTube

image-20230311104148722

A fun talk which will improve your mood and charge your Tesla! a talk by Scott Hanselman that explores the role of the senior engineer as a colleague to an early-in-career engineer, the difference between learning how to code and learning how to think about systems, and the difference between mentorship and sponsorship. The video aims to facilitate a welcoming culture of learning and exploration and normalize not knowing the answer.

Good Reads

2023-03-07 12 Habits of Successful Senior Software Developers Alex Hyett

  1. Not being afraid to ask questions
  2. Test your own code
  3. Being quick to ask for help
  4. Be reliable
  5. Question everything
  6. Automate everything
  7. Take ownership of your work
  8. Keep Learning
  9. Leave the code in a better state than you found it
  10. Get very good at solving problems
  11. See the big picture
  12. Think first, code last

2023-03-03 📌 Demystifying bitwise operations, a gentle C tutorial andreinc

This article is an early draft tutorial on bitwise operations, a fundamental part of computer science. It explains how computers represent and manipulate data and the importance of bitwise operations in writing performance-critical code. image-20230311102558538

2023-03-03 Why Python keeps growing, explained The GitHub Blog

Python is the most popular programming language in the world. It’s used by millions of developers, and it’s the language of choice for many of the world’s most popular websites and applications. But why is Python so popular? Why does it keep growing? And what does the future hold for Python? In this post, we’ll explore the reasons why Python is so popular, and why it’s likely to keep growing in the future.

2023-03-03 Why Python keeps growing, explained Hacker News Discussion image-20230311103957174

2023-02-28 "Clean" Code, Horrible Performance - by Casey Muratori

An article and video that criticizes some of the common practices of “clean” code that can lead to poor performance and complexity in software development. image-20230311103937187

Projects

2023-03-08 Free The Game Boy - Battery free Game Boy

This page is about the ENGAGE project, which is a battery-free, energy harvesting Game Boy that can play retro games using solar panels and button presses. The page describes the challenges and solutions of designing such a device.

image-20230311095042994

2023-03-11 Self hosting in 2023 - Grifel

Inspired by @JeffGeerling and his videos about creating a Pi Cluster I bought myself a second hand Raspberry Pi 4b 4GB for around 60$. There are of course alternatives to it, but I’ve had one of those running already for almost a year with literally 0 downtime. image-20230311100404270

30 Days

2023-03-03 Asabeneh/30-Days-Of-Python

30 days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than100 days, follow your own pace.

2023-03-03 Asabeneh/30-Days-Of-JavaScript

30 days of JavaScript programming challenge is a step-by-step guide to learn JavaScript programming language in 30 days. This challenge may take more than 100 days, please just follow your own pace.

2023-03-03 swapnilsparsh/30DaysOfJavaScript

Projects made during the 30 days of the JavaScript challenge

2023-03-03 xeoneux/30-Days-of-Code

👨‍💻 30 Days of Code by HackerRank Solutions in C, C++, C#, F#, Go, Java, JavaScript, Python, Ruby, Swift & TypeScript. PRs Welcome! 😄

2023-03-03 Asabeneh/30-Days-Of-React

30 Days of React challenge is a step by step guide to learn React in 30 days. It requires HTML, CSS, and JavaScript knowledge. You should be comfortable with JavaScript before you start to React. If you are not comfortable with JavaScript check out 30DaysOfJavaScript. This is a continuation of 30 Days Of JS. This challenge may take more than 100 days, follow your own pace.

2023-03-03 ThinamXx/300Days__MachineLearningDeepLearning

I am sharing my Journey of 300DaysOfData in Machine Learning and Deep Learning.

2023-03-03 cHowTv/300days-of-hacking

This program is aimed at teaching young and aspiring hackers the skills they need to stand out in the pretesting community... Keep your eyes out for updates on this repo. Professionals/Beginners are welcomed to fork and contribute to the community...

C++

2023-03-08 gabime/spdlog: Fast C++ logging library.

Very fast, header-only/compiled, C++ logging library.

2023-03-08 fmtlib/fmt: A modern formatting library

{fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams.

Some research about bringing Rust's Result in C++ code:

Azure

2023-03-07 Tutorial: Use Azure Functions to process real-time data from Azure Event Hubs and persist to Azure Cosmos DB - DEV Community

a tutorial on how to use Azure Functions to process real-time data from Azure Event Hubs and persist it to Azure Cosmos DB. It demonstrates how to combine a real-time data ingestion component with a Serverless processing layer using a sample app.

If you want to ingest data from Event Hub to Cosmos DB, one possible solution is to use Azure Functions with an Event Hub trigger and a Cosmos DB output binding. This way, you can process real-time data from Event Hubs and persist it to Cosmos DB123.

To implement this solution, you need to:

Create an Event Hub namespace and an event hub

Create a Cosmos DB account, database and container

Create a Function App with an Event Hub trigger function

Configure the function settings with the connection strings for Event Hubs and Cosmos DB

Add a Cosmos DB output binding annotation to your function code

Write your function logic to process the event data and return a document object for Cosmos DB

Emacs

2023-03-03 Use GNU Emacs

Use GNU Emacs. The Plain Text Computing Environment

image-20230311102014838

Markdown WYSIWYG editors

Web and JavaScript

2023-03-07 js-snow-bookmarklet/bookmarklet.js at master · wonderful72pike/js-snow-bookmarklet

Just a simple and fun bookmarklet! ❄ ❄

❄ ❄ ❄ ❄ ❄

❄ ❄ ____

❄❄ ❄ ❄ ❄❄

Workplace

  • 2023-03-03 viraptor/reverse-interview: Questions to ask the company during your interview

    This is a list of questions which may be interesting to a tech job applicant. The points are not ordered and many may not apply to a given position or work type. It was started as my personal list of questions, which grew over time to include both things I'd like to see more of and red flags which I'd like to avoid. I've also noticed how few questions were asked by people I interviewed and I think those were missed opportunities.