Author Archives: paulborile

About paulborile

I’m a multi-skilled IT professional with a good all-round supervisory and technical expertise. Extensive, 20+ years of professional experience in software development allowed me to investigate computer science and software engineering inside out. During these years I built up a solid base of design patterns, software architectures and programming languages such as C/C++, Golang, Java, Python, SQL, Assembly (and many others). I worked on mission-critical and multi-channel applications, applying distributed computing, messaging, image/data processing and computer graphics techniques. I faced both architecture design and systems rearchitecting, microservices introduction and technology migration as well as company wide adoption of new technologies/methodologies multiple times. As an entrepreneur I have built and grown teams and development organizations from the ground up (internal/out sourced/at customer site) focusing on software engineering methodologies as well as recruiting, budget/financial control and operations support. I am particularly interested in software testing methodologies, software quality metrics and tools to make software development faster and better. Currently leading the Italian development team for ScientiaMobile Inc, a Reston (US) based startup focused on image optimizing CDN and mobile detection technologies and services. Born in Dearborn Michigan and living in Italy since many years now I speak fluently both English and Italian, studied French and learned some Russian while working for some time for a Olivetti/Aeroflot project.


2024 Reading list (updated as we go)

MS/DOS 4.01 is open source

Contents shortage for AI :

Meta, for instance, trained its new Llama 3 models with about 10 times more data and 100 times more compute than Llama 2. Amid a chip shortage, it used two 24,000 GPU clusters, with each chip running around the price of a luxury car. It employed so much data in its AI work, it considered buying the publishing house Simon & Schuster to find more.

Stop doing cloud if not necessary (I’m saying this since years..)

Redis forks (after the licence change) :
– redict : Drew DeVault + others?
– valkey : backed by AWS, Google, Oracle, Ericsson, and Snap, with the Linux Foundation; more to come imo.

nginx new fork (others forks are openresty)

Too much hype about Devin : Debunking Devin: “First AI Software Engineer” Upwork lie exposed!

Matt Mullenweg buys Beeper (already owns and Element (New Vector)) consolidating his position in based messaging services :

golang fasthttp (replacement for standard net/http if you need “to handle thousands of small to medium requests per second and needs a consistent low millisecond response time”. “Currently fasthttp is successfully used by VertaMedia in a production serving up to 200K rps from more than 1.5M concurrent keep-alive connections per physical server.”

Back to basics 🙂 Bloom filter

1 billion row challenge :

golang : alternative to cgo ?

Command line benchmark tool :

New jpegli, jpeg-xl derived :

Edge CDN techniques : Shielding from fastly i.e. use a designated edge cache instead of origin on a edge cache miss.

Apple car not interesting anymore :

golang error handling the Uber way :

nginx forking : Maxim Dounin annouces on the nginx forum,299130

Quad 9 free dns :

UI testing the netflix way :

Check it out : the new super-ide

Lex/Yacc today :

Inside Stripe Engineering Culture, a series a posts :

I find truly interesting the point around promoting a write culture (Execs/Directors in tech blog, SWEs on tech blogs/internal technical documents) :
I’m a long-time believer that writing clarifies thinking more than talking and writing persists information, makes it searchable, talking does not. “Verba volant, scripta manent” as the Latins use to say. But this idea shifted into “just enough” documentation (which means it is not necessary) in SW engineering latest methodologies so it is interesting that a multi billion company like stripe is going totally against the tide.

Big Internet services backend technology map (always out of date )

  • Airbnb: Ruby on Rails, MySQL, Amazon Web Services (AWS)
  • Uber: Go, Node.js, Java, Python, PostgreSQL, MySQL, Redis, Kafka
  • GitHub: Ruby on Rails, Go, Erlang, MySQL, Redis
  • WhatsApp: Erlang, FreeBSD, Yaws, Ejabberd, Mnesia DB
  • LinkedIn: Java, Kafka, Hadoop, Cassandra, Oracle, Voldemort (LinkedIn’s own distributed database)
  • Netflix: Go, Gluster, Apache Tomcat, Hive, Chukwa, Cassandra, Hadoop, MySQL, Amazon Web Services (AWS)
  • Slack: PHP, Java, MySQL, MongoDB, Kafka
  • Facebook: PHP (HHVM), React, GraphQL, MySQL, Cassandra
  • Twitter: Scala, Java, Ruby, MySQL, Aurora, Redis
  • Spotify: Python, Java, ZeroMQ, PostgreSQL, Cassandra, Google Cloud Platform (GCP)
  • Pinterest: Python (Django), Java, Redis, Cassandra, Kafka
  • Snapchat: Python, Java, PHP, Cassandra, Google Cloud Platform (GCP)
  • Dropbox: Python, Go, Rust, MySQL, Amazon Web Services (AWS)
  • Zoom: C++, Java, MySQL, Kafka, Amazon Web Services (AWS)
  • Shopify: Ruby on Rails, MySQL, Redis, Liquid (templating), Google Cloud Platform (GCP)
  • TikTok (ByteDance): Python, C++, Java, Nginx, MySQL, Kafka
  • Reddit: Python (Django), PostgreSQL, Redis, RabbitMQ, Amazon Web Services (AWS)
  • Instagram: Python (Django), React, PostgreSQL, Redis, Amazon Web Services (AWS)


The charm of complication

(or the Attraction for Complexity) There is a very common tendency in computer science and it is to complicate solutions. This complication is often referred as incidental/accidental complexity i.e. anything we coders/designers do to make more complex a simple matter. Some times this is called over engineering and stems from the best intentions :

  1. Attraction to Complexity: there’s often a misconception that more complex solutions are inherently better or more sophisticated. This can lead to choosing complicated approaches over simpler, more effective ones.
  2. Technological Enthusiasm: developers might be eager to try out new technologies, patterns, or architectures. While innovation is important, using new tech for its own sake can lead to unnecessary complexity.
  3. Anticipating Future Needs: developers may try to build solutions that are overly flexible to accommodate potential future requirements. This often leads to complex designs that are not needed for the current scope of the project.
  4. Lack of Experience or Misjudgment: less experienced developers might not yet have the insight to choose the simplest effective solution, while even seasoned developers can sometimes overestimate what’s necessary for a project.
  5. Avoiding Refactoring: In an attempt to avoid refactoring in the future, developers might add layers of abstraction or additional features they think might be needed later, resulting in over-engineered solutions.
  6. Miscommunication or Lack of Clear Requirements: without clear requirements or effective communication within a team, developers might make assumptions about what’s needed, leading to solutions that are more complex than necessary.
  7. Premature Optimization: trying to optimize every aspect of a solution from the beginning can lead to complexity. The adage “premature optimization is the root of all evil” highlights the pitfalls of optimizing before it’s clear that performance is an issue.
  8. Unclear Problem Definition: not fully understanding the problem that needs to be solved can result in solutions that are more complicated than needed. A clear problem definition is essential for a simple and effective solution.
  9. Personal Preference or Style: sometimes, the preference for certain coding styles, architectures, or patterns can lead to more complex solutions, even if simpler alternatives would suffice.
  10. Fear of Under-Engineering: there can be a fear of delivering a solution that appears under-engineered or too simplistic, leading to adding unnecessary features or layers of abstraction.

Just Scotland

RIP Niklaus Wirth

We all know Pascal language (less know about Algol or Oberon OS) and we might have heard that

 “software is getting slower more rapidly than hardware is becoming faster”

or that

“What Intel giveth, Microsoft taketh away”

I prefer this quote :

“Reducing complexity and size must be the goal in every step—in system specification, design, and in detailed programming. A programmer’s competence should be judged by the ability to find simple solutions, certainly not by productivity measured in number of lines ejected per day. Prolific programmers contribute
to certain disaster.”

You find them all here “A plea for lean software“. if you make code please read this 1995 paper.

Beautiful Scotland

2023 Reading list (updated as we go)


Reforming Unix :

Managing big C language codebases can be challenging but is definitely possible : this very interesting post talks about curl

Agile has failed ? I don’t think so : Anything applied as a religion is doomed to fail and the same is for Agile. You can’t take any methodology and apply it “as is” to a company or project or dev-team; you need to adapt it and not make the company/team adapt to it.
What I hope is that we don’t trow away the good ideas of Agile (iterations/continuous delivery, attention to technical excellence, simplicity (avoiding over engineering) just to mention a few).

State of the developer ecosystem :

Margareth Hamilton, the first software engineer story :

Avoid Try/Catch and remember what google recommends about exceptions (and c++ in general)

Thanks Mafe : Maniac by Benajmin Labatut, see the Alpha-Go documentary

Agile roadmaps : Now, Next, Later approach

Reasons why you burnout swe : My list in order of priority : 1. don’t ship code (there is nothing worse than working months on something that is not going to prod or is lingering in the deploy queue) 2. Not trusting your engineers by telling them in fine detail how to do things. 3. Lack of Recognition (not reward, about the difference).

So google uses design documents to describe design of new components :

From a friend of mine substack, Chris Hedges talking about war :
“But these words give me a balm to my grief, a momentary solace, a little understanding, as I stumble forward into the void.”

Readability (and thus Maintainability) is the most important attribute of a code base and Google knows it :

An open source 3D universe simulator with support for more than a billion objects : based on data from Gaia mission

Resources on Microservices

How Diffusion Models work i.e. how does an AI generate images :

Watch out for Thundering herds

Engineering Metrics :

My next read : John Maeda

System design and the cost of architectural complexity :

Simplicity was the key for Instagram backend (in 2011) :

Simplicity mindset :

Fastly supports go on Edge :

Go WASI support :

Any company providing support for a product would want to have something like this

Meta Launches AI Code Writing tool : you can test it here :

Whats App :

Photographs that are like films

I find it so true :

Jerome Lanier on music and what Reality is in the end :

We lost Kevin (The Condor) Mitnick ( ) : TCP is a much more secure protocol also thanks to him.

Yoshua Bengio (CA) and John Bunzl (UK), moderated by Nico A. Heller on strengths and limitations of current artificial intelligence, why it may become a dangerous instrument of disinformation, why superintelligent AI may be closer (years) than most previously expected (decades) and how this could yield to catastrophic outcomes – from AI-driven wars to the extreme risk of extinction. Notes, general concepts from Bengio talk :

AI currently perceive the world and make sense of it with images, sound and text, generating content in all 3 areas.
Current systems are not at the level of human intelligence, they master what psychologist call system 1 intelligence (intuition) : react to any question/context, no reasoning (or little reasoning) – arithmetic : simple operations with numbers ok, more complex (of the type we will need paper and pencil) they make mistakes.
System 2 intelligence : explicit reasoning, you can plan, imagine. Ex:
driving left hand roads after having driven right hand all life. We take 1 hour to adapt because we don’t use intuition but reasoning. AI will get there : how much time will take to bridge the gap between s1 and s2 ? nobody knows, could be close or take 10 years.
Training data currently needs to be filtered to remove data that appears to be insulting, homophobic or racists, dangerous, inadequate. AI will get there too to avoid the need of preparing training material.
Machines that are as intelligent as we are will be inevitably more intelligent than us because they are machines : immortal, don’t sleep, can exchange info at high speeds like if they were a huge brain. Humans have culture to try to simulate this.

  • pure intelectual power, completely detached from the goal. The goal will make the difference between a “good” AI and an “evil” one.
  • humans cannot turn off compassion (or just most people can’t) as it has been hardwired into us by evolution; machines can

Stating a goal in a precise way is probably impossible so even AI with good goals might behave evil.

Goals are not expressable, we can only give partial specifications

We’ll get to the point where the game will be : who’s AI is bigger/better/faster ?

Most important thing to reduce the probability of bad behavior connected to AI is to reduce the actors, materials, information, proliferation (like we did for atomic bombs)
Regulatory frameworks are necessary.

Go : inside map implementation and

Go 10 years after : and why we can live without subclassing

Extreme readability

AI can’t create software, only code :

Some WASM Stuff :
– cloudflare wasm runtime
– wasmtime runtime :
– wasi-libc : still no thread support (june 2023)

Ping Pong Programming : TDD + Pair Programming :

Using AI in Ping Pong programming :

AI Technology map :

You build it, you own it :

AI generated sort algorithms make it into LLVM/C++

Superfast hash

Google leaked internal document on AI :

Compression algorithms benchmarks :

What’s inside training data for LLM

Cache Optimization Models and Algorithms :

ChatGPT Is a Blurry JPEG of the Web


NO Pause on AI development :

Cheatsheet for golang test, benchmarks, profiling

Yet another browser promising to minimize tracking and fingerprinting.

everything cli

Amazon Is Making a New Web Browser ?

Interview with OpenAI’s Greg Brockman: GPT-4 isn’t perfect, but neither are you

On jpeg-XL

On crypto and thieves :
“In February 2022, a hacker stole 120,000 wrapped Ethereum from Wormhole, a cross-blockchain bridge” – subscribe to Molly White newsletter for unbiased crypto news.

B Corporation Certification : “As of September 2022, there are 5,697 certified B Corporations across 158 industries in 85 countries.” : acquire 3d assets anywhere with a phone compressed bitmaps

Code RED in google :

Node.js is aging like milk :

Ryan Dahl, creator of Node.js moved to Go.

TJ Holowaychuk, creator of Express.js framework moved to Go.

Boston dynamics showing off

Chat GPT4 talk

Fyne IDE, currently work in progress

1995 paper by the Niklaus Wirth “A Plea for Lean Software”