<?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" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Stan Ego]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://stanego.com/</link><image><url>https://stanego.com/favicon.png</url><title>Stan Ego</title><link>https://stanego.com/</link></image><generator>Ghost 3.17</generator><lastBuildDate>Fri, 27 Mar 2026 15:38:22 GMT</lastBuildDate><atom:link href="https://stanego.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[How real is the Matrix?]]></title><description><![CDATA[<p>In philosophy the question of perception is quite important. Because if what we see, hear, feel, smell, etc is a fake... many explanations will fail.</p><p>Scientists frequently speculates using <a href="https://en.wikipedia.org/wiki/Brain_in_a_vat">Brain in a vat</a> experiment. Many of us know it as the Matrix. Is it really possible?</p><p>Definitely yes:</p><ol><li>In 1992</li></ol>]]></description><link>https://stanego.com/how-real-is-the-matrix/</link><guid isPermaLink="false">5ed504c6fa3e080001badcbf</guid><category><![CDATA[Philosophy]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Sat, 20 Oct 2018 13:20:46 GMT</pubDate><content:encoded><![CDATA[<p>In philosophy the question of perception is quite important. Because if what we see, hear, feel, smell, etc is a fake... many explanations will fail.</p><p>Scientists frequently speculates using <a href="https://en.wikipedia.org/wiki/Brain_in_a_vat">Brain in a vat</a> experiment. Many of us know it as the Matrix. Is it really possible?</p><p>Definitely yes:</p><ol><li>In 1992 The Lawnmower Man moview was very fantastic. Nowadays virtual reality environment is as simple as smartphone with a VR gadget. Progress never stops, so sooner or later we will have such gadgets that will interface directly with our brain.</li><li>It's easy to explain that this is theoretically possible. Did you ever have realistic dreams? Many of us did. But all movements, sounds and pictures are just a result of our brain. They were not real.</li></ol>]]></content:encoded></item><item><title><![CDATA[GET /Web30... 417 Expectation Failed]]></title><description><![CDATA[<p>To be honest, I was disappointed in the <a href="https://github.com/solid/solid">Solid</a> project presented by Tim Bernes-Lee. It should inspire the feature of Web, but for me smth like a scent of old books is in the air.</p><p>Everybody who is familiar with good principles of software design (e.g. SOLID) knows that</p>]]></description><link>https://stanego.com/solid-by-bernes-lee-failed-expectation/</link><guid isPermaLink="false">5ed504c6fa3e080001badcbe</guid><category><![CDATA[Web]]></category><category><![CDATA[EgoNet]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Fri, 12 Oct 2018 19:19:59 GMT</pubDate><content:encoded><![CDATA[<p>To be honest, I was disappointed in the <a href="https://github.com/solid/solid">Solid</a> project presented by Tim Bernes-Lee. It should inspire the feature of Web, but for me smth like a scent of old books is in the air.</p><p>Everybody who is familiar with good principles of software design (e.g. SOLID) knows that it is much better to depends on abstractions, not concretions. But what I have seen in this project is a "Fragile Web". You MUST have a WebID that MUST be an HTTP URI that MUST be in text/turtle format that MUST be RDF and MUST use FOAF for person attributions.</p><p>For example, we have a good old abstraction - URI. It works good when implemented as a WebID. But supports a lot of others as well. Just imagine that in a close feature mankind decides to put personal data in a distributed ledger like Bitcoin and will be addressed like its wallets, for instance "bitego:1EgoSL8HtK4ngkdXEeobR76b53LETtpyT". This is still a good URI, but not a WebID. May be personal data will be powered by <a href="https://ipfs.io/">InterPlanetary File System</a> and URLs like ipfs://stan.ego or Magnet URIs or web becomes real-time and ws://stan.ego will be actively used. There can be a plenty of implementation for one good abstraction... and this is definitely not WebID.</p><p>Why should we limited by RDF only that from 2004 can't prove itself as a good instrument for semantic markup? Old MIME types and headers like Accept-* can be easily used to manage any implementations based in client-server negotiations.</p><p>REST API? Are you kidding? So many efforts like RDF towards semantic Web and instead of good abstractions like GraphQL or SparQL we are going to use REST API? REST that tries to break the beauty of resource location (URL) by adding a lot of garbage to it?</p><p>I completely did not notice how Sir Bernes-Lee going to implement his own brilliant ideas about editable (wiki) Web.</p><p>In my opinion solution is pretty straightforward.</p><p>There is a good abstraction called DVCS that helps a lot of people to work on content in distributed manner. We know its implementations - Git. You want to edit any site? Fork it, make changes and create a pull request. There is even a good old protocol for content authoring in such manner called WebDAV (Web Distributed Authoring and Versioning).</p><p>For user authentication in Solid applications, instead of WebID and other RDF-based stuff, URI is enough. I will be able to be identified by domain I have purchased like http://stanego.com, by my Bitcoin wallet URI, Magnet URI, By phone number that also have URI like tel:123456789.</p><p>Instead of being forced to use RDF I want to have conversation between client and server, which semantic protocol they want to use. Client can send "Accept-Semantic: rdf/turtle, xml/xsd, something/new" and receive "Content-Type: something/new" as a result of their agreement.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Balancing between row and columnar DBs]]></title><description><![CDATA[<p>Columnar databases have a lot of benefits, especially for OLAP workloads. Rows-based is also still in the game, but mostly applied to OLTP? Is there a well-balanced solution? Probably yes.</p><p>Last days I was actively writing about aspect-oriented approaches that seems to be such balance. Each database record has a</p>]]></description><link>https://stanego.com/row-column-aspect-db-storage/</link><guid isPermaLink="false">5ed504c6fa3e080001badcbd</guid><category><![CDATA[Codesophy]]></category><category><![CDATA[Databases]]></category><category><![CDATA[AOP]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Fri, 12 Oct 2018 12:14:46 GMT</pubDate><content:encoded><![CDATA[<p>Columnar databases have a lot of benefits, especially for OLAP workloads. Rows-based is also still in the game, but mostly applied to OLTP? Is there a well-balanced solution? Probably yes.</p><p>Last days I was actively writing about aspect-oriented approaches that seems to be such balance. Each database record has a lot of aspect in it. For instance "users" table frequently contains lifetime aspect (createdAt, deletedAt, etc), authentication  (login, password, blocked), person (firstName, lastName), address (country, city, etc), many payment aspects (because many types of payments), etc.</p><p>Storing each aspect, not an each field in a vertical partition, like columnar databases  do, looks to be a good balance. We usually work with entities in scope of some aspect. E.g. when you're authenticating an user, you don't need its address. Making a payment doesn't involve it's authentication details, etc.</p><p>So when we are authenticating, we use the only vertical partition responsible for this aspect. And as a result - minimum of IO operations (works only with required subset of columns). </p><p>It will be encoded and stored as effective as columnar databases but with less overhead. And mostly beat row-based engines. For example ones those support clustered indexes will be able to have more that one per virtual table because physically one clustered index will be allowed for the each aspect-partition.</p>]]></content:encoded></item><item><title><![CDATA[Aspect-oriented modeling]]></title><description><![CDATA[<p>Many of us have heard about aspect-oriented programming. When some concerns like logging, validations and other aspects are flexibly injected into processes. But what's about design of the application? Aren't there any aspects? </p><p>I think there are. One of the most frequent examples is interface IEntity&lt;T&gt; with</p>]]></description><link>https://stanego.com/aspect-oriented-design/</link><guid isPermaLink="false">5ed504c6fa3e080001badcbc</guid><category><![CDATA[Codesophy]]></category><category><![CDATA[AOP]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Thu, 11 Oct 2018 14:35:06 GMT</pubDate><content:encoded><![CDATA[<p>Many of us have heard about aspect-oriented programming. When some concerns like logging, validations and other aspects are flexibly injected into processes. But what's about design of the application? Aren't there any aspects? </p><p>I think there are. One of the most frequent examples is interface IEntity&lt;T&gt; with property Id of type T. It says that object is uniquely identified in the persistent storage. Sometimes we are talking about parent-child relationship, which can be realized as a IChild&lt;T&gt; interface with Parent property of T type. Many entities have names. So IHasNamed aspect can be frequently used. IActive aspect with enabled or disabled status. For logistics you may want IDimensions aspect, IValuable for e-commerce, etc.</p><p>Idea is that we consider object as a set of aspects with possibility to add them dynamically. Just imagine that you have a IMembership interface provided by some security frameowkr that you can't upgrade. But want to make membership expirable sometimes. E.g. one of your admins is on vacation and you are going to grant this role temporarily to another employee. For that purposes you've created ILifetime interface with Start/Expiration properties and create new membership like _factory.Entity&lt;IMembership, ILifetime&gt;();</p><p>Many other benefits are inherited from <a href="https://stanego.com/business-objects-redesigned/">https://stanego.com/business-objects-redesigned/</a>.</p>]]></content:encoded></item><item><title><![CDATA[Business objects redesigned]]></title><description><![CDATA[<p>We used to define business objects mostly as classes. But what if they become interfaces while instances will be created automatically from some factory (like IoC container)?</p><p>Philosophically let's imagine we are talking about some laptop. What is usually important for us? Probably it's technical specs. Especially when we're going</p>]]></description><link>https://stanego.com/business-objects-redesigned/</link><guid isPermaLink="false">5ed504c6fa3e080001badcbb</guid><category><![CDATA[Codesophy]]></category><category><![CDATA[AOP]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Wed, 10 Oct 2018 08:48:52 GMT</pubDate><content:encoded><![CDATA[<p>We used to define business objects mostly as classes. But what if they become interfaces while instances will be created automatically from some factory (like IoC container)?</p><p>Philosophically let's imagine we are talking about some laptop. What is usually important for us? Probably it's technical specs. Especially when we're going to buy it. Tomorrow we have a flight and more important aspect of the laptop will be it's size and weight while we're packing it into our luggage. If you looking for something to hammer a nail the laptop will appear from the different point of view. So any object may have different aspects. And these aspect are interfaces.</p><p>Let's take a look briefly into advantages.</p><p>Firstly, you can't inject logic into schema that is not a good approach because highly couples responsibilities. For example, let's consider validation. When you're buying the laptop, you have specs-based validation. When going to flight, size/weight-based validation. So validation is process external to the object itself, made by subject and environment.</p><p>Secondly, even if you need some logic, it can be automatically or manually added to the implementation of this interface. And here you'll have a kind of AOP (Aspect Oriented Programming) where any aspects can be flexibly added to the objects.</p><p>Thirdly, designed based on interfaces is always more flexible. You'll start to extract different aspects of your classes, because won't be limited by "inheritance hell" and can easily build mixes from different interfaces to craft new view-models, DTO models (requests, responses), etc.</p><p>Simple example. Many objects have Name property. Event if they are very different and you can't provide the property by inheritance. This is a specific aspect of "named" things. Or some "hierarchy" aspect that defines Parent property.</p><p>A good solution is to define it in IHasName interface. For this interface you can define validation rule, that will be automatically injected into property setter when your IoC will create an instance with this interface.</p>]]></content:encoded></item><item><title><![CDATA[Divide and conquer as a philosophy]]></title><description><![CDATA[<p>In programming we frequently use principle of atomicity, trying to implement things as small as possible. SRP principle in SOLID forces us to make responsibility atomic. Micro-services also reflect this idea. Agile methods use the same approach for changes, instead of one huge "change" in waterfall workflow, we split into</p>]]></description><link>https://stanego.com/divide-and-conquer-as-a-philosophy/</link><guid isPermaLink="false">5ed504c6fa3e080001badcba</guid><category><![CDATA[Codesophy]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Sat, 06 Oct 2018 18:03:27 GMT</pubDate><content:encoded><![CDATA[<p>In programming we frequently use principle of atomicity, trying to implement things as small as possible. SRP principle in SOLID forces us to make responsibility atomic. Micro-services also reflect this idea. Agile methods use the same approach for changes, instead of one huge "change" in waterfall workflow, we split into smaller changes from a couple of weeks in SCRUM to several daily releases in Kanban, etc.</p><p>This approach has many benefits. For example, one of them I temporarily called "locking". Changes to the smaller systems cause less locking than to a huge one. For example, deployment of micro-service cause less availability problems than deployment of the huge monolithic application. Unexpected requirement for an agile workflow is much easier to integrate than for waterfall.</p><p>Another one is "distribution". If you split system into N subsystems then you can employ N workers to handle them. For distributed computing systems this is obvious, but such principle also makes agile project management highly collaborative.</p><p>I feel me like reinventing a wheel and wonder if this idea is already described somewhere with all pros and cons.</p>]]></content:encoded></item><item><title><![CDATA[LZCode compression]]></title><description><![CDATA[<p>Family of LZ compression algorithms is replacing some string in input stream with its reference (in dictionary, in the input stream itself if there were occurrences of the string before).</p><p>Let's imagine that there is an intellectual compression algorithm that works like LZ compression, replacing some code with reference. For</p>]]></description><link>https://stanego.com/lzcode-compression/</link><guid isPermaLink="false">5ed504c6fa3e080001badcb9</guid><category><![CDATA[Reusing]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Sat, 06 Oct 2018 16:35:58 GMT</pubDate><content:encoded><![CDATA[<p>Family of LZ compression algorithms is replacing some string in input stream with its reference (in dictionary, in the input stream itself if there were occurrences of the string before).</p><p>Let's imagine that there is an intellectual compression algorithm that works like LZ compression, replacing some code with reference. For instance, quick-sort implementation in any language is replaced with reference to some standard implementation. Some frequently repeatable patterns with DSL constructions.</p><p>I wonder if GitHub can be stored on the MicroSD card then :)</p><p>P.S. STEPS project by Alan Kay, with very high degree of reusability, has TCP stack implementation just in ~200 LOC.</p>]]></content:encoded></item><item><title><![CDATA[Philosophy of issue tracking]]></title><description><![CDATA[<p>While working on Codesophy project I am trying to refactor my vocabularies and make them more simple and consistent. Today I have an "issue tracking" tools like JIRA on the table. I understand the a historical nature of this term, but in my opinion "issue" is not a good focus.</p>]]></description><link>https://stanego.com/philosophy-of-issue-tracking/</link><guid isPermaLink="false">5ed504c6fa3e080001badcb8</guid><category><![CDATA[Codesophy]]></category><category><![CDATA[Change management]]></category><category><![CDATA[Issue tracking]]></category><dc:creator><![CDATA[Stan Ego]]></dc:creator><pubDate>Sat, 06 Oct 2018 15:25:27 GMT</pubDate><content:encoded><![CDATA[<p>While working on Codesophy project I am trying to refactor my vocabularies and make them more simple and consistent. Today I have an "issue tracking" tools like JIRA on the table. I understand the a historical nature of this term, but in my opinion "issue" is not a good focus. Change management sounds like a better alternative.</p><p>Accordingly to <a href="https://en.wikipedia.org/wiki/Software_project_management#Issue">Wikipedia</a> issue is a "unit of work to accomplish an improvement in a system". That is... change. And this term is more flexible. For example we can consider potential change (risk).</p><p>We can then review typical Backlog-In Progress-QA-Deliver workflow of agile methods and even Red-Green-Refactor approach in TDD through a more mature Plan-Do-Check-Act in change management.</p>]]></content:encoded></item></channel></rss>