OPRETO BLOG

8-bit Makes a Better Programmer

8-bit Makes a Better Programmer

3 minute read

In the realm of modern programming, with its high-level languages and sophisticated development environments, the art of programming an 8-bit microcomputer might seem like a quaint, if not obsolete, pursuit. However, diving into the world of assembly language programming on such a system isn’t just a nostalgic trip down memory lane; it’s a journey that offers invaluable insights and a deeper appreciation for the inner workings of computers. Modern software development would be almost unrecognizable to the microcomputer programmer of forty years ago. At a basic level, the languages and concepts wouldn’t be too foreign: we still write if statements and for loops, and object-oriented programming was already in vogue by 1984. But modern applications are internet-centric, use GUIs and 3D graphics, rely on distributed version control and CI/CD to get built, depend on various runtimes and interpreters, and above all, sit so high in an immensely complex hierarchy of abstractions that it’s ...

Threat Categories, Attack Patterns, and Countermeasures: Safeguarding Against Cyber Vulnerabilities

Threat Categories, Attack Patterns, and Countermeasures: Safeguarding Against Cyber Vulnerabilities

2 minute read

Recently, our community in Windsor, Ontario, Canada, experienced a harrowing cyber attack on our healthcare system. The electronic systems that the hospital system relied on suddenly became useless, forcing workers back to the rudimentary pen-and-paper methods. This sudden regression in technology not only disrupted healthcare operations but also painted a stark picture of our vulnerabilities in the digital age. This incident was more than just an inconvenience; it was a dramatic step backward, highlighting the urgent need for resilient cybersecurity measures to protect our most critical services and data. Understanding these threats involves more than just preventing attacks. It’s about knowing different types of risks and patterns attackers use, like phishing - deceptive emails or messages aiming to steal sensitive information, and ransomware - malicious software that locks out users from their systems until a ransom is paid. Being aware of these tactics is crucial in developing ...

I Went to a Remote Cabin to Hunt Deer and All I Found Was Agile

I Went to a Remote Cabin to Hunt Deer and All I Found Was Agile

5 minute read

I was stunned to realize my father in law, a man in his 70s, is a practitioner of Agile. I found this out at Deer Camp, the remote off-the-grid cabin in the thick woods of the Upper Peninsula of Michigan, where the men of my wife’s family gather every year to hunt deer. I went there with the expectation of a digital cleansing of some kind, I think, or some grand hermitage away from civilization. But instead I found reinforcement for everything we do in my high tech job @Opreto, and realized during my time there that our hunting cabin uses good Agile practices. It seems clear to me now that something I thought of as modern is actually quite old, and that an “agile team” approach to deer hunting is as natural as an agile approach to software development, although there are arguably fewer websites disclaiming this fact to hunters than those proliferating on blogs about software development. This realization felt like a bit of a shock when it first occurred, but really it is part of th...

You're validating email addresses all wrong!

You’re validating email addresses all wrong!

7 minute read

Ever tried entering your email address, only to receive a “Please enter a valid email address” error? Frustrating, right? There’s a lot more to email validation than just spotting an ‘@’ and a ‘.com’. Dive into the world of RFCs where email addresses are not just strings, but a complex interplay of rules and standards. From the subtle nuances of RFC 5321 and 5322 to the curious world of quoted strings and dot-atoms, we’re tackling the real challenge of validating emails. Because let’s face it, nobody wants to be told their perfectly good email is “invalid” – especially not by a machine. Imagine you’re tasked with building a form to collect email addresses for a client. Simple enough, right? At first glance, it appears trivial, but the real challenge lies beneath the surface: ensuring the validity of these email addresses. This goes beyond the basic checks for an ‘@’ symbol or a domain suffix. It delves into the intricacies of what constitutes a valid email address according to est...

Escape from Agile

Escape from Agile

2 minute read

I discovered Erich Fromm’s Escape from Freedom a couple years ago, via the Philosophize This! podcast. In this work, Fromm dissects the human psyche’s intricate dance with freedom and authority. His thesis pivots around a paradoxical tendency in human behaviour: the flight from the liberating yet daunting responsibility that freedom entails, seeking refuge in authoritarian structures. While Fromm was reacting to the rise of fascism in Europe at the height of World War II, having fled Nazi Germany himself, it occurs to me that some of his observations are relevant to a matter more mundane: the resistance we often encounter to fully embracing Agile principles. Fromm posits that individuals often gravitate towards authoritarianism to escape the burdens of freedom—making choices, and shouldering responsibility for those choices. Agile, with its ethos of flexibility, adaptive planning, and shared responsibilities, deviates sharply from the more rigid, hierarchical structures of traditi...

Cognitive Biases in Agile Estimations and How to Avoid Them

Cognitive Biases in Agile Estimations and How to Avoid Them

7 minute read

Cognitive biases, often unconscious influences on human judgment and decision-making, can significantly distort the accuracy of Agile estimations. These biases, like invisible bugs in our mental software, can lead to errors that affect the outcomes of project planning. Whether it’s anchoring to the first piece of information heard or overly optimistic predictions about project timelines, they can subtly undermine the efficiency of even the most experienced Agile teams. In Agile software development, estimation is a critical process that determines project timelines, resource allocation, and, ultimately, the success of a project. The accuracy of these estimations is important but frequently jeopardized by the human propensity to cognitive biases. As teams increasingly implement “Sprint Poker,” a blind team-based estimation game for gauging task complexity, recognizing and addressing these biases becomes crucial. Let’s move from theory to practice and see how these biases play out d...

Agile Software is an Immortal Jellyfish

Agile Software is an Immortal Jellyfish

4 minute read

Anyone who has ever purchased software is aware that it must be updated occasionally to a new release, with new features and security and performance updates. And anyone with a huge reliance on the work facilitated by that software is acquainted with reading changelogs to stay current with changes that have been made, as the changes may often impact the end user and how they use the tool. Software should never stop moving or be allowed to become static. The moment a codebase stops changing, it becomes vulnerable to software rot; a gradual decline in responsivity and updates with respect to the changing environment in which it resides. As the digital world becomes more complicated, and attack vectors become more nuanced and intricate, software needs to stay abreast of changes or it falls behind and develops new vulnerabilities. This is easily understood from a naturalistic viewpoint as being analogous to rot, although it is in fact standing still and not changing at the same rate as ...

Metrics as Beacons, Not Scorecards: My Take on Software Metrics

Metrics as Beacons, Not Scorecards: My Take on Software Metrics

1 minute read

Metrics in software development are like fire - handy but dangerous if not handled correctly. Let’s get into a topic that deserves a brighter spotlight: the Hawthorne Effect. This phenomenon describes how people change their behavior when they know they’re being observed. Knowing that metrics like sprint velocity, build frequency, test coverage, or codebase contributions are being scrutinized can shift the team’s focus from delivering value to gaming numbers. Why is the Hawthorne Effect so critical in modern software development? Imagine a development team keenly aware that sprint velocity is being monitored as a performance indicator. The team might be tempted to inflate story points or cut corners to complete tasks faster. Similarly, focusing on build frequency could lead to more frequent but less meaningful builds. And let’s not even get into how aiming for high test coverage could result in poorly designed tests that tick a box but don’t enhance code quality. Joel Spolsky warne...

DevOps for Robotics

DevOps for Robotics

6 minute read

DevOps, a set of practices designed to automate and integrate the processes between software development and IT operations, has transformed how we deliver cloud and web applications over the past decade. Although the language used to illustrate these practices in books and courses is rather particular to that technical domain, the principles can apply more broadly. The world of robotics—specifically, mobile robots like self-driving cars and autonomous mobile robots (AMRs)—is a domain the usual language of DevOps doesn’t immediately conjure, but where its concepts can nonetheless flourish. I worked as a research engineer and software developer in robotics through most of the history of the DevOps movement, first in self-driving cars and then in AMRs. As software developers aware of these developments, my colleagues and I were eager to apply DevOps to our field. It has consistently been a popular topic at ROSCon. As far back as 2014, researchers coined the term RobOps to refer to at ...

The Remote Agile Playbook: Tools for a Dispersed Team

The Remote Agile Playbook: Tools for a Dispersed Team

2 minute read

Having a robust tech stack is crucial for remote Agile teams. At Opreto, we’ve meticulously assembled a set of tools designed to foster productivity and enhance our Agile methodologies. We kick off our sprints with Parabol, a user-friendly platform tailored for sprint planning and retrospectives. The beauty of Parabol lies in its seamless integration with Jira. As our central hub for issue tracking and sprint management, Jira excels at aligning our team around critical tasks and objectives. These two tools work hand-in-hand to provide a cohesive planning and tracking environment. Google Workspace serves as our comprehensive solution for document management and more. We extensively use Google Docs for collaborative editing and Google Sheets for data analysis. Of course, Gmail remains an integral part of our communication framework, especially for external correspondence. The real-time collaboration features across these Google Workspace tools make them a natural extension of our pl...