<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>Yurii Rashkovskii</title>
    
    <link rel="alternate" type="text/html" href="http://www.rashkovskii.com/" />
    <id>tag:typepad.com,2003:weblog-1688716</id>
    <updated>2008-12-29T17:08:45-08:00</updated>
    <subtitle>Weird ideas live here</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <geo:lat>50.25</geo:lat><geo:long>30.43</geo:long><link rel="self" href="http://feeds.feedburner.com/rashkovskiicom" type="application/atom+xml" /><feedburner:emailServiceId>470850</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:browserFriendly>Yurii Rashkovskii</feedburner:browserFriendly><entry>
        <title>One Day in Toronto</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/498184741/one-day-in-toronto.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/12/one-day-in-toronto.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-60575154</id>
        <published>2008-12-29T17:08:45-08:00</published>
        <updated>2008-12-29T17:08:45-08:00</updated>
        <summary />
        <author>
            <name>yrashk</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;div&gt;&#xD;
&lt;a href="http://www.flickr.com/photos/yrashk/3149118942/" title="Imaginary spring by Yurkin, on Flickr"&gt;&lt;img alt="Imaginary spring" height="333" src="http://farm4.static.flickr.com/3234/3149118942_72e12403a9.jpg" width="500"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;a href="http://www.flickr.com/photos/yrashk/3149223774/" title="Poison Ivy by Yurkin, on Flickr"&gt;&lt;img alt="Poison Ivy" height="333" src="http://farm4.static.flickr.com/3112/3149223774_57fa039fd5.jpg" width="500"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;a href="http://www.flickr.com/photos/yrashk/3149280672/" title="Sweet dreams by Yurkin, on Flickr"&gt;&lt;img alt="Sweet dreams" height="333" src="http://farm4.static.flickr.com/3262/3149280672_00934c1693.jpg" width="500"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=VKbL1F.O"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=VKbL1F.O" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=3ObHpj.O"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=3ObHpj.O" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=AyoKE7.o"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=AyoKE7.o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=S5VtUa.O"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=S5VtUa.O" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/498184741" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/12/one-day-in-toronto.html</feedburner:origLink></entry>
    <entry>
        <title>Weird iPhone Application Idea</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/470183880/weird-iphone-application-idea.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/11/weird-iphone-application-idea.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-59249210</id>
        <published>2008-11-30T03:31:18-08:00</published>
        <updated>2008-11-30T03:33:05-08:00</updated>
        <summary>I am not sure whether it is really feasible to implement this (or at least make it work reasonably fast &amp; accurate), but here is an idea for an iPhone app I would definitely buy:Whenever I shop at supermarket, I...</summary>
        <author>
            <name>yrashk</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;div&gt;&lt;a href="http://yrashk.typepad.com/.a/6a00e5501f6a8e883401053623f57a970b-pi" style="float: left; "&gt;&lt;img alt="Coke-junk-food-Bouquet" border="0" class="at-xid-6a00e5501f6a8e883401053623f57a970b " src="http://yrashk.typepad.com/.a/6a00e5501f6a8e883401053623f57a970b-800wi" title="Coke-junk-food-Bouquet"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
 &lt;br&gt;&lt;/div&gt;&lt;p&gt;I am not sure whether it is really feasible to implement this (or at least make it work reasonably fast &amp;amp; accurate), but here is an idea for an iPhone app I would definitely buy:&lt;/p&gt;&lt;br&gt;&lt;div&gt;Whenever I shop at supermarket, I would like to point my iPhone at Nutrition Information of another package (here camera gets involved), press a button to scan it and get alerted if this product is bad for me for some reason (in general, or for my diet).&lt;/div&gt;&lt;br&gt;&lt;div&gt;It definitely should have built-in alerts presets, like "General", "Low carbohydrate diet", "Low sugar diet", etc.&lt;/div&gt;&lt;br&gt;&lt;div&gt;Why is it weird? Well, because you can actually read this nutrition information by yourself. But wouldn't it be fun &amp;amp; hi-tech to scan nutrition information (though it would be easier if this information was also printed in a form of a 3d barcode or something like that).&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=5rMxN"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=5rMxN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=ThnpN"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=ThnpN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=SC9en"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=SC9en" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=afKAN"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=afKAN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/470183880" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/11/weird-iphone-application-idea.html</feedburner:origLink></entry>
    <entry>
        <title>What's wrong with DSL?</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/466005054/whats-wrong-with-dsl.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/11/whats-wrong-with-dsl.html" thr:count="2" thr:updated="2008-12-03T23:13:39-08:00" />
        <id>tag:typepad.com,2003:post-59079738</id>
        <published>2008-11-26T01:24:53-08:00</published>
        <updated>2008-12-03T23:13:39-08:00</updated>
        <summary>Wow. I finally bothered to get a learner's driver's license and will have my first lesson in less than 12 hours. In three years, I'll get my full license, skills-permitting.Now, Domain Specific Languages. It looks like I finally can explain...</summary>
        <author>
            <name>yrashk</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div&gt;&lt;img  alt="858162" border="0" class="at-xid-6a00e5501f6a8e88340105361b8ed3970b selected " src="http://yrashk.typepad.com/.a/6a00e5501f6a8e88340105361b8ed3970b-320pi" style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; float: left;" title="858162"&gt;&lt;/div&gt;
&lt;div&gt;Wow. I finally bothered to get a learner's driver's license and will have my first lesson in less than 12 hours. In three years, I'll get my full license, skills-permitting.&lt;/div&gt;&lt;br&gt;&lt;div&gt;Now, Domain Specific Languages. It looks like I finally can explain what could be wrong with them. As a part of tradition, I would like to warn you that all my thoughts posted below could be completely wrong since I am typically incompetent in whatever subject I talk and rant about.&lt;/div&gt;&lt;br&gt;&lt;div&gt;First of all, good news. Basically, there is nothing bad with DSL. In theory. It is a pretty nice concept that could boost your development productivity, lead to less error-prone code and turn you into a real guru. Just don't get too snobby if you can use Ruby tricks or Lisp macros. &lt;/div&gt;&lt;br&gt;&lt;div&gt;Because here is the thing. The bad news thing. &lt;/div&gt;&lt;br&gt;&lt;div&gt;The bad news about DSL is that in order to design a really sustainable and useful domain specific language you should be either good at designing programming languages or just have enough stamina to rough all edges and maintain a true consistency both within created language and your host language.&lt;/div&gt;&lt;br&gt;&lt;div&gt;So, the idea is that you can't just make up some syntax sugar over your language of choice (such as Ruby, Lisp or, say, Io). Um, well — technically, you can. But that doesn't necessarily mean you (or your colleagues) would benefit from that DSL. Heck, there is even no promise you won't be screwed by it at some point.&lt;/div&gt;&lt;br&gt;&lt;div&gt;So, what would I advise to do (but don't take my advices too seriously)?&lt;/div&gt;&lt;br&gt;&lt;div&gt;1. Let your DSL extension be "logically compatible" with your host language. Or, another definition is to keep it intuitive enough so other developers would easily figure out how can they use your DSL without looking into your examples every time they want to do something with it. Here is an example (Ruby, derived from a real code):&lt;/div&gt;&lt;br&gt;&lt;div&gt;
&lt;pre&gt;&lt;code&gt;can [:read_about], User do
 user.public?
end

can [:remove], [Comment, Post], &amp;amp;if_matching(:created_by)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;br&gt;&lt;div&gt;While it is a valid code I don't personally think it is a good example of DSL use. In fact, it is a DSL concept misuse to some extent. Why? In this particular example, Ruby idioms would define these statements as something like:&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;ol&gt;
&lt;li&gt;With "can read about users" do ask... user (where did it appear by the way, there is no &lt;code&gt;|user|&lt;/code&gt; block parameter definition?) about its publicity. Hm.&lt;/li&gt;
&lt;li&gt;Can remove comments and posts and use if_matching(:created_by) proc... somehow. Basically, it is way better than 1, it is just the &amp;amp;if_matching thing that I wouldn't expect here (I mean &amp;amp;proc syntax) — but basically this construct is not as bad as first one.&lt;/li&gt;
&lt;/ol&gt;
&lt;span&gt; &lt;/span&gt; &lt;/div&gt;&lt;div&gt;And yes, I understand that it &lt;span style="font-weight: bold;"&gt;is&lt;/span&gt; possible to figure out the real meaning of the above code examples &lt;span style="font-style: italic;"&gt;by reading these examples, &lt;/span&gt;but that's definitely not the most intuitive way. And it is definitely not very consistent with the host language.&lt;/div&gt;&lt;br&gt;&lt;div&gt;Clearly enough (well, I just know what this code is doing) those &lt;span style="font-style: italic;"&gt;do&lt;/span&gt; blocks and &lt;span style="font-style: italic;"&gt;&amp;amp;procs&lt;/span&gt; above are about some conditions to be met at some point.&lt;/div&gt;&lt;br&gt;&lt;div&gt;How would I improve the above example? Well, while I am no perfect at this, I'd try to do something like this:&lt;/div&gt;&lt;br&gt;&lt;div&gt;
&lt;pre&gt;&lt;code&gt; can [:read_about], User, :if =&gt; proc {|user| user.public? } # or
 can [:read_about], User, :if =&gt; :public? 

 can [:remove], [Comment, Post], :if =&gt; proc {|posted| 
     posted.created_by == User.current } # or
 can [:remove], [Comment, Post], :if =&gt; matching(:created_by) 

 def matching(attribute)
 proc {|obj| obj.send(attribute) == User.current }  
 end

&lt;/code&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Why the above example could be better? Let me explain. &lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;ol&gt;
&lt;li&gt;Here we 1) use Ruby's "do something if true" idiom 2) use well-established :if notation used by other DSLs (which might not be ideal but used in lots of projects, see third section of this article) c) uses well-known Ruby's &lt;code&gt;proc&lt;/code&gt; construct which is less likely a subject to a non-immediate execution (well, at least I feel it this way)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;The same arguments as for 1. just some syntax sugar added on top. Literally it is a re-use of Ruby's "can read users if user.public?" &lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;span&gt;The same arguments as for 1, and here we have a better control over (and better understanding!)  what we're actually checking&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;It is actually the same as 3., just sweetened with matching() helper, which is doing the same thing, just a _little_ bit more generalized :) &lt;/span&gt;  &lt;/li&gt;
&lt;/ol&gt;
&lt;span&gt; &lt;/span&gt; Again, as I said, my improvement might not be perfect (and it is 1AM already, omg) — but you get the idea, right?&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;2. Maintain your DSL consistency. Ideally you would need to be a programming language designer with an extensive experience :) But of course this is really naive to expect. So what would I advise is simply to 1) reduce a number of constructs and their variations possible 2) define each construct clearly — what's the purpose &amp;amp; intention, what's the expected behavior behind it 3) try to maintain a documentation. Most popular programming languages do. Why your DSL should be an exception?&lt;/div&gt;&lt;br&gt;&lt;div&gt;3. Let DSL be at least somewhat familiar to your users. This is one of the simplest things to advise. It is definitely easier for people to use DSLs that make use of constructs they might have seen in other &lt;span style="font-weight: bold;"&gt;popular&lt;/span&gt; DSLs. For example, ActiveRecord's has_many/has_one are well known by all Rails programmers. And, clearly, DataMapper's "has n" syntax is flexible and awesome, but it might be somewhat surprising for those who switch to DM. While they definitely should keep this awesome syntax, why not add two aliases (has_many and has_one)? &lt;span style="font-style: italic;"&gt;Well, may be they do, I haven't really used DM extensively yet ;) &lt;/span&gt;&lt;span&gt;But again, you get the point, right?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;4. Keep number of DSLs per project to a minimum. It might be a nightmare to have logically different DSLs for all this stuff: ORM, permissions, views, factories, controllers, specs, RESTful goodness... all 13 of them. Just don't overuse something just because you can. &lt;/div&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Pheew, I did it. Thanks for your attention!&lt;/div&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=DFKgN"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=DFKgN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=4OaNN"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=4OaNN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=X1vqn"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=X1vqn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=WCHZN"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=WCHZN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/466005054" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/11/whats-wrong-with-dsl.html</feedburner:origLink></entry>
    <entry>
        <title>Politics 2.0 and Why You Shouldn't Care Anyway</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/429998570/politics-20-waves-and-why-you-shouldnt-care-anyway.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/10/politics-20-waves-and-why-you-shouldnt-care-anyway.html" thr:count="1" thr:updated="2008-10-25T09:52:31-07:00" />
        <id>tag:typepad.com,2003:post-57466865</id>
        <published>2008-10-23T13:17:39-07:00</published>
        <updated>2008-10-25T09:52:31-07:00</updated>
        <summary>Warning: you should not really read this. I am completely incompetent in things I am talking about below. Political parties are no fun. Leaving aside a lot of aspects (probably, both positive and negative), one of most important factors for...</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Rants" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;div&gt;&lt;span style="font-weight: bold;"&gt;&lt;img alt="John_F._Kennedy,_Nikita_Khruchchev_1961" border="0" class="at-xid-6a00e5501f6a8e8834010535afca69970b selected " src="http://yrashk.typepad.com/.a/6a00e5501f6a8e8834010535afca69970b-320pi" style="margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; float: left;" title="John_F._Kennedy,_Nikita_Khruchchev_1961"&gt;&lt;/img&gt;&#xD;
 &lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Warning&lt;/span&gt;: you should &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; really read this. I am completely incompetent in things I am talking about below. &lt;/div&gt;&lt;br&gt;&lt;div&gt;Political parties are no fun. Leaving aside a lot of aspects (probably, both positive and negative), one of  most important factors for me is that any party is likely to have some set of ideological "beliefs". Say, "restricted abortions, free market, no gay marriage" or "renewable energy investments, progressive tax, affordable healthcare". What really puzzles me is the necessity to choose either one. What a nonsense! I'd rather vote for particular beliefs rather than the whole &lt;span style="font-style: italic;"&gt;platforms&lt;/span&gt;!&lt;/div&gt;&lt;br&gt;&lt;div&gt;That does not mean parties should not exist. They probably should, after all they are just a product of the society. Though in order to let voters make more &lt;span style="font-family: Verdana; line-height: normal; "&gt;deliberate decisions, they shouldn't be able to vote "Party A or Party B", but they rather should vote for or against every current belief promoted by either party.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;Something like...&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;ul&gt;&#xD;
&lt;li&gt;&lt;span style="font-family: Verdana; line-height: normal; "&gt;(Yes/No/Have no idea) Restrict abortions&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span style="font-family: Verdana; line-height: normal; "&gt;(Yes/No/Have no idea) Invest in renewable energy&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span style="font-family: Verdana; line-height: normal; "&gt;(Yes/No/Have no idea) Free market&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span style="font-family: Verdana; line-height: normal; "&gt;(Yes/No/Have no idea) No gay marriage&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;...  &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
certainly, without traces to either party. And then we can count popularity of each belief and basing on these numbers there is a chance to build a balanced government consisting of both parties. But it is a kind of &lt;span style="font-weight: bold;"&gt;utopia&lt;/span&gt;, I know. Just a technological view on a way more complex social thing. So do not expect it anytime soon.&lt;/div&gt;&lt;br&gt;&lt;div&gt;I observe an enormous number of people who believe that they should care about these particular elections this Fall. This is the second time I actually see such a high level of civil activism (first time it was in Ukraine 2004).&lt;/div&gt;&lt;br&gt;&lt;div&gt;And &lt;span style="font-weight: bold;"&gt;you&lt;/span&gt; may also strongly believe that it is a Right Thing to act this way, and you even maybelieve that it is your genuine &lt;span style="font-family: Verdana; line-height: normal; "&gt;conviction. Whatever. It isn't really important. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;Lets look at the problem this way: one of the most important things for mere mortals is the economy of their country. A number of countries are experiencing a recession (or should we call it panic? depression?) these days. But hey! Isn't economy &lt;span style="font-weight: bold;"&gt;supposed&lt;/span&gt; to be a boom-bust wave? The length of each sector might be quite long (sometimes decades), I guess. But after all, after each bust boom will come, and having either president or party ruling the country will not impact this huge wave significantly — these party-a to party-b waves are just too short and have a low amplitude to be able to. And yes, there are always exceptions about rules, and that means that there is a small chance to have a higher amplitude presidential wave accidentally.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;img alt="Waves" border="0" class="at-xid-6a00e5501f6a8e8834010535b0cc0c970b " src="http://yrashk.typepad.com/.a/6a00e5501f6a8e8834010535b0cc0c970b-500pi" style="margin-top: 1px; margin-right: 1px; margin-bottom: 1px; margin-left: 1px; " title="Waves"&gt;&lt;/img&gt;&#xD;
 &lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;So should you care? You can't really affect the bigger boom-bust economy wave, and you can't really increase odds of "exception miracle". But you can wait...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;...&lt;span style="font-weight: bold;"&gt;and &lt;/span&gt;care about tangible things: your family and your community — your close-knit circles. Real politics begin at your front door and your efforts could actually change something.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;span style="font-weight: bold;"&gt;Please&lt;/span&gt; re-read the disclaimer at the beginning of this rant.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;P.S. Sorry for no blogging for more than two months. I am guilty without any doubts.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Verdana; line-height: normal;"&gt;P.P.S. I am not even closely eligible to participate in these elections, and don't plan to become eligible anytime soon; this rant is just a consequence of two beers &amp;amp; 1,5 hrs talk on this &amp;amp; other topics with someone in a bar's patio.&lt;/span&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=sCpZM"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=sCpZM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=EphCM"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=EphCM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=2MhVm"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=2MhVm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=m9LBM"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=m9LBM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/429998570" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/10/politics-20-waves-and-why-you-shouldnt-care-anyway.html</feedburner:origLink></entry>
    <entry>
        <title>StrokeDB: what's up?</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/356533137/strokedb-whats.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/08/strokedb-whats.html" thr:count="2" thr:updated="2008-08-07T16:17:01-07:00" />
        <id>tag:typepad.com,2003:post-53782642</id>
        <published>2008-08-05T09:25:29-07:00</published>
        <updated>2008-08-07T16:17:02-07:00</updated>
        <summary>I must confess. We've committed a serious sin. We haven't had a single commit in StrokeDB repository for almost two months. Sorry. So... one may wonder whether StrokeDB is still alive. Well, yes it is. Though we have significant changes...</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Databases" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;p style="float: left; margin: 0px 10px 0px 0px;"&gt;&#xD;
&lt;img src="http://www.rashkovskii.com/images/2008/08/05/20060824confessional.jpg" border="0"&gt;&lt;/img&gt;&#xD;
&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;I must confess. We've committed a serious sin. We haven't had a single commit in &lt;a href="http://strokedb.com/"&gt;StrokeDB&lt;/a&gt; &lt;a href="http://github.com/yrashk/strokedb/tree/master"&gt;repository&lt;/a&gt; for almost two months. Sorry. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;So... one may wonder whether StrokeDB is still alive. Well, yes it is. Though we have significant changes in our plan and approach. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;As for now, we consider existing StrokeDB as a first prototype — it has both cool things and a lot of crappy code. So most probably the existing version will perish. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;However, we are learning lessons of that awesome development cycle and trying to produce something more clean, both conceptually and code-wise. One of the versions we've started working on, is Oleg's &lt;a href="http://github.com/oleganza/strokedb-core/tree/master"&gt;strokedb-core&lt;/a&gt;, an attempt to minimize StrokeDB's essential core functionality and therefore get a way more modular and simpler thing.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;That said, I am still trying to assemble my thoughts about my initial StrokeDB experience and come out with cures for some problems. That might mean yet another "rewrite" branch I can start anytime soon in order to consolidate my &lt;em&gt;updated&lt;/em&gt; vision.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Another change we're working on is getting rid of our custom storages and usage of more proven things, like &lt;a href="http://tokyocabinet.sourceforge.net/"&gt;TokyoCabinet&lt;/a&gt;. As far as you can understand that leads to elimination of skiplist and therefore less code. Which is pretty good anyway.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;So, to recap, our plan is to:&lt;/p&gt;&#xD;
&#xD;
&lt;ul&gt;&#xD;
 &lt;li&gt;Modularize core&lt;/li&gt;&#xD;
 &lt;li&gt;Consolidate updated data organization vision&lt;/li&gt;&#xD;
 &lt;li&gt;More reliable storage&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&#xD;
&lt;p&gt;Unfortunately, the deadline date is open. We have no idea when it will be done.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;I have a bit busy summer and I still can't work full-time on StrokeDB (and will not be able for a substantial period, unfortunately), but be assured, I am definitely not going to throw this stuff away. Neither does &lt;a href="http://oleganza.wordpress.com"&gt;Oleg&lt;/a&gt;. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://github.com/users/follow?target=452"&gt;Stay tuned!&lt;/a&gt; :)&lt;/p&gt;&#xD;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=lU8oDj.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=lU8oDj.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=1M8UeN.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=1M8UeN.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=rD3nw6.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=rD3nw6.p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=Scox0i.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=Scox0i.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/356533137" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/08/strokedb-whats.html</feedburner:origLink></entry>
    <entry>
        <title>Is "save" obsolete?</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/334508077/is-save-obsolet.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/07/is-save-obsolet.html" thr:count="10" thr:updated="2008-11-26T07:51:39-08:00" />
        <id>tag:typepad.com,2003:post-52646166</id>
        <published>2008-07-13T13:49:18-07:00</published>
        <updated>2008-11-26T07:51:40-08:00</updated>
        <summary>Leaving my hangover apart, I want to talk about some recent "realization" I had. I am not sure it is necessarily a good idea, but it might be worth some investigation. So here we go. In those ORMs I know...</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Databases" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;p style="float: left; margin: 0px 10px 0px 0px;"&gt;&#xD;
&lt;img src="http://yrashk.typepad.com/photos/pics/010.jpg"&gt;&lt;/img&gt;&#xD;
&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Leaving my hangover apart, I want to talk about some recent "realization" I had. I am not sure it is necessarily a good idea, but it might be worth some investigation. So here we go.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;In those ORMs I know (I do not pretend to know all of them, and I had an extensive experience only with few of them, mostly in Ruby) your way to operate with your objects' persistency is basically a read-edit-save loop (RESL). There is nothing bad about this way, especially given that you have no built-in versioning in typical relational databases and ORMs.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;But as you may know, we at &lt;a href="http://idbns.com/"&gt;idbns&lt;/a&gt; team are experimenting with some weird ideas and prototypes (like &lt;a href="http://strokedb.com/"&gt;StrokeDB&lt;/a&gt;) and one of the things we definitely love about our approach to data management is a built-in versioning.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;At this moment, StrokeDB implements this RESL thing, too. It is a quite common approach, but it isn't any fun. It does work with versioning pretty well — it just increments document version once you save — nothing really tricky.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;But there is one thing. My own viewpoint that I've developed within past few years is that your persistency mechanism should not let you "separate" your objects from your &lt;a href="http://www.rashkovskii.com/2008/05/we-dont-need-a.html"&gt;programming environment&lt;/a&gt;. So why the hell should I remind my programming environment to persist object's change every time I modify it? Wouldn't it be nice to persist data transparently?&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;May be. There is nothing new about this idea, but as far as I understand, there is not much public use of it in the industry.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Let's try to see where will it lead us to. Given we have built-in versioning, every change (like slot's value change) will cause versions change quite frequently, and, what is more important, these versions will be pretty much pointless. You will have a great history of every single change, but you wouldn't be able to say "and here we did that" for any more-than-one-slot update. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Unless you describe it explicitly. What if we'll make a record for every "business operation", something like a document that says:&lt;/p&gt;&#xD;
&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;this operation was performed at Jul 13, 2008 04:17AM PST&lt;/li&gt;&#xD;
&lt;li&gt;this operation was "week expenses adjustment"&lt;/li&gt;&#xD;
&lt;li&gt;this operation was performed on document 61fe324e-3e6e-49e8-9427-6ebab7c31ff9&lt;/li&gt;&#xD;
&lt;li&gt;this operation starts at version 164c2a4b-294a-4253-97e7-124cc1e4a1cc and ends at version 9d888a2a-7f69-40ae-83c6-c55262d89d99&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&#xD;
&lt;p&gt;It seems that having such kind of an explicit records will also allow us to run some kind of smart and safe compaction on a database.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;I am not sure about the whole idea, but it still sounds interesting for me. What do &lt;b&gt;you&lt;/b&gt; think?&lt;/p&gt;&#xD;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=Xg7fIW.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=Xg7fIW.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=a6SyIH.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=a6SyIH.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=SAlZ7r.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=SAlZ7r.p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=Z8Mddw.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=Z8Mddw.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/334508077" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/07/is-save-obsolet.html</feedburner:origLink></entry>
    <entry>
        <title>I love Vancouver</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/332483354/i-love-vancouve.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/07/i-love-vancouve.html" thr:count="1" thr:updated="2008-07-11T14:18:42-07:00" />
        <id>tag:typepad.com,2003:post-52535820</id>
        <published>2008-07-11T01:07:34-07:00</published>
        <updated>2008-07-13T14:12:05-07:00</updated>
        <summary>That's probably just a matter of being new here, but I am really impressed — it is really a nice and well-balanced city where I do really feel comfortable. Let's see what I will be thinking about it in a...</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Travel" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;p&gt;That's probably just a matter of being new here, but I am really impressed — it is really a nice and well-balanced city where I do &lt;b&gt;really&lt;/b&gt; feel comfortable. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Let's see what I will be thinking about it in a month ;)&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Seagull decided to support my radio:&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=55430" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=3cd5762043&amp;amp;photo_id=2652271022&amp;amp;show_info_box=true"&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=55430"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#000000"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=55430" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=3cd5762043&amp;amp;photo_id=2652271022&amp;amp;flickr_show_info_box=true" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&#xD;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=BWNGVm.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=BWNGVm.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=tMdbDk.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=tMdbDk.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=99r82B.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=99r82B.p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=zFpohp.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=zFpohp.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/332483354" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/07/i-love-vancouve.html</feedburner:origLink></entry>
    <entry>
        <title>Major blog cleanup</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/332483355/major-blog-clea.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/07/major-blog-clea.html" thr:count="1" thr:updated="2008-08-17T11:14:55-07:00" />
        <id>tag:typepad.com,2003:post-52532340</id>
        <published>2008-07-10T22:01:19-07:00</published>
        <updated>2008-08-17T11:14:55-07:00</updated>
        <summary>Hey, I am kind of back from nowhere. This blog is undergoing major cleanup — I will try to re-publish select articles to save some bits of history from 2006 to 2008.</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Weblogs" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;p&gt;Hey, I am kind of back from nowhere. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;This blog is undergoing major cleanup — I will try to re-publish select articles to save some bits of history from 2006 to 2008.&lt;/p&gt;&#xD;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=JaJ7zk.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=JaJ7zk.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=PS3eV2.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=PS3eV2.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=gkP9ka.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=gkP9ka.p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=yzng3d.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=yzng3d.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/332483355" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/07/major-blog-clea.html</feedburner:origLink></entry>
    <entry>
        <title>Oh, by the way, I am in BC</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/332483356/oh-by-the-way-i.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/07/oh-by-the-way-i.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-52532566</id>
        <published>2008-07-07T22:14:00-07:00</published>
        <updated>2008-07-13T14:12:45-07:00</updated>
        <summary>By the way, my time is PST these days and I live in Vancouver’s downtown until September — so if anybody wants to meet — drop me a comment or email.</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Travel" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;p&gt;By the way, my time is PST these days and I live in Vancouver’s downtown until September — so if anybody wants to meet — drop me a comment or email.&lt;/p&gt;&#xD;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=9UHQWr.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=9UHQWr.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=eh0UeM.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=eh0UeM.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=3JrNAT.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=3JrNAT.p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=yABYmY.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=yABYmY.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/332483356" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/07/oh-by-the-way-i.html</feedburner:origLink></entry>
    <entry>
        <title>We Don't Need a "Database"</title>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/rashkovskiicom/~3/334497911/we-dont-need-a.html" />
        <link rel="replies" type="text/html" href="http://www.rashkovskii.com/2008/05/we-dont-need-a.html" thr:count="8" thr:updated="2008-08-23T09:00:14-07:00" />
        <id>tag:typepad.com,2003:post-52647264</id>
        <published>2008-05-16T13:25:00-07:00</published>
        <updated>2008-08-23T09:00:15-07:00</updated>
        <summary>I’ve been trying to formulate what StrokeDB is recently. And here is my summary: StrokeDB is not a database; it is a programming environment on top of Ruby (until we’ll have it ported to other languages). And here are my...</summary>
        <author>
            <name>yrashk</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Databases" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Programming" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://www.rashkovskii.com/">&lt;p&gt;I’ve been trying to formulate what StrokeDB is recently. And here is my summary: StrokeDB is not a database; it is a programming environment on top of Ruby (until we’ll have it ported to other languages). And here are my thoughts about “database” concept.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Do we really need “databases”? Well, I mean, we surely need some toolset to be able to store and retrieve data, but who said we need it in a form of pure datasets to be stored and retrieved? Who said that there should be a database server to interact with? Who said we might need special domain languages designed to manipulate arbitrary data?&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;What we really need is a persistence-aware programming environment, aren’t we? We just need to be able to store and retrieve data no matter how its persistence handled internally. There is nothing new about it, actually — MUMPS and GemStone/S (or even PL/SQL) were around for decades. What we really might need is to be able to create your-application-data-domain specific languages without any hassles — since we need to manipulate application’s data, not just any data (like you basically do with SQL).&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;It is quite popular in Rails world to say that we need a stupid database, just a kind of storage and let Ruby do the rest. Basically, they have a point. They use RDBMS as a data storage layer and their database is actually smart, because what is really important for data handling is actually implemented in Ruby. It is still usually limited by RDBMS design constraints, though.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;My point is that your data should be as close to your main programming environment as it is possible. Your structures should be as native as it is possible — and they should be handled within the same environment. That’s reminds things like PL/SQL. Basically, PL/SQL is not THAT bad, but the thing with it is that usually you was using not ONLY PL/SQL, but, say, some Java code to interoperate with Oracle database.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Your application itself IS a smart database.&#xD;
So, I’d say we’re in the beginning of the long way “back to the future” — persistence-aware programming environments, not just databases.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Viva smart databases!&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;P.S. I am going to blog about data organization concepts within such environments soon — that’s an interesting topic to talk about and it is surely more concrete than this one :)&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;P.P.S. This article got 17 comments initially, so to not to lose them after my &lt;a href="http://www.rashkovskii.com/2008/07/major-blog-clea.html"&gt;major blog cleanup&lt;/a&gt;, you can enjoy comments at &lt;a href="http://209.85.141.104/search?q=cache:nTEIu8A8vFMJ:rashkovskii.com/articles/2008/5/16/we-don-t-need-a-database&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=1"&gt;google's cached version&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=4RYgrr.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=4RYgrr.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=IcI9H1.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=IcI9H1.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=PcWiuR.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=PcWiuR.p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/rashkovskiicom?a=jNH9g0.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/rashkovskiicom?i=jNH9g0.P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rashkovskiicom/~4/334497911" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://www.rashkovskii.com/2008/05/we-dont-need-a.html</feedburner:origLink></entry>
 
</feed>
