Dated Oct 1, 1974;
last modified on Sat, 27 Mar 2021
Brashly stroked, computer science is what I learned in school, and software engineering is what I encounter in the ‘real world’. The boundary is blurry, so let’s have them all in place.
Measuring Productivity Devs' Diverging Perceptions of Productivity Got interested in measuring it two years into my SWE career.
Initially rated myself based on % of completed daily objectives. The objectives didn’t necessarily correspond to work items. Stopped because the numbers were high even on days when I didn’t feel productive.
Switched to “stuff that affects others” (later came to know these are “function points”). More intuitively captures non-code objectives, e.g., aligning folks on feature specs....
Why Write Tests Helps catch bugs in the code, and in the programmer’s mental model of what the code does.
The later a bug is caught in the development cycle, the more expensive it is to fix it. A good test today is a future debugging session saved.
The test is the first client of your code. It uncovers sub-optimal design choices, tight couplings, missed cases, etc....
Garbage Collection Garbage Collection is about simulating a computer with infinite memory. Consequently, if you have more RAM than your program will ever need, then a null garbage collector is a valid one.
Traits of Beautiful Code is the chief designer of Ruby, and thus the frequent illustrations and praises for Ruby.
How do other chief designers explain their rationale? For instance, what would Java’s designer say to ’s criticism?...
Pagination with Relative Cursors Exposing pagination through URLs like example.com/items?page=25&limit=100 leads to SQL like SELECT * from 'items' LIMIT 100 OFFSET 2400;, which inefficiently goes through 2,500 records and discards the first 2,400.
With relative cursors, we have URLs like example.com/items?limit=50&lastID=XXX, which leads to SQL like SELECT * from 'items' WHERE 'id' > XXX ORDER BY 'id' ASC LIMIT 50, and this is more efficient, assuming there are indexes for id....
Mergeable Replicated Data Types On a distributed system, each replica should [eventually] converge to the same state. Commutative Replicated Data Types (CRDTs) can accept updates and achieve consistent without remote synchronization.
The Need for Commutativity Say we have a queue \( 1 \to 2 \). Suppose two replicas, \(r_1\) and \(r_2\), independently call pop(). Each replica will have \(2\) on their queue.
However, on receiving an update that the other replica popped, each replica will call pop() to be consistent, thereby deleting \(2\)....
Dependency Management Golang introduced a new library referencing mode to overcome limitations of the old one. While the two library modes are supported by Golang, they are incompatible, e.g. dependency management (DM) issues, reference inconsistencies, build failures, etc. did an empirical study that resulted in HERO, an automated technique to detect DM issues and suggest fixes. Applied to 19k Golang projects, HERO detected 98.5% on a DM issue benchmark, and found 2,422 new DM issues in 2,356 Golang projects....
Retained Mode vs. Immediate Mode In retained mode, the graphics library exposes an API to the application for building/updating a scene. However, the graphics library is in charge of issuing drawing commands. In contrast, an immediate-mode API allows the application to issue the drawing commands. Retained-mode APIs abstract away initialization, state maintenance and cleanup, but uses more memory. Immediate-mode APIs allow for more targeted optimizations.
https://reactjs.org/ is one of the more popular retained-mode web APIs....
When it comes to STEM diversity goals, Asian American and Pacific Islander (AAPI) tends to be excluded from the URMs under discussion, e.g. .
However, AAPI as a blanket term obscures the struggles of member groups, e.g. \(62\%\) of AAPI adults aged 24 and older have an associate’s degree or higher, compared to 28% of Native Hawaiians and Pacific Islanders of the same age. AA comprises \(\approx 50\) ethnic groups, while PI has \(\approx 20\)....
Formal Software Design Alloy is an open-source language and analyzer for software modeling. An Alloy model is a collection of constraints that describe a set of structures, e.g. all possible security configurations of a web application. Alloy’s tool, the Alloy Analyzer is a solver that takes the constraints of a model and finds structures that satisfy them.
📑 The Alloy Analyzer leverages a SAT solver, and this precludes Alloy from analyzing optimization problems....
On the Clean Code Movement Good enough is good enough. The architectural choices and bugs in the implementation tend to be more impactful, so focus more on those.
Be conservative in what you consider technical debt. It should be something that slows down current/future changes, and not code that doesn’t “feel nice”. A code base that is free if technical debt is likely over-emphasizing polish over delivery.
Abstractions and indirections in the name of future-proofing tend to be wrong especially when treading new paths, where you can’t reliably predict the future....
Debugging 101 Definition? Debugging involves inspecting a program’s internal state.
printf Debugging and Logging In printf debugging, one adds print statements and keeps iterating until enough information has been extracted.
Using logging has several advantages over printf debugging: varying logging destinations (e.g. standard output, files, sockets, remote servers, etc.); severity levels (e.g. INFO, DEBUG, WARN, ERROR, &c) that support filtering of output; color-coding for readability.
Terminals have varying levels of color support: plain color; ANSI escape codes (16 color codes with bold/italic and background); 256 color palette; 24-bit truecolor (“888” colors, aka 16 million, e....
Signal Is Finally Bringing Its Secure Messaging To the Masses. Andy Greenberg. www.wired.com . it.slashdot.org . news.ycombinator.com . Feb 14, 2020. Attracting the Masses Brian Acton (WhatsApp cofounder) injected $50m into the Signal Foundation, allowing them to grow from 3 to 50 full-timers.
You’d think that at Signal’s dominance, getting $$$ shouldn’t be a problem. But VCs expect a multiple return and Signal doesn’t look like it will monetize soon....
Towards a Collaborative Web Browser;
Reviews of WWW Proceedings;
Privacy on the Web;
Chrome vs. Everybody;
Facebook to Pay $550 Million to Settle Facial Recognition Suit;
Facebook Monetizing Encrypted Messaging by Analyzing Metadata [Twitter];
An Apology for the Internet - How It Went Wrong [Intelligencer];
A Zooming Web Browser;
Maybe a good approximation is where Google Research is spending $$$
: Algorithms and Optimization; Augmented Reality and Virtual Reality; Geo; Human Computer Interaction; Health Research; Machine Learning and Data Mining; Mobile; Machine Perception; Networking; Natural Language Processing; Privacy; Quantum Computing; Structured Data, Extraction, Semantic Graph, and Database Management; Security; Software Engineering and Programming Languages; Systems; Misc.
Research Scholar Program recipients. research.google . Apr 7, 2021....
Privacy in CS and in the Law;
Web Applications 101;
Information Security [COS 432];
Tracking and Data Collection;
02. Threat Models for Web Security;
Secure Multiparty Computation;
03. Cross-Site Request Forgery (XSRF);
Privacy [COS 432];
Research on Privacy Enhancing Techniques;
Applications for DP;
Building Intuition About DP;
SQL Injection;
Cross-Site Scripting (XSS);
Similarity Measures;
Similarity Measures;
ML Crash Course [dev@google];
Machine Learning and Predictive Analytics [ELE 364];
The Nearest Neighbor Algorithm;
The Nearest Neighbor Algorithm;
Caveats on Similarity Learning;
Caveats on Similarity Learning;
Handling Noisy Data in Nearest Neighbors;
Handling Noisy Data in Nearest Neighbors;
The Case for Range Normalization;
The Case for Range Normalization;
Predicting Continuous Targets Using NN;
Predicting Continuous Targets Using NN;
Other Measures of Similarity in NN;
Other Measures of Similarity in NN;
The Curse of Dimensionality and Feature Selection;
The Curse of Dimensionality and Feature Selection;
ML Usefulness to a Dev;
ML Usefulness to a Dev;
Learning Haskell via AoC 2021;
000. Longest Two-Character Substring;
General Tips on Performance and Optimization;
AoC 2021 Day 01: Sonar Sweep;
AoC 2021 Day 02: Dive!;
AoC 2021 Day 03: Binary Diagnostic;
AoC 2021 Day 04: Giant Squid;
AoC 2021 Day 05: Hydrothermal Venture;
AoC 2021 Day 06: Lanternfish;
AoC 2021 Day 07: The Treachery of Whales;
AoC 2021 Day 08: Seven Segment Search;
AoC 2021 Day 09: Smoke Basin;
Classes in C++;
AoC 2021 Day 10: Syntax Scoring;
019. Counting Sundays;
Structures in C++;
020. Factorial Digit Sum;
021. Amicable Numbers;
022. Name Scores;
AoC 2021 Input Parser;
Enumerations in C++;
Unions in C++;
AoC 2021 Main;
AoC 2021 Solution Runner;
AoC 2021 Test Code;
AoC 2021 Parsing Arguments;
218. To-Do List Pt. I;
380. Smooshed Morse Code;
C++ Meta-Programming;
Resource Management in C++;
Templates in C++;
01. Sum of Powers;
AoC 2019 Day 01: The Tyranny of the Rocket Equation;
To-Do List (Intermediate);
Smooshed Morse Code (Intermediate);
AoC 2019 Day 02: 1202 Program Alarm;
Fermat's Little Theorem (Intermediate);
Linear Feedback Shift Register (Intermediate);