<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Solid Abstractions]]></title><description><![CDATA[A website about technology, software craftsmanship and the exhilaration of designing abstract structures for concrete use.]]></description><link>https://solidabstractions.com</link><generator>GatsbyJS</generator><lastBuildDate>Mon, 17 Jun 2024 03:13:30 GMT</lastBuildDate><item><title><![CDATA[Error Handling part 3: Techniques]]></title><description><![CDATA[After the theory, a quick review of common runtime error handling techniques.
Most ecosystems focus on one, but knowing the others might come in handy in some situations.]]></description><link>https://solidabstractions.com/2019/error-handling-techniques</link><guid isPermaLink="true">https://solidabstractions.com/2019/error-handling-techniques</guid><category><![CDATA[software]]></category><category><![CDATA[code]]></category><pubDate>Sat, 03 Apr 2021 00:00:00 GMT</pubDate></item><item><title><![CDATA[Zero-cost unique_ptr deleters]]></title><description><![CDATA[A C++ smart unique_ptr uses exactly the same amount of memory as a
regular pointer, and has zero runtime cost. That is what we love about C++. But what if I need a custom deleter for my pointer? Can I get it at zero cost too?]]></description><link>https://solidabstractions.com/2019/zero-cost-unique_ptr</link><guid isPermaLink="true">https://solidabstractions.com/2019/zero-cost-unique_ptr</guid><category><![CDATA[software]]></category><category><![CDATA[code]]></category><category><![CDATA[c++]]></category><pubDate>Tue, 05 Mar 2019 00:00:00 GMT</pubDate></item><item><title><![CDATA[Error Handling part 2: Abstractions]]></title><description><![CDATA[We cover the basics of correct error handling, so it is no longer an afterthought.
In previous post, we left some crucial questions unanswered, such as
“What exactly makes an error recoverable?”. In this post, we dive into levels of abstraction and what they mean for error handling.]]></description><link>https://solidabstractions.com/2019/error-handling-levels</link><guid isPermaLink="true">https://solidabstractions.com/2019/error-handling-levels</guid><category><![CDATA[software]]></category><category><![CDATA[code]]></category><pubDate>Thu, 28 Feb 2019 00:00:00 GMT</pubDate></item><item><title><![CDATA[Error Handling part 1: Introduction]]></title><link>https://solidabstractions.com/2019/error-handling-introduction</link><guid isPermaLink="true">https://solidabstractions.com/2019/error-handling-introduction</guid><category><![CDATA[software]]></category><category><![CDATA[code]]></category><pubDate>Tue, 19 Feb 2019 00:00:00 GMT</pubDate></item><item><title><![CDATA[Unit Testing aiohttp Clients - part 2]]></title><description><![CDATA[In the previous post we designed our testing infrastructure to work with aiohttp.
We will now put that testing infrastructure through a baptism by fire.]]></description><link>https://solidabstractions.com/2018/testing-aiohttp-client-part-2</link><guid isPermaLink="true">https://solidabstractions.com/2018/testing-aiohttp-client-part-2</guid><category><![CDATA[python]]></category><category><![CDATA[code]]></category><category><![CDATA[testing]]></category><pubDate>Fri, 30 Nov 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Unit Testing aiohttp Clients]]></title><description><![CDATA[Asynchronous code is the new paradigm in python those last years.
Testing it, though, is significantly harder.
Let's see how to test asynchronous HTTP client code written with aiohttp.]]></description><link>https://solidabstractions.com/2018/testing-aiohttp-client</link><guid isPermaLink="true">https://solidabstractions.com/2018/testing-aiohttp-client</guid><category><![CDATA[python]]></category><category><![CDATA[code]]></category><category><![CDATA[testing]]></category><pubDate>Sun, 25 Nov 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Other Strategy Ports]]></title><description><![CDATA[Remaining ports are much simpler in their scope, and in the fact they do not manage
dynamic subscriptions. We will review them quickly for completeness.]]></description><link>https://solidabstractions.com/2018/cryptomate/other-strategy-ports</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/other-strategy-ports</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><category><![CDATA[ports]]></category><pubDate>Tue, 13 Nov 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Trading Port]]></title><description><![CDATA[In the “modules and components” post, we defined the trading port as a gateway
to exchanges, managing a trading account, placing and canceling orders.]]></description><link>https://solidabstractions.com/2018/cryptomate/trading-port</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/trading-port</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><category><![CDATA[ports]]></category><pubDate>Sat, 20 Oct 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Market Port]]></title><description><![CDATA[So far, we have been talking about market events, orders and strategies, as
abstract concepts, leaving details to a later point. Now, to design the core of
the strategy engine, we need the full picture.]]></description><link>https://solidabstractions.com/2018/cryptomate/market-port</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/market-port</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><category><![CDATA[ports]]></category><pubDate>Tue, 09 Oct 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Laying the Groundwork]]></title><description><![CDATA[Initial design is done. It is now time to start laying the basis of the project.
At this point, there are a few technical choices we can no longer defer.]]></description><link>https://solidabstractions.com/2018/cryptomate/groundwork</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/groundwork</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[code]]></category><pubDate>Mon, 24 Sep 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Starting a Python Project]]></title><description><![CDATA[We hack together a couple of modules, do quick manual testing. Eventually, the code remains a
hackish mess rotting away which may be fine but a little unsatisfactory.]]></description><link>https://solidabstractions.com/2018/starting-python-project</link><guid isPermaLink="true">https://solidabstractions.com/2018/starting-python-project</guid><category><![CDATA[python]]></category><category><![CDATA[code]]></category><pubDate>Fri, 14 Sep 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[The Story So Far]]></title><description><![CDATA[We used most of the allocated design time, and our architecture is falling into place.
Spending more time on upfront design will yield diminishing returns at this point.
Here is a quick post index.]]></description><link>https://solidabstractions.com/2018/cryptomate/the-story-so-far</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/the-story-so-far</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><pubDate>Wed, 12 Sep 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Critical Points]]></title><description><![CDATA[We detail critical parts of the architecture: relationships between main
components, strategy life-cycle and integration examples for both testing and production.]]></description><link>https://solidabstractions.com/2018/cryptomate/critical-points</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/critical-points</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><pubDate>Sun, 09 Sep 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Exploring Patterns]]></title><description><![CDATA[Event-driven, hexagonal, micro-services… we can quickly trim down the options to a few
candidates. We will then explore, evaluate and select one of them.]]></description><link>https://solidabstractions.com/2018/cryptomate/exploring-patterns</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/exploring-patterns</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><category><![CDATA[pattern]]></category><pubDate>Mon, 20 Aug 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Modules and Components]]></title><description><![CDATA[We understand the problem and can start building our high-level architecture. We will start
with mapping the requirements to project elements.]]></description><link>https://solidabstractions.com/2018/cryptomate/modules</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/modules</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><pubDate>Wed, 08 Aug 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Requirements and Quality Attributes]]></title><description><![CDATA[Constraints, functional requirements, quality attributes. All of those are known as
architecturally significant requirements. Characterizing those is the final step
in our initial “understand phase”.]]></description><link>https://solidabstractions.com/2018/cryptomate/requirements</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/requirements</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><pubDate>Mon, 06 Aug 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Stakeholders and Goals]]></title><description><![CDATA[We will start our job with identifying all stakeholders we can. Then, depending on how close
to the project they are, we will get to know them and find out their goals.]]></description><link>https://solidabstractions.com/2018/cryptomate/stakeholders</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/stakeholders</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><pubDate>Fri, 03 Aug 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Getting Started]]></title><description><![CDATA[A new project with no legacy to accommodate may either be a clean slate or a blank page,
depending on how one looks at it. Before we start filling it, we need to define our strategy.]]></description><link>https://solidabstractions.com/2018/cryptomate/getting-started</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/getting-started</guid><category><![CDATA[cryptomate]]></category><category><![CDATA[architecture]]></category><pubDate>Mon, 30 Jul 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA[Introducing Cryptomate]]></title><description><![CDATA[A trading bot is an amazing tool. It talks to many third parties.
It requires a rich, flexible toolset to empower its user.
This needs powerful abstractions. In short, it is the
perfect project to start my website with.]]></description><link>https://solidabstractions.com/2018/cryptomate/intro</link><guid isPermaLink="true">https://solidabstractions.com/2018/cryptomate/intro</guid><category><![CDATA[cryptomate]]></category><pubDate>Sun, 29 Jul 2018 00:00:00 GMT</pubDate></item></channel></rss>