At A Glance Main Projects Tutorials Resume


Email: palen1c at

Rabbit MQ Binary Protocol Observability and Cyclic Technology Trends

Mon, 19 Dec 2022 11:55:58 EST

Rabbit MQ is an amazing messaging system deployed across thousands of organizations worldwide. Most organizations seem to be using RabbitMQ as a way to orchestrate operations between microservices. I recently used RabbitMQ to orchestrate multiple mobile apps, a core application state service, and a video rendering cluster. Rabbit primarily implements an interesting protocol called AMQP 0-9-1. AMQP 0-9-1 is a binary protocol. I used AMQP 0-9-1 in my implementation and have not experienced any issues yet, despite tough network conditions. Binary protocols are notoriously difficult to monitor. Observability is an important part of measuring and monitoring any system.

An artistic generated image of the Python logo.
At some point along the way, RabbitMQ provided a functionality they refer to as "firehose" where you can get copies of messages. I am assuming that debugging and observability became important after they ironed out the bugs with the initial server implementation. At the time of writing, RabbitMQ also provides several other interesting protocols including STOMP, MQTT, AMQP 1.0, WebSockets, and RabbitMQ Streams.

As a global technology community, we have been here before but under different conditions. I spent considerable time working with the AMF ( protocol early in my career routing messages between PHP, Flash applications, and media servers. AMF is also a binary protocol. AMF was a brilliant and successful protocol for the time period it thrived in. Flash was able to accomplish wide spread real time VOIP and streaming capability before any other platform in large part due to AMF as well as the other protocols developed along side it like, RTMP, RTMPS, and finally the video streaming greatest of all time, HLS.

I have also spent quite a bit of my time working with the XMPP messaging protocol for various personal projects. In particular I have spent time with the Openfire server. You may not want to, but I do not see any reason at a high level why you could not substitute RabbitMQ as a message bus for Adobe Media Server or Openfire. Obviously RabbitMQ has been tuned to be a modern message queue and broker, but many systems of the past have also served in this capability.

I feel like some of these fads are cyclical. Old is now new again, but there are major underlying changes driving the cycles. The massive driver happening right now is the migration away from on premise application and infrastructure to cloud infrastructure. When done successfully, you can understand the organizational wins. Businesses are hoping that this migration will become more cost effective and scalable in the long run. I couldn’t help but laugh when reading about Ubers Devpod Remote Development Environment. With massive code repositories you can understand the speed enhancement by moving a development environment all the way into the cloud. This is another cyclical cycle but slightly different that we saw when terminal and mainframe models were prevalent.


Increased Adoption of Python Across the United States

Mon, 5 Dec 2021 11:54:58 EST

Python is permeating just about every industry you can think of. Many of the baseline AI models sweeping the industry by storm use Python frameworks and tooling. What is the reason for this phenomenon? I have been asking this question for the past few years. I have assembled a litany of reasons for this.

An artistic generated image of the Python logo.
1. Python has become the most taught introductory programming language for universities according to the ACM. This shift happened roughly around 2015 when it overtook Java. Prior to that, Java replaced C++ as the dominant introductory language. As a developer for several years I can understand why this happened. Java is an amazing language, but it is difficult to jump right in to without a very large object oriented understanding. With Python you can follow simple examples to get your first program running right away.

2. Python has gained a reputation as being synonymous with machine learning (ML). ML has been one of the hot areas in computer science for the past few years.

3. Python is easy to get installed and running across platforms. With the addition of pip for package management, it allows anyone to get started at a basic level even with examples including dependencies. I have spent a lot of time using the node package manager (npm) and docker hub as well. I do not like the package managers for anything serious, but they are great for examples. How can you verify software supply chain integrity by just blindly installing dependencies? However, package managers simplify dependency updates greatly.

4. Getting started with Python does not require object oriented concepts to get something running. It does a great job allowing developers to approach those concepts as they advance.

A simple RabbitMQ Python program.
5. Python is not statically typed, meaning variable types are not strictly enforced. I can see how this would be easier for people, but in my experience static variable typing is one of the most important foundations of testing and building large code bases. Non static enforcement allows slick polymorphism that can save lines of code. Polymorphism is an object oriented programming concept where an object can behave like several things without explicitly being them. However too much polymorphism in my experience tends to create code bases that cannot be tested and grown in reliable ways.

The major problem I have with Python is the syntax requiring indentation and non explicit line/expression endings. In many programming languages you close a statement with a semicolon. Indentation does not matter and is something you do to help make code more readable. In Python, indentation is used specifically to direct code execution flow. Not having the right indentation can cause compiler errors in Python. Despite this annoyance, I have been lucky to deploy successful applications with Python. I most recently used Python to create an orchestration back end incorporating RabbitMQ.


Lessons Learned Developing for an Eink Display

Mon, 6 Oct 2020 11:55:58 EST

I recently spent a bit of time becoming familiar with the Boox Max 2 tablet with Eink display. I worked on an application for an auto manufacturer that could search patents using an app targeted for mobile. The Boox Max 2 runs Android, but is slightly modified to accommodate the special display, and vendor modified OS.

A boox max 2 running a custom program.
There were a few interesting quirks developing for the Eink display. This particular display had an excellent refresh rate. I could play video with smooth results. The display basically takes colored images and automatically displays them greyscale. You can see a review of the Boox Max 2 here:

A demonstration of custom programming on an eink display.

The only interesting quirk that I encountered on this device was when switching static screens. For instance switching from a search display to a patent result display.

During this complete screen transition, some times a latent image of the previous screen would remain burned into the new display. To remedy this, you can wash the entire screen with white or black for a short duration. That will force the display to completely re-render the next screen.

Techno Gumbo RSS Feed Michigan Livestock Data Services The Research Computing and Engineering Podcast