Featured Post
These days, I mostly post my tech musings on Linkedin. https://www.linkedin.com/in/seanmcgrath/
Wednesday, April 27, 2011
Yet another "eventually consistent" based design
Riak looks good. When it comes to the CAP theorem, A and P are definitely the ones to have in favor of C. You can get very good intuitive behavior without C by combining idempotency with time-stamping. Pat Hellands writings really opened my eyes to that.
Monday, April 25, 2011
Chaos Monkey
Chaos monkey. Great name for a very very important concept in web-scale application engineering.
Thursday, April 21, 2011
Document error : How to fix it...
In most walks of life, mistakes in electronic documents get fixed when found. The fix generally involves just editing the original. No big deal.
However, this is not always the right thing to do. Legal documents for example are best thought of in book keeping terms. If a bookkeeper finds an error in a ledger he or she does not simply edit it. Rather, a new debit/credit is recorded to counter-balance the error but leave the integrity of the records intact.
Here is a good example from the US National Archives. "Fixing" an original - however broken, is a no no. Fixing a variant - with audit trail back to the original. Thats a different matter.
However, this is not always the right thing to do. Legal documents for example are best thought of in book keeping terms. If a bookkeeper finds an error in a ledger he or she does not simply edit it. Rather, a new debit/credit is recorded to counter-balance the error but leave the integrity of the records intact.
Here is a good example from the US National Archives. "Fixing" an original - however broken, is a no no. Fixing a variant - with audit trail back to the original. Thats a different matter.
Tuesday, April 19, 2011
Law as source code versus Law is source code
There is no doubt in my mind that some parts of the legal corpus can benefit from a rigorous expression language, be that Python in the case of executable SEC regulations or C# for crisply defining predicate functions.
Things get interesting once one adopts a formal expression syntax for law because even if you are just in the business of "writing it down" in VDM or Z Notation or PNML somebody, somewhere is going to write an interpreter/compiler for it:-)
Things get interesting once one adopts a formal expression syntax for law because even if you are just in the business of "writing it down" in VDM or Z Notation or PNML somebody, somewhere is going to write an interpreter/compiler for it:-)
Speaking of Gall...
Remember The Web Services Stack. Yup. Galls Law again. I have no doubt that over time, REST will accrete some unfortunate complexity but it *started* simple and this appears to be a necessary first step in many fields of endeavor.
You cannot install complexity
You cannot install complexity. How true. Behind any complexity that *works*, there used to be a simplicity that worked : Gall's Law.
Saturday, April 16, 2011
Language Universals...
The universality - or otherwise - of human language constructs continues to be hotly debated. From this article : "cultural evolution is the primary factor that determines linguistic structure, with the current state of a linguistic system shaping and constraining future states.".
The whole debate relates to programming languages, too, in my opinion, as these are, no less than Gaelic or Japanese, linguistic creations of mankind. I think of it this way : the concepts of variable binding and conditional branching occur in every programming language aimed at von Neumann architectures because you cannot be Turing complete without set and branch-test operations. (Right?)
So the existence of these two in the syntax, or underlying parse tree, or underlying machine code, of nearly all programming languages, is to be expected. However, if you find yourself swimming in curly braces (Java, Lua, C++), you are probably, culturally speaking, in C or some descendant thereof. If there are strings everywhere, you are in Snobol or some descendant thereof. Etc.
Now, if in final analysis, nothing is truly universal to these languages other than the concept of a universal Turing machine, then *that*, arguably, is the shared construct - not any linguistic device used to leverage the construct. Having said that,there is no way to wield the construct without creating syntax so the difference is, perhaps, moot. Think of it like gravity. It impacts mass. So, to wield gravity to your advantage, you need mass. The end is gravity, but the means to the end is mass...
"O body swayed to music, O brightening glance,
How can we know the dancer from the dance?" -- W.B. Yeats
The whole debate relates to programming languages, too, in my opinion, as these are, no less than Gaelic or Japanese, linguistic creations of mankind. I think of it this way : the concepts of variable binding and conditional branching occur in every programming language aimed at von Neumann architectures because you cannot be Turing complete without set and branch-test operations. (Right?)
So the existence of these two in the syntax, or underlying parse tree, or underlying machine code, of nearly all programming languages, is to be expected. However, if you find yourself swimming in curly braces (Java, Lua, C++), you are probably, culturally speaking, in C or some descendant thereof. If there are strings everywhere, you are in Snobol or some descendant thereof. Etc.
Now, if in final analysis, nothing is truly universal to these languages other than the concept of a universal Turing machine, then *that*, arguably, is the shared construct - not any linguistic device used to leverage the construct. Having said that,there is no way to wield the construct without creating syntax so the difference is, perhaps, moot. Think of it like gravity. It impacts mass. So, to wield gravity to your advantage, you need mass. The end is gravity, but the means to the end is mass...
"O body swayed to music, O brightening glance,
How can we know the dancer from the dance?" -- W.B. Yeats
Subscribe to:
Posts (Atom)