Originally a blog about PWKF, an easy-to-use workflow solution, but as my interest in PWKF faded, it evolved into a generic blog.
Therefore now it is more about random thoughts, Munin or even low-level techy stuff I’m doing with my sons.
Posts
Drive a WS2812B strip with an UART
About 11 min readThe WS2812B is the powerhorse of modern RGB leds. The protocol to drive them is very simple, but not to easy to implement as it involves precise timings. Since another protocol that involves precise timings is UART, it makes sense to try to combine them.
Read More...Post Modern Cloud Native Development
About 4 min readMoving everything to the cloud is now mainstream, and Cloud Native Development mindset took over.
- It has been successfully marketed as the only solution to every problem.
- No-one wants to work on boring tech anymore.
- It has become a Self-fulfilling prophecy.
Adding some Color
About 3 min readSmall touches of color are always nice. It is actually very easy to do with Jekyll.
Read More...Serverless MCU Lambdas - A Working Emulator - Part 1
About 6 min readA follow-up of my Serverless MCU Lambdas idea. It is comprised of 3 phases :
- HTTP/CGI
- Generic RV32I emulation
- Specific RV32I emulation (curl, I/O, memory functions, …)
1OPS - One Operation Per Statement
About 14 min readThe 1OPS principle is the single principle that had the biggest impact in my entire coding career. I gave some hints about it in a previous post, but I was suggested that it might warrant a post on its own to go more in depth.
Read More...Immutability of a Post
About 2 min readURLs shall be immutable. But what about the post content itself?
Read More...Serverless MCU Lambdas
About 3 min readI want to learn more about bare metal MCU programming. So I came with a crazy idea: instead of emulating webassembly, let’s emulate a RiscV MCU in serverless style.
Read More...Cool Stuff versus Useful Stuff
About 14 min readThe main mindset driving development nowadays is web scale and modern stack. Most of the literature is therefore focusing on it, reinforcing the trend, as described in a previous post. Which makes them therefore very desirable, hence attractive to even more literature. And this usually leads to the creation of a hype-laden echo chamber.
Read More...glCombat - Week 2 - Projectiles & Explosions
About 4 min readAnother week has passed. But this time, things have slowed down as real life took its toll. Focus was on the projectiles and their explosions.
Read More...glCombat - Week 1 - Map
About 9 min readOne week has passed. As usually wih new projects lots has happened.
Read More...Starting a GameDev Series
About 7 min readI tried Ground Control some time ago with my sons, it was working very nicely on Windows but was horribly slow on Linux with Wine. Visuals were flawless, just very slow. I started to investigate the Wine codebase to fix it. Little did I know what I embarked on.
Read More...Mission Logs are our Tracer Bullets - Always Use Them
About 6 min readExploratory work is often needed when trying a novel idea. As a good idea at first might end up highly impractical in reality. Which is why when doing a PoC, the outcome is not always a success. If it was, it would be a prototype.
Read More...Micro-services are Mostly Harmful in Your Case
About 14 min readMicro-services are very fashionable nowadays but the real questions are:
- What do they really bring to you?
- What is their hidden price?
- Can you avoid paying that price?
USB-C Connectors Explained
About 6 min readHaving a USB-C device that only works when the cable is inserted on one side ? Having a USB-C device that only works with USB-A to USB-C cables ? While USB-C is a wonderful standard, it has its little quirks.
Read More...Always Optimize for Junior Devs
About 16 min readThere is a single advice I would give to anyone writing software, and specially to great devs : Always optimize your code for your most junior developers. I agree that it is not a very popular advice, but it is the one that, in my experience, give the biggest bang for the buck.
Read More...Emulating 8051 with AVR
About 3 min readAs stated before, 8051 is here to say. Very much like the 8086 is still alive with the newest x86-64 architecture. Since the Arduino Uno is the de-facto form factor for many things, let’s try to emulate 8051 on AVR.
Read More...Sizes of SMD Components Explained
About 1 min readThrough-hole tech is very nice for hobbyists. But it is getting obsolete. And many components are not available anymore in anything else than SMD. The main problem is that there isn’t a single standard size anymore
Read More...Enhance an 8051 Simulator
About 4 min readAs a followup of my clock kit, I’m growing a genuine interest into the 8051. While more modern MCU are vastly more powerful, the 8051 is just barely as complex as needed to be useful. That’s a sweet spot that makes it invaluable for learning purposes.
Read More...Simple AT89C2051 programmer with Arduino
About 3 min readSeveral AT89C2051 programmers exists. The most advanced one being the one from Paul Gallagher, as it is fully constrained. Even generating the 12V onboard with a charge pump.
Read More...Adding Navigation Links
About 2 min readNavigation inside a blog site is essential to discover related content.
Read More...Adding Comments to a Github Pages Blog
About 2 min readJekyll makes it super easy to host a static blog on github pages. It feels like a match made in heaven, as it becomes really serverless. Just write some Markdown and do a git push for publication. Everything else is nicely handled for you by Github.
The biggest downside is, being static, it obviously lacks comments. Disqus fits that gap nicely, but I don’t like to rely on another service. Besides Github issues are already implementing a comment system, so let’s reuse that.
Read More...A Tale of Two Programming Religions
About 4 min readThe obvious but overlooked secret of computing is that it is always about only 2 things:
Read More...Test Markdown Formatting
About 1 min readFormatting is important!
Read More...Many ways to Blink a LED
About 4 min readBlinking a LED is the electronics equivalent of the famous “Hello World!”. Therefore it has a very special meaning, and it is also the basis of “clocks” which are very imprtant in digital electronics.
Read More...Minimal NE555 Blink
About 2 min readMy son recreated the “blink” with a NE555 and tried to remove the wire from RESET pin to VCC. It actually worked well, and we wondered “what’s the minimal BOM for a NE555 blink ?”.
Read More...DIY 4-digit Clock Hacking
About 5 min readI got my hands on a 4-digit clock DIY kit. Soldering it is rather easy, and it works as advertised.
Read More...Emulating Logic Gates with an ATmega328P MCU - Part 1
About 6 min readI’m discovering the world of electronics with my son. We encountered to some nice videos that are about recreating a whole CPU with only logic gates. The most well known one being the one from Ben Eater and the one from the NAND2Tetris project.
Read More...Humble Beginnings in Electronics
About 3 min readWhen I was this summer at my parents, I rediscovered a long-forgotten “electronics lab box”. I was super glad, since it was that box that enabled me to get into electronics. Not the digital kind with micro-controllers, but the old-school analogic one, with transistors, resistors & capacitors.
Read More...Fix the HDMI output in the ODROID-HC4
About 7 min readI bought an ODROID-HC4, but it didn’t work with my TV. Let’s fix it.
Read More...Using Computer Modern Fonts
About 1 min readI always tried to have a minimalist blog style. I almost totally agree with Fabien Sanglard’s 0x10 rules, except on the part with “monotype fonts”.
Read More...Fun Yet Effective Meetings
About 9 min read⚠️ This article is extreme & satirical on the purpose of being thought-provoking. Therefore, please, do take it with some grain of salt.
This is a followup of my Remote-mostly working is a paradigm shift.
Remote-mostly working is a paradigm shift
About 4 min read💡 As our daily life has been disrupted and work-from-home is slowly becoming the new normal, distributed teams are much more common. But normal work patterns don’t translate immediately, they have to be adjusted.
How to try Munin 2.1.x easily in Debian-derivatives
About 1 min readIn my previous post I explained how to setup a simple development environment, but I feel that's a little too much if you only want to try that new, shiny, munin version. Read More...
Tutorial - Setup a dev environment for Munin
About 4 min readI discovered some time ago the marvelous
dev_scripts/
directory in the munin source code. So, as its usage is very easy, I'll just write a tutorial about how to use it Read More...Experimenting with a C munin node
About 1 min readAs I wrote about it earlier, Helmut rewrote some core plugins in C. It was maintly done with efficiency in mind. Read More...
Spinoffs in the munin ecosystem
About 7 min readMunin's greatest strength is its very KISS architecture. It therefore gets many things right, such as a huge modularity. Read More...
Do not fear git rebase : make snapshots !
About 1 min readGit is a nice version system, but some commands are destructrive, such as rebase. Read More...
When having good relationships with package maintainers can also be a curse
About 2 min readI advise every user to only use the packaged version of munin. Here's a short article to explain the background of my reluctance to ask for users to directly use the official tarball. Read More...
Avoid those milli-hits in Munin
About 1 min readA recurring question on IRC is :
why do I have 500 million hit/s in my graph ?
. Read More...Enhance RRD I/O performance in Munin 1.4 and Scale
About 1 min readAs with most of the RRD-based monitoring software (Cacti, Ganglia, ...), it is quite difficult to scale. Read More...
Autovivification in Perl : Great Idea but also Huge Trap - Another Leaking Abstraction...
About 2 min readAutovivification is one of Perl's really great design success. Read More...
Waiting for Munin 2.0 - Break the 5 minutes barrier !
About 4 min readEvery monitoring software has a polling rate. It is usually 5 min, because it's the sweet spot that enables frequent updates yet still having a low overhead. Read More...
Waiting for Munin 2.0 - Keep more data with custom data retention plans
About 3 min readMunin keeps its data in an RRD database. It's a wonderful piece of software, designed for this very purpose : keep an history of numeric data. Read More...
Waiting for Munin 2.0 - Native SSH transport
About 2 min readIn the munin architecture, the munin-master has to connect to the munin-node via a very simple protocol and plain TCP. Read More...
CGI on steroids with FastCGI, but on a CGI-only server - The FastCGI wrapper
About 3 min readFastCGI is very common way to increase performance of a CGI installation. It is based on the fact that usually the startup of CGI scripts is slow, whereas the response is quite fast. Read More...
Waiting for Munin 2.0 - Performance - Asynchronous updates
About 4 min readmunin-update
is the fragile link in the munin architecture. A missed execution means that some data is lost. Read More...Waiting for Munin 2.0 - Performance - FastCGI
About 5 min read1.2 has CGI, it is slow, unsupported, but it does exist. Read More...
Waiting for Munin 2.0 - Performance - Architecture
About 2 min readMunin has a very simple architecture on the master :
munin-cron
is launched via cron every 5 minutes. Its only job is to launch in ordermunin-update
,munin-graph
,munin-html
&munin-limits
. Read More...Waiting for Munin 2.0 - Introduction
About 1 min readThis is the first article of a series about the coming version 2.0 of Munin. Read More...
Don't use Excerpt... At least with DotClear.
About 1 min readDotClear automatically generates a
meta description
tag from the blog entry, but it doesn't take the excerpt into account. Read More...API Design: Avoid hidden costs of simple features
About 4 min readProgrammers are usually like water : they always use the path of least resistance. Read More...
Compile-Time Polymorphism for Cross-platform Development
About 8 min readWhen doing cross-platform development, the common usage is preprocessor
Read More...#ifdef
macros to compile specific parts. This quickly makes the code unreadable.Native SSH transport for Munin
About 1 min readActually the tunnel won't disappear, but they will be launched only when needed and, most importantly configured in
munin.conf
. Read More...Sed is much slower than Perl, or not...
About 1 min readI wanted to do some text replacement with a huge file (think ~18GiB), filled with huge lines (think ~2MiB per ligne)[1]. Read More...
Synchronize clock between hosts with SSH
About 1 min readNTP is very handy for server clock synchronisation, but it can be cumbersome to deploy. Read More...
Overloading a method is hard : a common pitfall
About 1 min readAs I said in my equality article, overloading in Java[1] is resolved by the static type of the argument, not the run-time type. Read More...
Free Exception lunch : Use unchecked exceptions, but still announce which ones you might throw.
About 1 min readIn a previous article I choosed my side : Unchecked Exceptions are much simpler to use. Read More...
Databases: Efficient Case-insensitive searches with Function-based Indexing
About 4 min readCase-insensitive search is sometimes very useful, but a naive approach can be very harmful to your performance. Read More...
Databases: Better Defer Constraints than Avoid Them
About 3 min readConstraints are a very important tool in a programmer's belt. But they come with a price, which can usually be mitigated simply. Read More...
Equality in Java is a Hot Topic, but a Hazardous one.
About 1 min readIt seems that comparing two objects isn't as a simple task to do as it seems at first. Read More...
Synthetic Style for Blog Posts : Presentation Style Blogging
About 2 min readBlogging has become so mainstream it is fading away to more modern media, not with some drawbacks. With some enhancements, we can have the best of both worlds. Read More...
Compare Efficiently in Java : Embrace Smart Comparison
About 5 min readBill the Lizard shows us a nice trick to avoid this NPE when used with string literals : call the method on the string literal. It's possible because it's also an object, and cannot be
null
. Read More...Are Excerpts a Good Thing ?
About 1 min readOne thing I'm really wondering is :
Should I use excerpts
? Read More...Databases: Efficient Denormalization with Views
About 3 min readOn the other side, to denormalize is sometimes seen as a way to : Read More...
Surrogate Keys : Globally Unique, Application Unique or Type Unique ?
About 7 min readType unique : One sequence per table
The most common idiom out there. Just define a surrogate key per table, usually done via an
auto_increment
field,serial
field or asequence
per table. Read More...Immutability of an URL
About 1 min readIn the pure spirit of Data is King I think that URL should never change. Even the W3C agrees with their Cool URIs don't change article. Read More...
Bringing C++ Const to Java
About 12 min readIn Java, the commonly accepted way is to use the
final
keyword. But it has a major drawback : the object cannot be redefined, but can be modified by calling mutable members. You have to convert it to an immutable type. This is a simple task, but radically different ways exists. Read More...Checked or Unchecked Exceptions for Legacy Code ?
About 3 min readIn theory checked exceptions are quite nice since the called code can communicate with it's caller when something unexpected happened. Read More...
Email Ping to Comments Reply on Blogs
About 1 min readAs a blog writer I can receive the comments written on my blog via email. Read More...
Should The URL Include a Date, or Not ?
About 3 min readA common issue is that a blog entry takes time to be written, refined and then published. Therefore the date contained in the URL isn't the publication time. But since the publication time is the time the entry is created in the point of view of the public the date in the URL conveys only little meaning, just the time is took to create it. Read More...
Databases: Partial Indexing
About 5 min readLet's take the table that contains orders that we created in my previous post to show you some examples. Read More...
Databases: Version History
About 3 min readOne concept gaining huge momentum lately is file versionning (mostly Git and Subversion). It is quite interesting to track the evolution of the data contained in the files, and not only the last time the file was updated. Read More...
A Simple Dns Server for a SOHO Network
About 1 min readI'm in search of a very simple DNS Server for a small network. It should be : Read More...
Databases: Meta-Data (ctime & mtime)
About 4 min readHaving this, knowing the last modification of an item is as easy as querying this extra information that is updated automatically by the system. Read More...
A Poor Man's Munin Node to Monitor "Hostile" UNIX Servers
About 4 min readMunin is a nice monitoring system. Simple but quite effective. It's main selling point is the UNIX-esque simplicity of the architecture. You can just create a new plugin in a matter of minutes to monitor whatever you can imagine. Read More...
Daisy Chain Setters and Handle Optional Parameters Effectively
About 4 min readThe Pure RAII way
You use many different constructor signatures. It's quite suboptimal if you have many parameters that have nothing in common except their type : you have to use the infamous null, or have a special value that conveys a not specified meaning. Read More...
RAII in Java to clean your code
About 3 min readRAII is a very common idiom in C++ and some other languages that don't have an integrated garbage collection management. Read More...
Why Negative comments are better than positive ones
About 3 min readWhy Negative comments are better than positive ones If you are reading this blog and thinking
Hey ! What a He's just talking nonsense...
please don't walk away in horror. It would be very much appreciated if you drop me a comment about what is wrong in my post instead. I actually prefer to have negative comments than positive ones... at least when they are well argumented. Read More...Speed Up OpenOffice with LeapHeap
About 1 min readUsing a new heap manager like Leap Heap under windows takes OpenOffice to blazing speeds. Tried the same with FireFox with the same conclusions. Read More...
A Little History of PWKF
About 6 min readIt all began with a scratching need as I just felt that workflows (mostly BPM engines to be more precise) were the way to do many things in IT of the future. There are even many workflows out here already. My main feeling was that they put too much emphasis on how much of the standard they support, mostly in order to be "Entreprise Grade". Read More...
Use Immutable Objects to Avoid Synchronisation
About 4 min readWith the future and its multiple core environnements as stated in a previous post about workflows, efficient locking will be more and more an issue. Read More...
Keep your caches coherent : Scope them !
About 3 min readYou can mostly have these kind of scoping
- Sub-routine (typically a function or a statement bloc)
- Request (typically in a
HttpServletRequest
) - Session (typically in a
HttpSession
) - Node (typically in a JVM)
- Application (typically on a specific node)
- Time (typically a filenumber per day / most cached values)
Here we encounter at last the Time scope. This one is the hardest to cope with when it come to cached values. Usually a quick and dirty caching is done with a combinaison of a Map that contains Keys linked to a TimedValue. The last part is composed of the value itself and a sort of expiration date (can also be implemented with a manufactured date).
The biggest problem with these time-scoped values are that they are not easily updated to maintain coherency with the value they should be a copy of. It involves that for each update, we manage to find the cached value and either delete it (so that it can be recomputed later) or update it. It’s not really acceptable since :
- it is really coding-wise intrusive (you have to seek every place that you update an element of the calculation of the cached value) to put triggers everywhere, and therefore not really practical, not to say sometime not even possible (you don’t own the whole code)
- it is really performance-wise disastrous : for every write you do, you have to fire the trigger to update all your caches that impacted from this update.
So, usually this triggering is just avoided, and the cache is left in a non-coherent state. And in reality it ends up in a fighting of speedup vs accuracy.
But this fight sometimes can be avoided if you scope correctly your caches by storing it in an appropriatly scoped variable and not as usually done in a static variable. It will have the same effect as a transaction in a database since it’s basically a copy-on-read scheme. Putting it in an appropriatly scoped variable has the net effect of relieving of pruning the cache with data that are not valid anymore without any extra effort.
This lays the premice of STM that will be something that will really count in the era of massive-multi-core-computing (MMCC) that we are beginning to enter with processors like Sun’s Niagara T2 and its 64 thread per CPU.
Read More...Clean-Up Your Code and Boost Your Google Ranking at the Same Time : Post-process Your Links
About 2 min readThe search engine ranking of a web site is very important nowadays. As usually every optimisation means an complexification of the code, many developpers just pay that price. It's mostly paid with a javascriptification of the links that we don't want to be followed, and javascriptification of functional dialog popups. Read More...
Convert your Log Files into Gold
About 6 min readLog files are a necessary evil on a live system. A few rules can transform your log files from a useless heap of textfiles to a gold mine. Read More...
Are Workflows the Future of IT Computing ?
About 3 min readWe are about to change from a "CPU power is cheap"-paradigm to a "CPU are cheap"-one. Everyone knows now that the 10Ghz barrier will not be that easily broken like said Herb Sutter in his famous The Free Lunch Is Over DDJ article. Read More...
Should SQL die, and can it ?
About 3 min readI just draw a comparison of the data language and the general languages : Read More...
Avoid the runtime penaly of Singletons
About 2 min readA common way to do the Singleton pattern involves a
getInstance()
method which does a runtime test like this : Read More...Inheritance of a public method considered harmful
About 2 min readI'm always wondering why all textbooks and reference material on the web always describe inheritance with the same kind of example : Read More...
First (Real) Post
About 1 min readThis is my first attempt at making a live blog. It should have been a way of expressing my progress of one of my pet project : Personal Workflow. Read More...
subscribe via RSS