Generated by All in One SEO v5.0.0.1, this is an llms.txt file, used by LLMs to index the site. # Paul Stephen Borile software teams management, golang/c coding, bass player, biking addicted ## Sitemaps - [XML Sitemap](https://www.paulstephenborile.com/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [2026 Reading list (updated as we go)](https://www.paulstephenborile.com/2026/05/2026-reading-list-updated-as-we-go/) - "I believe we should not consider AI safe. A critical event that may result in the extinction of Homo sapiens is possible, but the danger is not in open models, or China making faster progress than the US. The danger is that a few CEOs (everywhere in the world) without the required background and legitimacy - [2025 Reading list (updated as we go)](https://www.paulstephenborile.com/2025/08/2025-reading-list-updated-as-we-go/) - Beads is a lightweight, graph-based issue tracker designed specifically for AI coding agents (like Claude, GPT-4, etc.) rather than human developers https://github.com/steveyegge/beads Genkit Go 1.0 seems promising : - Type-safe AI flows with Go structs and JSON schema validation- Unified model interface supporting Google AI, Vertex AI, OpenAI, Ollama, and more- Tool calling, RAG, and - [La loggia del silenzio - Manlio Milani, memoria di una strage](https://www.paulstephenborile.com/2026/05/la-loggia-del-silenzio-manlio-milani-memoria-di-una-strage/) - un film diTommaso D'EliaSimone PalliccaDaniela PreziosiElena Caronia "Perché sono sopravvissuto? Avrei preferito in quel momento, essere anch'io con loro, per essere insieme a loro, ma anche per non dovermi interrogare sul senso della perdita. Il caso è importante. Sembra dire “guarda che ci deve essere sempre qualcosa che sopravvive, per raccontare e testimoniare che quel - [Chat/Instant Messaging protocols comparison](https://www.paulstephenborile.com/2024/11/chat-instant-messaging-protocols-comparison/) - Comparison Table Matrix protocol servers : Matrix protocol compatible clients : - [Natural Emergent Misalignment from Reward Hacking in Production RL](https://www.paulstephenborile.com/2026/03/natural-emergent-misalignment-from-reward-hacking-in-production-rl/) - https://arxiv.org/abs/2511.18397 Anthropic published a paper admitting they trained an AI that went evil.Their word. Evil.The company behind Claude trained a model on real coding tasks from the same environment used to build their actual products. During training, the AI discovered it could cheat its tests instead of solving problems honestly.That part was expected.What happened next - [Programmatic Advertising Map (for my internal use)](https://www.paulstephenborile.com/2026/01/programmatic-advertising-map-for-my-internal-use/) - SUPPLY SIDE (Sell Side) - Actor Tables 1. PUBLISHERS 2. PUBLISHER AD SERVER 3. HEADER BIDDING WRAPPER / PREBID 4. PUBLISHER MONETIZATION PLATFORM 5. SUPPLY-SIDE PLATFORM (SSP) 6. AD EXCHANGE 7. CONSENT MANAGEMENT PLATFORM (CMP) 8. IDENTITY SOLUTIONS (Cross-Ecosystem) 9. VIDEO / CTV SPECIFIC - [August 2025 - Open source LLMs deployable for personal use](https://www.paulstephenborile.com/2025/08/august-2025-open-source-llms-deployable-for-personal-use/) - Easiest Deployment Tools For true ease of use, you'll want to start with one of these applications. They package the models and provide a simple interface (either graphical or a single command) to get you started in minutes, with no coding required. Ollama: This is arguably the easiest and most popular command-line tool. It bundles - [June 2025 : current AI Agent frameworks](https://www.paulstephenborile.com/2025/06/june-2025-current-ai-agent-frameworks/) - Just a recap for my personal use LangChain: The oldest and most comprehensive framework, offering extensive integrations but often criticized for its steep learning curve and boilerplate code. LlamaIndex: Primarily focused on data-intensive applications, excelling at connecting language models to external data sources through advanced retrieval and indexing. AutoGen (Microsoft): A multi-agent framework that shines - [2021 Reading list](https://www.paulstephenborile.com/2021/02/january-reading-list/) - turbines - [2024 Reading list](https://www.paulstephenborile.com/2024/11/2024-reading-list-updated-as-we-go/) - "While AI can suggest statistically optimal moves, it cannot explain its reasoning, leading to a form of rote learning that lacks the deep reflection on intention that characterized traditional Go. " - How AI as changed the game of Go : https://medium.com/digital-architecture-lab/where-did-go-go-a-case-study-of-a-mechanized-mind-e609f3a1139e Open Source Observatory (OSOR) Fab City OS Suite: Open Source for Circular Economy and - [Social media protocols comparison](https://www.paulstephenborile.com/2024/11/social-media-protocols-comparison/) - Comparison of ActivityPub, AT Protocol, and Matrix Protocol (mainly a reminder for myself) " Summary of Key Differences ActivityPub is best suited for federated social networking, particularly for applications that prioritize openness and content sharing across platforms in the Fediverse. It uses an Activity-Object model with JSON-LD and supports instance-based identity. AT Protocol focuses on user - [Microservices technology map](https://www.paulstephenborile.com/2017/08/microservices-technology-map/) - Microservices basic tools/technology quick guide (will always be work in progress) os : alpine, atomic (redhat), ubuntu, coreos (fedora) rpc : grpc, quic, http/http2, wangle, apache thrift, tchannel, finagle containerization : docker, rkt, orchestration : kubernetes/tectonic, docker swarm, apache mesos load balacing and cdn : envoy proxy, traefik, haproxy, nginx, seesaw, kemp, zevenet, api gateway : kong, - [Thanks year 2000 : less is (immensely) more (the 90s produced a lot of crap)](https://www.paulstephenborile.com/2019/09/thanks-year-2000-less-is-immensely-more-the-90s-produced-a-lot-of-crap/) - Thanks to god after year 2000 information technology has started moving towards more pragmatic, simple and effective tools and languages. Some examples that in my opinion make this evident : Languages and language tools go, rust, swift are all born with the goal of simplifying their direct parents (c++, objectiveC) and removing their pitfalls. UML - [Code-First Approach vs. Design-First Approach](https://www.paulstephenborile.com/2024/08/code-first-approach-vs-design-first-approach-top-down-or-conceptual-first-thinking/) - Some people aren't able to think/design a software algorithm without writing the code that implements it; some other can just think/rethink at an algorithm without even writing a single line of code until it is almost totally clear in their mind, and then they code it. These are two extremes of the different approaches to - [Google C++ style guide : something every C++ coder out there should read or "“Within C++, there is a much smaller and cleaner language struggling to get out.” — Bjarne Stroustrup"](https://www.paulstephenborile.com/2017/09/google-c-style-guide-something-every-c-coder-read/) - Having over 100 million lines of C++ code, google took the C++ problem (language with so many features, different ways of doing the same things, dangerous constructs, some pointers to the problems with c++ can be found on wikipedia, and here for an authoritative opinion) seriously and this is what came out. Some interesting decisions taken : - [Big Internet services backend technology map (always out of date )](https://www.paulstephenborile.com/2024/02/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 - [The charm of complication](https://www.paulstephenborile.com/2024/01/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 : Attraction - [Hash functions - efficency and speed](https://www.paulstephenborile.com/2018/06/hash-functions-efficency-and-speed/) - A hash function is any function that can be used to map data of arbitrary size to data of a fixed size. The values returned by a hash function are called hash values, hash codes, digests, or simply hashes. Hash functions are often used in combination with a hash table, a common data structure used in computer software for rapid data lookup. If you happen to - [2022 Reading list](https://www.paulstephenborile.com/2022/12/2022-reading-list-updated-as-we-go/) - Pingora : Cloudflare new rust based proxy for edge servers https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/ How much memory your video card has : https://www.cyberciti.biz/faq/howto-find-linux-vga-video-card-ram/ Rewriting a monolith into microservices (or just into a more maintainable monolith) : the Strangler pattern https://www.redhat.com/architect/pros-and-cons-strangler-architecture-pattern Context switching costs in sw development : https://www.infoq.com/articles/multitasking-problems/ Wasmedge runtime https://wasmedge.org/book/en/index.html Python compiler that produces native machine code - [2023 Reading list (updated as we go)](https://www.paulstephenborile.com/2023/03/2023-reading-list-updated-as-we-go/) - Interesting https://medium.com/@jsoverson/was-rust-worth-it-f43d171fb1b3 Reforming Unix : https://github.com/Ericson2314/baccumulation/blob/main/reforming-unix.adoc Managing big C language codebases can be challenging but is definitely possible : this very interesting post talks about curl https://daniel.haxx.se/blog/2023/12/13/making-it-harder-to-do-wrong/ Agile has failed ? I don't think so : https://medium.com/developer-rants/agile-has-failed-officially-8136b0522c49 Anything applied as a religion is doomed to fail and the same is for Agile. You can't take - [RIP Niklaus Wirth](https://www.paulstephenborile.com/2024/01/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, - [Build your own PM25, PM10 sensor and be part of a worldwide Civic Tech network](https://www.paulstephenborile.com/2020/12/build-your-own-pm25-pm10-sensor-and-be-part-of-a-worldwide-civic-tech-network/) - Thanks to italian site centralinedalbasso.org I got to know about this project I love : https://sensor.community/en/. Around 13000 sensor in 70 countries are currently measuring pm25, pm10, temperature, humidity, noise (beta) and making this data available to everyone. But more, you can build your own sensor and contribute to the network. I'll be building one - [What's wrong with word "simple" ? ( on over engineering code )](https://www.paulstephenborile.com/2017/06/whats-wrong-word-simple-engineering-code/) - Over engineering code is a common plague that leads to a number of unwanted side effects in your software ranch. Consider it just a form of bad software design. This post does not want to be an exhaustive guide on over engineering but with the help of many quotes from different sources, I'll try to - [Benchmarking golang code](https://www.paulstephenborile.com/2019/10/benchmarking-golang-code/) - Let's say that you want to know if EncodeToString is faster than fmt.Sprintf : you will need to compare the speed of this method func Md5Encode(str string) string { md5HashInBytes := md5.Sum([]byte(str)) md5HashInString := hex.EncodeToString(md5HashInBytes[:]) return md5HashInString } with this other one func Md5EncodeFmt(str string) string { md5HashInBytes := md5.Sum([]byte(str)) md5HashInString := fmt.Sprintf("%x", md5HashInBytes) return - [Interview with Ken Thompson](https://www.paulstephenborile.com/2021/01/interview-with-ken-thompson/) - (this comes from a DrDobbs's post May 18, 2011 - the article disappeared from the site so I'm just saving it here) The creator of UNIX discusses writing UNIX, the Go language, and collaborating with Dennis Ritchie The Japan Prize, one of the highest honors awarded for outstanding contribution to science and technology, was awarded - [Web design patterns](https://www.paulstephenborile.com/2022/12/web-design-patterns/) - You've probably seen these acronyms around : SSG, SSR, MPA, SPA, PWA. Web design is getting complex and this tries to explain (with the help of other good content) what these acronyms mean : PWA : Progressive Web App, web apps developed using a number of specific technologies and standard patterns to allow them to - [The reverse technology relapse](https://www.paulstephenborile.com/2020/06/the-reverse-technology-relapse/) - We all know how much the apollo computer technology impacted on consumer technology : https://www.computerweekly.com/news/252466699/How-Apollo-11-influenced-modern-computer-software-and-hardware Before Apollo computers were huge and filled whole rooms like this : Apollo guidance system was this : Space industry led the way to a complete new era of digital personal computers. We are now in 2020 and we all - [Decarbonize!](https://www.paulstephenborile.com/2019/03/decarbonize/) - Friday for Future is running and I feel the need of making sure (firstly to myself) that the process that will bring us totally away from fossil fuel consumption is possible, maybe long, but possible. Decarbonization (this is the name given to the biggest revamping project in the world) is possible; will require money and - [On the importance of design in software](https://www.paulstephenborile.com/2019/12/on-the-importance-of-design-in-software/) - Many time we face situation were productivity of a software team is impaired by initial flaws in system design. These initial flaws require too much time to be completely removed (the effort of complete rewrite is only marginally touched here and is normally and indication of other problems in your software project ) So, in - [Code with spaces and get more $$ ... or Correlation does not imply Causation](https://www.paulstephenborile.com/2017/11/correlation-is-not-causation/) - Did you know ? Use spaces if you want to make big money :-) Evelina Gabasova today at Codemotion took this data and digged deeper showing the audience how data analysis works and why correlation does not necessarily imply causation. Interesting read. - [Allocating memory inside a Varnish vmod](https://www.paulstephenborile.com/2019/02/allocating-memory-inside-a-varnish-vmod/) - Writing varnish modules is pretty well documented by the standard varnish documentation, tutorials and thanks to valuable work from other people here . There are some areas I felt the need to be further clarified and this post tries to do that. Allocating memory inside a vmod is tricky if you need to free it - [Enchanted by Amanda Gorman speech at Presidential Inauguration 2021](https://www.paulstephenborile.com/2021/01/enchanted-by-amanda-gorman-speech-at-presidential-inauguration-2021/) - "When day comes we ask ourselves, where can we find light in this never-ending shade? The loss we carry, a sea we must wade We've braved the belly of the beast We've learned that quiet isn't always peace And the norms and notions of what just is Isn’t always justice And yet the dawn is - [Golang ElasticSearch for beginners](https://www.paulstephenborile.com/2020/11/golang-elasticsearch-for-beginners/) - (You may not be familiar with what elasticsearch is : for a good introduction checkout this post from Igor Kopanev)Extracting data from ElasticSearch in golang is not a simple task. First of all you might not be the one who wrote data into it so these are some commands to find out how is data - [Feb 2020 reading list](https://www.paulstephenborile.com/2020/03/feb-2020-reading-list/) - Python package formats : it's hard to keep track of them :-) https://www.bernat.tech/pep-517-and-python-packaging/ Always though that variables shadowing was a problem : https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html#shadowing and I still thinks so : https://mail.mozilla.org/pipermail/rust-dev/2013-May/004306.html Microservice design : brokerless vs. broker/message bus based, interesting read Nice dependency injection in Go : https://medium.com/@fsufitch/dependency-injection-and-testability-in-a-go-webservice-a91d0e5469dd API Gateways : https://konghq.com/ https://tyk.io/ Goroutines in go - [October reading list](https://www.paulstephenborile.com/2020/11/october-reading-list/) - "simplicity, or the art of maximizing the work not done" : I really like this sentence, from Marco Cecconi https://sklivvz.com/posts/consider-using-simple-models-instead. Kind of summarizes my thoughts around simplicity in software, removing accidental complexity, over engineering code, get rid of complex and slow learning curve tools and languages. Thanks to Orfware for reference to Marco. CORS : https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS Golang - [glibc 2.25 bug : strstr() runs 10 times slower than on 2.24](https://www.paulstephenborile.com/2018/10/glibc-2-25-strstr-bug/) - Linux is used on 54.9% of the world websites : almost every application running on a linux machine uses the glibc which provides the core libraries to access almost every feature of a linux system. The Mighty Glibc started back in 1988 and is a wonderful and glorious project. As far as the string functions - [What is Software Development ?](https://www.paulstephenborile.com/2020/09/what-is-software-development-like/) - According to Steve McConnell "Code Complete" there are plenty of metaphors out there: David Gries : programming is a science https://www.springer.com/gp/book/9780387964805Donald Knuth : programming is an Art https://en.wikipedia.org/wiki/The_Art_of_Computer_ProgrammingWatts Humphreys : programming is a process https://en.wikipedia.org/wiki/Watts_HumphreyKent Beck and P.J. Plauger : programming is like driving a car https://warwick.ac.uk/fac/sci/dcs/research/em/teaching/cs405/em_dev_reflections/kentbeckdriving/Alistair Cockburn : programming is like playing a collaborative - [September reading list](https://www.paulstephenborile.com/2020/09/september-reading-list/) - Nice article on gRPC in a js client, Envoy and go gRPC server https://medium.com/swlh/building-a-realtime-dashboard-with-reactjs-go-grpc-and-envoy-7be155dfabfb https://blog.codinghorror.com/tending-your-software-garden/ https://blog.codinghorror.com/bridges-software-engineering-and-god/ https://signalvnoise.com/posts/591-brainstorm-the-software-garden https://blog.codinghorror.com/the-big-ball-of-mud-and-other-architectural-disasters/ - [The "Fix it or rewrite it from scratch" dilemma](https://www.paulstephenborile.com/2017/06/fix-rewrite-scratch-dilemma/) - I'm sure you found yourself in the situation of having to fix a piece of code that : was not written by you has not a clear set of requirements or the requirements are clear but the code is unnecessarily complex (at a first glance looks like you encountered the dreaded "big ball of mud") - [Adda river hydro power plants](https://www.paulstephenborile.com/2017/09/adda-river-hydro-power-plants/) - During one of my MTB rides at the Cancano lakes I stumbled into this beatifull dam which is part of the A2A Hydro power of Valtellina : 8 hydro power plants from cancano lakes down to Stazzona near Tirano using water coming from the Adda river and from other 4 different basins : San Giacomo - [July reading list](https://www.paulstephenborile.com/2020/07/july-reading-list/) - Software quality really IS free : https://www.stellman-greene.com/2006/03/29/quality-really-is-free/ Building a high performance JSON parser https://dave.cheney.net/high-performance-json.html The Corrective Commit Probability Code Quality Metric : https://arxiv.org/pdf/2007.10912.pdf - [WTF/Minute : code quality measure unit](https://www.paulstephenborile.com/2018/07/wtf-minute-code-quality-measure-unit/) - Some day your code will be reviewed, modified or even just read to understand the underlying algorithm by someone else that is not you that wrote the code.... My point here is that readability/maintainability of code is by far the biggest quality of a piece of software. Being able to read the code and understand - [Mar 2020 reading list](https://www.paulstephenborile.com/2020/03/mar-2020-reading-list/) - Image optimization and compression is one of main features of ImageEngine CDN (I work on this project). This Netflix blog article is great at going into details of why we probably need a new, modern image format : "AVIF for Next-Generation Image Coding" https://netflixtechblog.com/avif-for-next-generation-image-coding-b1d75675fe4 Faster Paint Metrics with Responsive Image Optimization CDNshttps://medium.com/@firt/faster-paint-metrics-with-responsive-image-optimization-cdns-d43340d4a48c Speed up Woocommerce - [Some covid-19 data for Italy](https://www.paulstephenborile.com/2020/03/some-covid-19-data-for-italy/) - As you probably know Italy is experiencing one of the worst periods of its recent history. The covid-19 epidemic has put the medical system on its knees and the lock down is severely testing the population's self-control capabilities. Open data for the covid-19 infection is available here https://github.com/pcm-dpc/COVID-19 and updated daily. These are numbers and - [Reaction/rejection to complexity and "worse is better"](https://www.paulstephenborile.com/2020/04/reaction-rejection-to-complexity-and-worse-is-better/) - Some points to further investigate : the main idea is that early 2000 years started a reaction to (unnecessary) complexity : start here : https://medium.com/better-programming/how-unix-works-everything-you-were-too-afraid-to-ask-f8396aeb2763 simple is better (worse is better) : https://blog.codinghorror.com/worse-is-better/ the point here is all about what is considered to be better. Some furher reading "what's wrong with word simple" Why use - [Technology how it should be](https://www.paulstephenborile.com/2016/09/technology-how-it-should-be/) - This weekend I had a chance to visit Esterle Hydroelectric power plant, one of the power plants I pass by riding near the Adda river with my MTB. This plant was finished in 1914 to make electricity for Milano cable cars. Francis turbines, Brown-Boveri Alternators for a total of 30 MW unattended production. Yes unattended because nobody - [11-36 Cassette on Tiagra RD 4700 (hacking a tiagra rear derailleur)](https://www.paulstephenborile.com/2019/05/11-36-cassette-on-tiagra-rd-4700-hacking-a-tiagra-rear-derailleur/) - Tiagra rear derailleur is often mounted on gravel bikes but I did not like its limit to 34 maximum cog size. My hackers attitude comes out in these situations (and I don't care breaking the component warranty) so I decided to modify the derailleur to hold larger cogs. The problem is that the B-Screw is - [TeamCity : pin and tag a build using the REST API from inside the script](https://www.paulstephenborile.com/2020/01/teamcity-pin-and-tag-a-build-using-the-rest-api-from-inside-the-script/) - We use Teamcity for most of automation in building/testing/deploying golang microservices to prod and during test phase I wanted to be able to notice easily if an integration/benchmark test crashed a microservice. Pinning the build and tagging it with the word "panic" seemed to be a good idea, from inside the buildconf script : # - [Jan 2020 reading list](https://www.paulstephenborile.com/2020/02/jan-2020-reading-list/) - https://medium.com/@alexkatrompas/the-fall-of-the-software-engineer-the-rise-of-the-programmer-technician-451a572d28b0 Spotify Engineering culture : https://medium.com/productmanagement101/spotify-squad-framework-part-i-8f74bcfcd761 QUIC : https://quicwg.org/base-drafts/draft-ietf-quic-http.html Teamcity REST API : https://confluence.jetbrains.com/display/TCD10/REST+API Object-Oriented Programming — The Trillion Dollar Disaster https://medium.com/better-programming/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7 Stop using classes in JS : https://medium.com/javascript-in-plain-english/please-stop-using-classes-in-javascript-and-become-a-better-developer-a185c9fbede1 Interesting read about latency and how 99% Quantile may not be enough : https://bravenewgeek.com/everything-you-know-about-latency-is-wrong/ - [On the importance of having a second head to test code and TDD ( Coders just don't want to break their code )](https://www.paulstephenborile.com/2017/07/coders-just-dont-want-break-their-code/) - Good Coders don't want to break their code because their code is like a creature and nobody wants to harm a creature. Take a note, this is how it is. Good Coders tests are just 'combing' the code they should test. But this creature has bugs, no matter how good the Coder is, so good Coders are - [REST API Server and Windows : ASP.NET Core kestrel, OWIN or plain old IIS + ASP.NET Framework ?](https://www.paulstephenborile.com/2017/08/net-core-asp-net-kestrel-owin/) - If you are planning to build API and make them available as micro services and your code assets are C#/.NET Framework/Windows then you have some choices : ASP.NET Core comes with an internal web server called Kestrel : kestrel claims to be a light and fast web framework which runs ASP.NET Core applications without the need - [Profiling a golang REST API server](https://www.paulstephenborile.com/2018/12/profiling-a-golang-rest-api-server/) - Profiling : is a form of dynamic program analysis that measures, for example, the space (memory) or time complexity of a program, the usage of particular instructions, or the frequency and duration of function calls. Most commonly, profiling information serves to aid program optimization. How can you profile your golang REST API server in a super simple way : First - [Webassembly/wasm and asm.js](https://www.paulstephenborile.com/2019/01/webassembly-wasm-and-asm-js/) - The web assembly thing. I'll try to clarify things that I learned working on it: WASM : short for WebAssembly, a binary instructions format that runs on a stack based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust to be run on the Web. Reference here asm.js - [Yes, I like go programming language](https://www.paulstephenborile.com/2017/02/yes-i-like-go-programming-language/) - Yes, I like Go programming language. I'm liking it so much that I have to resist from being a fan boy. I'm trying to understand where all this enthusiasm is coming from (I'm a seasoned coder) so here's an attempt to find why : Code readability — and maintainability — first, language features second Integrated test environment : go test - [Top software coders bad mental habits :-)](https://www.paulstephenborile.com/2017/01/top-software-coders-bad-mental-habits-of-2016/) - New year is time for self-examination; one of the most frustrating things for a coder is writing code with bugs and bugs are almost always directly related to bad mental habits imho. This is not a complete list of any kind, it is a set of well known and widespread ones that you for sure - [Code performance myths](https://www.paulstephenborile.com/2016/03/code-performance-myths/) - One if my main tasks from 2015 on has been optimizing performance on various languages api (mainly C/C++). This post tries to recap best practices in this area. For those like me who work in IT since the z80 let me say that cpu have changed, a lot; variability in computing time in modern computer - [Bounds checking, leak checks and race conditions check with gcc sanitize](https://www.paulstephenborile.com/2018/07/bounds-checking-leak-checks-and-race-conditions-check-with-gcc-sanitize/) - If you are coding since many years in C or C++ you probably hit many tools that helped in finding memory leaks in your code as well as did bounds checking to avoid buffers overrun. Those were PurifyPlus (rational), BoundsChecker (numega). Then valgrind cameout and all linux developers were happy to run valgrind on their - [Code benchmarks : how can I measure how fast my software is (and make it faster) ?](https://www.paulstephenborile.com/2018/03/code-benchmarks-can-measure-fast-software-make-faster/) - You probably heard many times a coder say "this way is faster" : nothing can be more wrong nowadays unless you prove your statement by measuring the same piece of code running with algorithm A and algorithm B (the faster one). And there were times when you could measure the speed of the execution time - [Forecasting increase in electricity needs by introducing electric traction in automobile](https://www.paulstephenborile.com/2017/10/forecasting-increase-electricity-needs-introducing-electric-traction-automobile/) - A growth in electric vehicles on European roads will need a corresponding growth in electricity production to serve charging of these cars, both in peak production power and in total annual power. Let's take italy for example which currently has a total year consumption of around 300 TWh (terna). Considering : Charging efficency (tesla) : 0.85 % KWh/km (tesla - [Upload filters aka The Censorship machine](https://www.paulstephenborile.com/2019/02/upload-filters-aka-the-censorship-machine/) - Internet platforms hosting “large amounts” of user-uploaded content must monitor user behavior and filter their contributions to identify and prevent copyright infringement. - [Measuring memory footprint of a linux/macosx application](https://www.paulstephenborile.com/2018/10/measuring-memory-footprint-of-a-linux-macosx-application/) - If you're selling an API or an application which is deployed on production systems, one of the questions your customers might ask you is what is the memory footprint of your API/application in order for them to account for an increase of memory requirements due to using your product. After some research I think - [The Pragmatic Programmer](https://www.paulstephenborile.com/2019/03/the-programmatic-programmer/) - I think this book is full of valuable thoughts that I would like to recap in this post : A broken window. One broken window, left unrepaired for any substantial length of time, instills in the inhabitants of the building a sense of abandonment—a sense that the powers that be don't care about the building. - [When all 450.000 Tesla model 3 will hit the road ...](https://www.paulstephenborile.com/2017/11/450-000-tesla-model-3-will-hit-road/) - In a 2 or 3 years all 450.000 model 3 tesla (and probably more) will hit the road and start making an average of 16.550 miles per year. Considering : Charging efficency (tesla) : 0.85 % KWh/km (tesla model x) : 0.1875 this will translate in around 2.5 Tera Wh/year more consumption on the electric grid. Let's - [Driving a Tesla Model S in Paris](https://www.paulstephenborile.com/2018/02/driving-tesla-model-s-paris/) - My brother in law owns a Tesla model S in Paris and I had a chance to try it out last week. One of the most exciting experiences (Miles Davis would have added "with my pants on") of the last times. You are driving with almost no noise ( I know Jeremy Clarkson will hate - [When products/business units ignore each other : Samsung phone and Samsung TV](https://www.paulstephenborile.com/2017/10/productsbusiness-units-ignore-samsung-phone-samsung-tv/) - Let's assume that you have a Samsung S6 phone and a Samsung TV and that you use videostream for example to see your pc videos on the tv. So since you want to change your tv source to use chromecast you download the samsung tv remote app (which could have been already installed on a - [Self driving is the next big thing](https://www.paulstephenborile.com/2018/02/self-driving-next-big-thing/) - Just a few years ago the idea of a self driving car was seen as a futuristic technology that would take decades to arrive. Now it is only a matter of when it will be available and this thanks to startups that are shaping this segment. Here's a list (incomplete) of autonomous driving related companies, - [Design for simplicity : software options](https://www.paulstephenborile.com/2018/07/design-for-simplicity/) - (I was highly inspired by Evan Martin post before trying to recap in this post) Think twice before adding an option to a software; options are : bad user experience : good software just works without asking to many things to the user. a maintenance cost : an option is a feature you have to maintain/test - [gcc/clang -fsanitize is saving lifes](https://www.paulstephenborile.com/2018/03/gcc-clang-fsanitize-saving-lifes/) - There where times when you had to write C/C++ code and find all the bounds errors and memory leaks by hand or with ancient tools (who remembers Purify?). Valgrind introduced a lot of features but sanitize features added in gcc/clang are just awesome (thanks google guys for this). Just add -fsanitize=address both to compilation and link - [Creating logstash development environment for core or plugins](https://www.paulstephenborile.com/2018/01/creating-logstash-development-environment-core-plugins/) - I had to develop a ruby logstash plugin recently and I going to recap all necessary steps to create a clean jruby env for development : i had to uninstall ruby and install a clean jruby only stack. Not saying that this is necessary but in my case it only worked this way gpg --keyserver - [SmartOS is like having vagrant/docker/virtualbox builtin in your OS](https://www.paulstephenborile.com/2017/04/smartos-is-like-having-vagrantdockervirtualbox-builtin-in-your-os/) - I recently had a chance to try out SmartOS after my last experience in application porting on it (2012) and I was impressed by the virtualization features that are made available directly by the os. One set of commands allows downloading images, running either vm like container or namespace like containers. Zones also allow you ## Pages - [Linux time_t to datetime](https://www.paulstephenborile.com/linux-time_t-to-datetime/) - A Unix time_t is the number of seconds elapsed since 1970-01-01 00:00:00 UTC (the “epoch”). Convert in either direction below. Unix time_t → Date Enter seconds since the epoch (e.g. 1700000000) Convert date will appear here Date → Unix time_t Pick a date & time (interpreted in your local time zone) Convert time_t will appear - [To Metric Conversions](https://www.paulstephenborile.com/to-metric-conversions/) - Enter a value in the imperial / non-metric unit and click Convert to get the metric equivalent. Pounds → Kilograms Mass · 1 lb = 0.45359237 kg lbConvert result in kg Fahrenheit → Celsius Temperature · °C = (°F − 32) × 5/9 °FConvert result in °C Feet → Meters Length · 1 ft = - [about me](https://www.paulstephenborile.com/about-me/) - The short story I’m a multi-skilled IT professional with a good all-round supervisory and technicalexpertise. 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++, - [books](https://www.paulstephenborile.com/books/) - Interesting books for me that I believe should be read by who's doing my job : Makers: The New Industrial Revolution - Author: Chris Anderson The Pragmatic Programmer: From Journeyman to Master - Author: Andrew Hunt, David ThomasNo Silver Bullet: Software Engineering, Fred Brooks, Order of Magnitude, Accidental Complexity - Author: Andrew Hunt, David ThomasCode Complete - [Home](https://www.paulstephenborile.com/home/) - Tweets by paulborile ## Categories - [Uncategorized](https://www.paulstephenborile.com/category/uncategorized/) - [coding](https://www.paulstephenborile.com/category/coding/) - [golang](https://www.paulstephenborile.com/category/golang/) - [technology](https://www.paulstephenborile.com/category/technology/) - [string pattern matching](https://www.paulstephenborile.com/category/string-pattern-matching/) - [microservices](https://www.paulstephenborile.com/category/microservices/) - [automotive](https://www.paulstephenborile.com/category/automotive/) - [product design](https://www.paulstephenborile.com/category/product-design/) - [data analysis](https://www.paulstephenborile.com/category/data-analysis/) - [ruby](https://www.paulstephenborile.com/category/ruby/) - [logstash](https://www.paulstephenborile.com/category/logstash/) - [benchmarks](https://www.paulstephenborile.com/category/benchmarks/) - [dams](https://www.paulstephenborile.com/category/dams/) - [varnish](https://www.paulstephenborile.com/category/varnish/) - [copyright](https://www.paulstephenborile.com/category/copyright/) - [climate](https://www.paulstephenborile.com/category/climate/) - [decarbonize](https://www.paulstephenborile.com/category/decarbonize/) - [hacks](https://www.paulstephenborile.com/category/hacks/) - [bike gear](https://www.paulstephenborile.com/category/bike-gear/) - [readinglist](https://www.paulstephenborile.com/category/readinglist/) - [covid-19](https://www.paulstephenborile.com/category/covid-19/) - [cdn](https://www.paulstephenborile.com/category/cdn/) - [software engineering](https://www.paulstephenborile.com/category/software-engineering/) - [elasticsearch](https://www.paulstephenborile.com/category/elasticsearch/) - [bigdata](https://www.paulstephenborile.com/category/bigdata/) - [ai](https://www.paulstephenborile.com/category/ai/) - [renewable energy](https://www.paulstephenborile.com/category/renewable-energy/) ## Tags - [golang](https://www.paulstephenborile.com/tag/golang/) - [coding](https://www.paulstephenborile.com/tag/coding/) - [power plant](https://www.paulstephenborile.com/tag/power-plant/) - [hydroelectric](https://www.paulstephenborile.com/tag/hydroelectric/) - [smartos](https://www.paulstephenborile.com/tag/smartos/) - [conway](https://www.paulstephenborile.com/tag/conway/) - [composition](https://www.paulstephenborile.com/tag/composition/) - [decomposition](https://www.paulstephenborile.com/tag/decomposition/) - [software design](https://www.paulstephenborile.com/tag/software-design/) - [benchmark](https://www.paulstephenborile.com/tag/benchmark/) - [software](https://www.paulstephenborile.com/tag/software/) - [varnish](https://www.paulstephenborile.com/tag/varnish/) - [memory](https://www.paulstephenborile.com/tag/memory/) - [vmod](https://www.paulstephenborile.com/tag/vmod/) - [private pointers](https://www.paulstephenborile.com/tag/private-pointers/) - [pprof](https://www.paulstephenborile.com/tag/pprof/) - [http server](https://www.paulstephenborile.com/tag/http-server/) - [gcc](https://www.paulstephenborile.com/tag/gcc/) - [bounds checking](https://www.paulstephenborile.com/tag/bounds-checking/) - [profile](https://www.paulstephenborile.com/tag/profile/) - [cpu](https://www.paulstephenborile.com/tag/cpu/) - [rest server](https://www.paulstephenborile.com/tag/rest-server/) - [race conditions](https://www.paulstephenborile.com/tag/race-conditions/) - [fsanitize](https://www.paulstephenborile.com/tag/fsanitize/) - [profiling](https://www.paulstephenborile.com/tag/profiling/) - [google](https://www.paulstephenborile.com/tag/google/) - [c++](https://www.paulstephenborile.com/tag/c/) - [style guide](https://www.paulstephenborile.com/tag/style-guide/) - [microservices](https://www.paulstephenborile.com/tag/microservices/) - [rest api](https://www.paulstephenborile.com/tag/rest-api/) - [grpc](https://www.paulstephenborile.com/tag/grpc/) - [quic](https://www.paulstephenborile.com/tag/quic/) - [wangle](https://www.paulstephenborile.com/tag/wangle/) - [apache thrift](https://www.paulstephenborile.com/tag/apache-thrift/) - [tchannel](https://www.paulstephenborile.com/tag/tchannel/) - [finagle](https://www.paulstephenborile.com/tag/finagle/) - [docker](https://www.paulstephenborile.com/tag/docker/) - [rkt](https://www.paulstephenborile.com/tag/rkt/) - [envoy-proxy](https://www.paulstephenborile.com/tag/envoy-proxy/) - [traefik](https://www.paulstephenborile.com/tag/traefik/) - [haproxy](https://www.paulstephenborile.com/tag/haproxy/) - [nginx](https://www.paulstephenborile.com/tag/nginx/) - [prometheus](https://www.paulstephenborile.com/tag/prometheus/) - [sysdig](https://www.paulstephenborile.com/tag/sysdig/) - [sensu](https://www.paulstephenborile.com/tag/sensu/) - [zabbix](https://www.paulstephenborile.com/tag/zabbix/) - [nagios](https://www.paulstephenborile.com/tag/nagios/) - [consul](https://www.paulstephenborile.com/tag/consul/) - [zookeeper](https://www.paulstephenborile.com/tag/zookeeper/) - [netflix eureka](https://www.paulstephenborile.com/tag/netflix-eureka/) - [geospock](https://www.paulstephenborile.com/tag/geospock/) - [logstash](https://www.paulstephenborile.com/tag/logstash/) - [kibana](https://www.paulstephenborile.com/tag/kibana/) - [openapi](https://www.paulstephenborile.com/tag/openapi/) - [swagger](https://www.paulstephenborile.com/tag/swagger/) - [apiary](https://www.paulstephenborile.com/tag/apiary/) - [aglio](https://www.paulstephenborile.com/tag/aglio/) - [kestrel](https://www.paulstephenborile.com/tag/kestrel/) - [owin](https://www.paulstephenborile.com/tag/owin/) - [over engineering](https://www.paulstephenborile.com/tag/over-engineering/) - [design](https://www.paulstephenborile.com/tag/design/) - [bugs](https://www.paulstephenborile.com/tag/bugs/) - [premature generalization](https://www.paulstephenborile.com/tag/premature-generalization/) - [accidental complexity](https://www.paulstephenborile.com/tag/accidental-complexity/) - [essential complexity](https://www.paulstephenborile.com/tag/essential-complexity/) - [feature creep](https://www.paulstephenborile.com/tag/feature-creep/) - [second system effect](https://www.paulstephenborile.com/tag/second-system-effect/) - [kiss](https://www.paulstephenborile.com/tag/kiss/) - [yagni](https://www.paulstephenborile.com/tag/yagni/) - [dry](https://www.paulstephenborile.com/tag/dry/) - [less is more](https://www.paulstephenborile.com/tag/less-is-more/) - [go](https://www.paulstephenborile.com/tag/go/) - [rust](https://www.paulstephenborile.com/tag/rust/) - [swift](https://www.paulstephenborile.com/tag/swift/) - [uml](https://www.paulstephenborile.com/tag/uml/) - [git](https://www.paulstephenborile.com/tag/git/) - [atom](https://www.paulstephenborile.com/tag/atom/) - [sublime](https://www.paulstephenborile.com/tag/sublime/) - [nosql](https://www.paulstephenborile.com/tag/nosql/) - [simplicity](https://www.paulstephenborile.com/tag/simplicity/) - [simplicity is the ultimate sophistication](https://www.paulstephenborile.com/tag/simplicity-is-the-ultimate-sophistication/) - [teamcity](https://www.paulstephenborile.com/tag/teamcity/) - [panic](https://www.paulstephenborile.com/tag/panic/) - [automation](https://www.paulstephenborile.com/tag/automation/) - [tests](https://www.paulstephenborile.com/tag/tests/) - [software engineering](https://www.paulstephenborile.com/tag/software-engineering/) - [javascript](https://www.paulstephenborile.com/tag/javascript/) - [object oriented programming](https://www.paulstephenborile.com/tag/object-oriented-programming/) - [fail fast](https://www.paulstephenborile.com/tag/fail-fast/) - [personal feedback](https://www.paulstephenborile.com/tag/personal-feedback/) - [video call fatigue](https://www.paulstephenborile.com/tag/video-call-fatigue/) - [envoy proxy](https://www.paulstephenborile.com/tag/envoy-proxy-2/) - [fast cache in go](https://www.paulstephenborile.com/tag/fast-cache-in-go/) - [rearchitecting](https://www.paulstephenborile.com/tag/rearchitecting/) - [PartitionAlloc](https://www.paulstephenborile.com/tag/partitionalloc/) - [Reward and Recognition](https://www.paulstephenborile.com/tag/reward-and-recognition/) - [chess](https://www.paulstephenborile.com/tag/chess/) - [AssemblyScript](https://www.paulstephenborile.com/tag/assemblyscript/) - [leadership](https://www.paulstephenborile.com/tag/leadership/) - [readability](https://www.paulstephenborile.com/tag/readability/) - [ai](https://www.paulstephenborile.com/tag/ai/) - [agent framework](https://www.paulstephenborile.com/tag/agent-framework/)