<?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[rouslan.com]]></title><description><![CDATA[never stop learning]]></description><link>http://rouslan.com/</link><generator>Ghost 0.7</generator><lastBuildDate>Fri, 16 Sep 2022 12:46:08 GMT</lastBuildDate><atom:link href="http://rouslan.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Vim Cheat Sheets]]></title><description><![CDATA[<p>I thought I'd better have this saved for my own reference, as sites go offline all the time:</p>

<p>Here comes one from vimcheatsheet 'dot com' which is now gone.</p>

<p><img src="http://rouslan.com/content/images/2017/12/10-Best-VIM-Cheat-Sheet-02.jpg" alt="from vimcheatsheet.com, which is now gone"></p>

<p>Other notable mentions:</p>

<ul>
<li><a href="https://github.com/LevelbossMike/vim_shortcut_wallpaper">vim shortcut wallpaper</a></li>
<li><a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html">cheatsheet from viemu author</a></li>
</ul>]]></description><link>http://rouslan.com/2017/12/08/vim-cheat-sheet/</link><guid isPermaLink="false">6eb4571f-2861-437f-b0ff-616e7e218e0e</guid><category><![CDATA[vim]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Fri, 08 Dec 2017 09:03:02 GMT</pubDate><content:encoded><![CDATA[<p>I thought I'd better have this saved for my own reference, as sites go offline all the time:</p>

<p>Here comes one from vimcheatsheet 'dot com' which is now gone.</p>

<p><img src="http://rouslan.com/content/images/2017/12/10-Best-VIM-Cheat-Sheet-02.jpg" alt="from vimcheatsheet.com, which is now gone"></p>

<p>Other notable mentions:</p>

<ul>
<li><a href="https://github.com/LevelbossMike/vim_shortcut_wallpaper">vim shortcut wallpaper</a></li>
<li><a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html">cheatsheet from viemu author</a></li>
</ul>]]></content:encoded></item><item><title><![CDATA[Web.config transformation test online tool]]></title><description><![CDATA[<p>Just found this nice web app, called <a href="https://webconfigtransformationtester.apphb.com/">Web.config Transformation Tester</a> that lets you preview your transformations, so that you can spot any possible errors before deploying to customer's severs.</p>

<p>Enjoy!</p>]]></description><link>http://rouslan.com/2015/08/03/web-config-transformation-test-online-tool/</link><guid isPermaLink="false">925408f8-1ba3-41b6-8a95-3ed098a00f6b</guid><category><![CDATA[ASP.NET]]></category><category><![CDATA[english]]></category><category><![CDATA[web.config]]></category><category><![CDATA[XML]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Mon, 03 Aug 2015 12:48:50 GMT</pubDate><content:encoded><![CDATA[<p>Just found this nice web app, called <a href="https://webconfigtransformationtester.apphb.com/">Web.config Transformation Tester</a> that lets you preview your transformations, so that you can spot any possible errors before deploying to customer's severs.</p>

<p>Enjoy!</p>]]></content:encoded></item><item><title><![CDATA[Install Office on your Mac... Yes, Office 2016]]></title><description><![CDATA[<p>Wow, just got this... Yes, that's right. Office 2016 is available to all the Office 365 subscribers. Today. <br>
<img src="http://rouslan.com/content/images/2015/07/Install-Office-on-your-Mac.png" alt="Install Office on your Mac"></p>

<p>And here is a sneak peek on the Word app.</p>

<h2 id="whatsnewinword">What's new in Word</h2>

<p><img src="http://rouslan.com/content/images/2015/07/What-s-New-in-Word.png" alt="What's new in Word"></p>

<p>After this screen you are prompted for your Office 365 account credentials so that your copy of Office</p>]]></description><link>http://rouslan.com/2015/07/09/install-office-on-your-mac-yes-office-2016/</link><guid isPermaLink="false">68852e9b-45e1-4fa2-8ba8-038f608ef41a</guid><category><![CDATA[mac os x]]></category><category><![CDATA[office]]></category><category><![CDATA[english]]></category><category><![CDATA[ms word]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Thu, 09 Jul 2015 20:22:39 GMT</pubDate><content:encoded><![CDATA[<p>Wow, just got this... Yes, that's right. Office 2016 is available to all the Office 365 subscribers. Today. <br>
<img src="http://rouslan.com/content/images/2015/07/Install-Office-on-your-Mac.png" alt="Install Office on your Mac"></p>

<p>And here is a sneak peek on the Word app.</p>

<h2 id="whatsnewinword">What's new in Word</h2>

<p><img src="http://rouslan.com/content/images/2015/07/What-s-New-in-Word.png" alt="What's new in Word"></p>

<p>After this screen you are prompted for your Office 365 account credentials so that your copy of Office could be activated on your computer.</p>

<h2 id="howwouldyoulikeofficetolook">How would you like Office to look?</h2>

<p><img src="http://rouslan.com/content/images/2015/07/How-would-you-like-Office-to-look.png" alt="How would you like Office to look?"></p>

<h2 id="startusingword">Start using Word</h2>

<p><img src="http://rouslan.com/content/images/2015/07/Start-using-Word.png" alt="Start using Word"></p>

<h2 id="wordinaction">Word in action</h2>

<p><img src="http://rouslan.com/content/images/2015/07/Word-in-action.png" alt="Word in action"></p>

<p>Unlike the Office 11 for Mac, the new interface is almost identical to Office for PC. I think Parallels sales are going to drop soon :)</p>

<p>Enjoy!</p>]]></content:encoded></item><item><title><![CDATA[SublimeText 2/3 Snippet for NVelocity]]></title><description><![CDATA[<p>Hello, just wanted to let you know that I have updated my <a href="https://github.com/iamruss/sublimetext2-velocity-syntax">NVelocity package for SublimeText</a> with a <a href="https://github.com/iamruss/sublimetext2-velocity-syntax/blob/master/new-widget.sublime-snippet">new snippet</a>, which expands <code>newwidget</code> into... well, a new NVelocity widget.</p>

<p>Here's one in action: <br>
<img src="http://rouslan.com/content/images/2015/07/SublimeText-VelocityWIdgetSnippet.gif" alt=""></p>]]></description><link>http://rouslan.com/2015/07/07/sublimetext-nvelocity-snippet/</link><guid isPermaLink="false">2ebf57f7-4d45-45ff-a18f-e008af8affc6</guid><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Tue, 07 Jul 2015 20:22:08 GMT</pubDate><content:encoded><![CDATA[<p>Hello, just wanted to let you know that I have updated my <a href="https://github.com/iamruss/sublimetext2-velocity-syntax">NVelocity package for SublimeText</a> with a <a href="https://github.com/iamruss/sublimetext2-velocity-syntax/blob/master/new-widget.sublime-snippet">new snippet</a>, which expands <code>newwidget</code> into... well, a new NVelocity widget.</p>

<p>Here's one in action: <br>
<img src="http://rouslan.com/content/images/2015/07/SublimeText-VelocityWIdgetSnippet.gif" alt=""></p>]]></content:encoded></item><item><title><![CDATA[Improve ReSharper Intellisense performance in Visual Studio]]></title><description><![CDATA[<p>Recently I started noticing that my Visual Studio started lagging like crazy when I tried to open Intellisense popup. The IDE was literally unresponsive for 10-15 seconds. It was annoying. Period.</p>

<p>I was trying to disable numerous extensions and add-ons, but the intellisense was not collaborating. Then, I tried to</p>]]></description><link>http://rouslan.com/2015/02/07/improve-intellisense-performance-in-visual-studio/</link><guid isPermaLink="false">27c98ea0-6855-44e9-9661-864d082b64a4</guid><category><![CDATA[english]]></category><category><![CDATA[resharper]]></category><category><![CDATA[visual studio]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Sat, 07 Feb 2015 20:01:00 GMT</pubDate><content:encoded><![CDATA[<p>Recently I started noticing that my Visual Studio started lagging like crazy when I tried to open Intellisense popup. The IDE was literally unresponsive for 10-15 seconds. It was annoying. Period.</p>

<p>I was trying to disable numerous extensions and add-ons, but the intellisense was not collaborating. Then, I tried to create basic sample solution with one project and Intellisense was working okay. So, the only difference between the bare-bone sample solution and the typical solution I work with, is the number of files. And I have to tell you, that with all the latest and greates advancements of web technology, typical web solution can contain thousands of files, which VS tries to analyze and fit into small intellisense popup at every key stroke you do. </p>

<p>Since I do not need Resharper's support outside C#-world, it might be a good idea to limit scope of ReSharper Intellisense to this specific language only, so that there is no unnecessary activity performed.</p>

<p><img src="http://rouslan.com/content/images/2015/07/ReSharper-Intellisense.png" alt="limit scope of ReSharper Intellisense to this specific language only"></p>]]></content:encoded></item><item><title><![CDATA[Simplify Windows Service development with Topshelf]]></title><description><![CDATA[If you have to deal with Windows web service development, then you can greatly improve your experience by using TopShelf project.]]></description><link>http://rouslan.com/2015/01/09/simplify-windows-service-development-with-topshelf/</link><guid isPermaLink="false">7e63e811-f71c-438c-a6c3-b03280a7ea5e</guid><category><![CDATA[Topshelf]]></category><category><![CDATA[Windows Services]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Fri, 09 Jan 2015 06:46:12 GMT</pubDate><media:content url="http://cdn.rouslan.com/ghost-content/2015/01/topshelf-logo.png" medium="image"/><content:encoded><![CDATA[<img src="http://cdn.rouslan.com/ghost-content/2015/01/topshelf-logo.png" alt="Simplify Windows Service development with Topshelf"><p>I accidentally discovered there is a <a href="http://rouslan.com/2015/01/09/simplify-windows-service-development-with-topshelf/topshelf-project.com">Topshelf</a> project which helps building Windows services. Here is <a href="http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx">the official way</a> of doing this, by the way.</p>

<p>Just yesterday I went on to create a test Windows service (to host a quartz.net scheduler per se) and the overall experience with debugging was really below “okay”. </p>

<pre><code class="language-csharp">using System;  
using System.Threading;  
using Quartz;  
using Quartz.Impl;  
using ServiceStack.Text;

namespace QuartzTest  
{
    internal static class Program
    {
        public const string ListeningOn = "http://*:8002/";
        private static void Main()
        {
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            var appHost = new AppHost(scheduler);
#if DEBUG
            try
            {
                scheduler.Start();
                appHost.Init();
                appHost.Start(ListeningOn);
                Thread.Sleep(Timeout.Infinite);
            }
            catch (Exception ex)
            {
                "ERROR: {0}: {1}".Print(ex.GetType().Name, ex.Message);
                throw;
            }
            finally
            {
                appHost.Stop();
                scheduler.Shutdown();
            }
#else
            ServiceBase[] servicesToRun =
            {
                new WpmSchedulerService(appHost, ListeningOn, scheduler)
            };
            ServiceBase.Run(servicesToRun);
#endif
        }
    }
}
</code></pre>

<p>You basically have to use <code>#ifdef</code> to have two discrete startup modes for both release and debug environments... and then you have to go and configure service installers and all that jazz with installutil.exe installation/uninstallation on every rebuild.</p>

<p>With Topshelf you can have neat initialization like this one which I borrowed from <a href="https://github.com/quartznet/quartznet/blob/master/server/Quartz.Server/Program.cs">Quartz.Server sample</a></p>

<pre><code class="language-csharp">HostFactory.Run(x =&gt; {

      x.RunAsLocalSystem();

      x.SetDescription(Configuration.ServiceDescription);
      x.SetDisplayName(Configuration.ServiceDisplayName);
      x.SetServiceName(Configuration.ServiceName);

      x.Service(factory =&gt;
                    {
                        QuartzServer server = new QuartzServer();
                        server.Initialize();
                        return server;
                    });
  });
</code></pre>

<p>Maybe I will have to revisit this post later and expand it with my actual experience with Topshelf, but so far it looks very promising alternative.</p>]]></content:encoded></item><item><title><![CDATA[New York trip — November 2014]]></title><description><![CDATA[<p>I stayed in New York for 3 days ( it should be 4 days, but very first leg of my flight itinerary was delayed for 6 hours, so I missed my flight and had to stay in Moscow for a night.</p>

<p>At NYC I stayed in the Hell's Kitchen, a block</p>]]></description><link>http://rouslan.com/2014/12/15/new-york-trip/</link><guid isPermaLink="false">c26055c4-0aca-4fda-9b3c-95b346135b75</guid><category><![CDATA[mvp]]></category><category><![CDATA[nyc]]></category><category><![CDATA[travel]]></category><category><![CDATA[airbnb]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Mon, 15 Dec 2014 17:51:00 GMT</pubDate><media:content url="https://rouslan.com/content/images/2015/07/8U6A3830.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://rouslan.com/content/images/2015/07/8U6A3830.jpg" alt="New York trip — November 2014"><p>I stayed in New York for 3 days ( it should be 4 days, but very first leg of my flight itinerary was delayed for 6 hours, so I missed my flight and had to stay in Moscow for a night.</p>

<p>At NYC I stayed in the Hell's Kitchen, a block away from Times Square, and that did not cost me a fortune. In fact I spent less than some decent hotel charges for a night in this area. This all was possible because of <a href="http://rouslan.com/2014/12/15/new-york-trip/www.airbnb.com/c/rgrabar?s=8">AirBnB</a> which I now try to use first for all my travel needs.</p>

<p>I landed in JFK, "played" a human centipede game at the Passport Control at the port of entry and went to subway. Some of the people were dressed very funny. Later I discovered that I managed to get to NYC at Heloween night.</p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A3838.jpg" alt="New York trip — November 2014"></p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A3830.jpg" alt="New York trip — November 2014">
Next day was my 5K run. Actually I decided not to run, as my knee was hurtig too much, but when I got there, I decided to run anyway. In jeans, rainjacket and with Canon dslr (read 3Kg dumbbell) in my hand. I still managed to finish it in 30 minutes :)</p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A3929.jpg" alt="New York trip — November 2014"></p>

<p>The 2nd of November is a big day in NY. This is the day of a marathon. They say, there are something like 50 thousand participants and you have to be lucky to get a spot and run your 42195 meters.</p>]]></content:encoded></item><item><title><![CDATA[November 2014 — NYC Trip and MVP Summit]]></title><description><![CDATA[<p>November 2014 was a very busy month in terms of events. I took a part in New York City Run and ran 5K trough the streets of NY, starting at the UN headquarters and finished at the Central Park. I had no running shoes, just bib in my camera bag,</p>]]></description><link>http://rouslan.com/2014/12/07/november-2014-nyc-trip-mvp-summit/</link><guid isPermaLink="false">a3baaa6f-08e3-4cfc-a608-ea9b5be0d787</guid><category><![CDATA[mvp]]></category><category><![CDATA[nyc]]></category><category><![CDATA[travel]]></category><category><![CDATA[Seattle]]></category><category><![CDATA[Marathon]]></category><category><![CDATA[running]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Sun, 07 Dec 2014 19:41:00 GMT</pubDate><content:encoded><![CDATA[<p>November 2014 was a very busy month in terms of events. I took a part in New York City Run and ran 5K trough the streets of NY, starting at the UN headquarters and finished at the Central Park. I had no running shoes, just bib in my camera bag, but, nevertheles I decided to run. I do not know why, maybe the atmosphere was very motivating.</p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A3856.jpg" alt="Picture of the crowd at the NYRR event"></p>

<p>On November 2nd, I participated in NYC Marathon [as a spectator] and got enourmous amount of motivation. I cheered runners by clapping so hard, my palms were hurting.</p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A4067.jpg" alt="Picture of NYC Marathong runners, soon to be winners"></p>

<p>The same day I took a flight to Seattle to attend the MVP Summit taking place in Bellevue and Redmond. </p>

<p>As usual, the agenda was very very extensive and it's never an easy to task when it comes to picking up sessions as there were several sessions running at the same time.</p>

<p>Below you can see the only photo I think I can show in a public place :)</p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A4130.jpg" alt="Picture of a session"></p>

<p>Besides the sessions there were plenty of evening evens so MVP could communicate with each other, or just have some nice food and few drinks. Together with my roomate Alex, we had a dinner at some posh steak house and loved the view and the meat (not loved the bill, but that's just an expense, the rest is an experience).</p>

<p>Everything comes to an end at some point, so did the MVP Summit and it was time to get home. That the moment when you recall you have a camera in your bag and start taking pictures. Here are some of mine:</p>

<p><img src="http://rouslan.com/content/images/2015/07/8U6A4146.jpg" alt=" Pics of Seattle 1">
<img src="http://rouslan.com/content/images/2015/07/8U6A4145.jpg" alt=" Pics of Seattle 2">
<img src="http://rouslan.com/content/images/2015/07/8U6A4153.jpg" alt=" Pics of Seattle 3">
<img src="http://rouslan.com/content/images/2015/07/8U6A4158.jpg" alt=" Pics of Seattle 4 - The very first Startbucks shop"></p>]]></content:encoded></item><item><title><![CDATA[CEE MVP Open Days 2014 Review]]></title><description><![CDATA[<p>Hello, I am back home from CEE MVP Open Days 2014. I took my camera with me and here is a photo review of the event.</p>

<p><strong>TLDR</strong>: The event location was perceived as a really remote one. It took 9 hour train ride north of Moscow and an one hour</p>]]></description><link>http://rouslan.com/2014/06/22/cee-mvp-open-days-2014/</link><guid isPermaLink="false">08ad9cf2-48dd-4880-bd4d-2e70249081ff</guid><category><![CDATA[mvp]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Sun, 22 Jun 2014 10:50:52 GMT</pubDate><media:content url="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3327.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3327.jpg" alt="CEE MVP Open Days 2014 Review"><p>Hello, I am back home from CEE MVP Open Days 2014. I took my camera with me and here is a photo review of the event.</p>

<p><strong>TLDR</strong>: The event location was perceived as a really remote one. It took 9 hour train ride north of Moscow and an one hour bus ride into the forests of <a href="http://en.wikipedia.org/wiki/Yaroslavl_Oblast">Yaroslavl oblast</a>. Anything else (hotel, food and evnt content) was awesome. Kudos to the MVP Program Team!</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3327.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<h1 id="travel">Travel</h1>

<p>I took a 2 hour flight to Moscow, then a 9 hour train to Rybinsk. The time it took to attend this event is comparable to the trip to MVP Summit, which takes place in Seattle, USA :)</p>

<p>Some MVPs never traveled by train this far before. So far so you have to make a bed and hibernate during the transit. Urm.. sounds like science fiction - like traveling into neighboring galaxies</p>

<p>Okay, we arrived at Rybinsk early morning. Weather was not collaborating, but it was still nice.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3272.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>The hotel is located deep inside of a pine forest and when you take off the bus, the first thing to notice is how clean is the air around you. <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3275.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Hotel check-in <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3277.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<h1 id="location">Location</h1>

<p>The resort area is huge and guest houses are scattered trough the forest. <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3280.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>There are a lot of navigation signs to help you not to lost. <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3279.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>And entire MVP lead as a last resort option :) <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3278.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>I had no problem finding my house, which I was sharing with two other MVPs. We did not have any problems <a href="http://www.youtube.com/watch?v=MvgN5gCuLac">finding place for our stuff</a>, because Microsoft paid for this: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3282.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Mercure Koprino Bay Hotel is located on banks of Rybinsk reservoir and locals call it a sea. <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3284.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3286.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Finaly, some sunlight... Or is it just MVPs emit a shine. <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3285.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<h1 id="sessions">Sessions</h1>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3288.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Honestly, I was prepared to be overflown with marketing and had some plans to skip some of the sessions in favour of sleeping in the house (I did not get enough sleep in the train and was sleepy all day). But I was totally wrong.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3289.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3292.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>As a result I attended all the sessions I visited were well worth attending!</p>

<p><a href="https://www.facebook.com/ivan.padabed">Ivan Padabed</a> was talking about SSO stuff:
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3293.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Windows Phone Emulator hacks with <a href="https://www.facebook.com/MrSmersh">Catalin Gheorghiu</a> <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3299.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Growing blog audience with <a href="https://www.facebook.com/vadim.sterkin">Vadim Sterkin</a>: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3301.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>The art of stage presence with <a href="https://www.facebook.com/andrey.beshkov">Andrey Beshkov</a>: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3308.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>And <a href="https://www.facebook.com/dmitry.sotnikov">Dmitry Sotnikov</a> had two sessions — setting up a company in the US and how to measure SaaS performance:</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3315.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Unfortunately I was not able to attend many other sessions, as they were running in parallel, but I am sure they were worth paying attention too.</p>

<h1 id="networking">Networking</h1>

<p>There is a Russian saying, which roughly translates as "Do not have a hundred of roubles, but do have a hundred of friends". At CEE Open Days we had a lot of opportunities to make new friends.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3287.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>The Microsoft MVP Support team has arranged a Speed Daiting. And dating is considered to be easier with help of a few glasess of sparkling vine :) <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3329.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Guys had lots of fun in the process:</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3345.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3370.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3338.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3348.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>Besides that, troughout the event everyone had an opportunity to have some chat with peers during lunches and coffee breaks:</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3298.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3296.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<h1 id="entertainment">Entertainment</h1>

<p>We had nice evening after day full of sessions. Microsoft paid for more food and drinks we could consume. Those who are into spirits were not disappointed either. The red fish was cooked very good and other dishes tasty as well. Sorry, I was not taking any photos during lunches and the dinner.</p>

<p>The fireworks show concluded the official day. It was not quite dark for fireworks though, at 11pm we had pretty light sky, and I was not able to take anything impressive, so "please enjoy" this one, with exposure turned few stops down to make sky darker: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3399.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<h1 id="bustourtorybinsk">Bus tour to Rybinsk</h1>

<p>The city is just 35km away from hotel and ont the second day we had a guided tour there. The city takes both banks of Volga river. I think the city could have been maintained a bit better, but anyway, the river and guide's narration made the tour worthwhile. Here are some photos I took during the tour.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3408.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3410.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3419.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3430.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3438.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><a href="http://ru.wikipedia.org/wiki/Ошанин,_Лев_Иванович">Oshanin</a>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3445.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3446.jpg" alt="CEE MVP Open Days 2014 Review">
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3448.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><a href="http://en.wikipedia.org/wiki/Burlak">Burlak</a>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3449.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/8U6A3451.jpg" alt="CEE MVP Open Days 2014 Review"></p>

<p>I hope you enjoyed the review, please leave your comments!</p>]]></content:encoded></item><item><title><![CDATA[Review of NDepend 5 Professional]]></title><description><![CDATA[<p><strong>WARNING</strong> 34 megabytes of animated GIF screencaps ahead!! <strong>WARNING</strong></p>

<blockquote>
  <p>Disclaimer: More than a year ago I received a <a href="http://mvp.microsoft.com/en-US/default.aspx">MVP</a> Pro license from <a href="http://ndepend.com/">NDepend</a> team, and they never told me to write a rave review about it, they just asked to help spread the word. So here is me keeping the</p></blockquote>]]></description><link>http://rouslan.com/2014/06/10/review-of-ndepend-5-professional/</link><guid isPermaLink="false">ca503fc7-75ad-415b-ae26-ce69cd7e253b</guid><category><![CDATA[mvp]]></category><category><![CDATA[software]]></category><category><![CDATA[ndepend]]></category><category><![CDATA[review]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Tue, 10 Jun 2014 19:43:32 GMT</pubDate><content:encoded><![CDATA[<p><strong>WARNING</strong> 34 megabytes of animated GIF screencaps ahead!! <strong>WARNING</strong></p>

<blockquote>
  <p>Disclaimer: More than a year ago I received a <a href="http://mvp.microsoft.com/en-US/default.aspx">MVP</a> Pro license from <a href="http://ndepend.com/">NDepend</a> team, and they never told me to write a rave review about it, they just asked to help spread the word. So here is me keeping the promise :) Please read my sincere review of the <a href="http://ndepend.com/">NDepend 5 Professional</a>. </p>
</blockquote>

<h2 id="whatisndepend">What is NDepend?</h2>

<p>NDepend is a <a href="http://en.wikipedia.org/wiki/Static_program_analysis">static analysis</a> tool for your .NET code, that is, it eats your code, digests it and then it can entertain you with very sophisticated graphs and dependency matrix and, moreover, you can ask it different questions about your code.</p>

<h2 id="theworkflow">The workflow</h2>

<p>You can use NDepend as a standalone application or have it running inside Visual Studio. So you start with selecting either existing Visual Studio Solution, or point NDepend to a folder containing assemblies you want to analyse. </p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-load-assemblies-dialog.png" alt="ndepend load assemblies dialog">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-load-assemblies-dialog.png">full size</a></p>

<p>Once NDepend is done analysing code, you will be presented with HTML report and the application will display a dashboar.</p>

<h2 id="dashboard">Dashboard</h2>

<p>The dashboard is quick way to examine the overal state of the analysed code. You can follow links and play with results.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-dashboard.gif" alt="Dashboard">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-dashboard.gif">full size</a></p>

<p>The dashboard has very important section, which displays information on Code Rules. You can define your own rules which are specific to your oranisation needs, or (<strong>modify and</strong>) use set of <a href="http://www.ndepend.com/DefaultRules/webframe.html">default code rules</a>.</p>

<h2 id="coderules">Code Rules</h2>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-rules.gif" alt="Examine default code rules">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-rules.gif">full size</a></p>

<p>NDepend can help you with code review process. When someone commits new code, you can see which rules this new code has violated or which violations have been fixed. </p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-rules-recent.gif" alt="Examine default code rules">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-rules-recent.gif"></a></p>

<p><strong>[Update]</strong>
NDepend code DIFF feature can help you see what exactly changed between different builds. Just define the projects to compare and scan code changes: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-diff.gif" alt="NDepend code DIFF feature">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-diff.gif">full size</a></p>

<p>Code Rule violations can have different level of severity. If a newbee team member breaks API interface, this kind  of violation will stare at you with its yellow warning triangle. Even if the change was done on purpose, you can ensure the change did make it into the build!</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-critical-rule-violation.png" alt="critical rule violation">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-critical-rule-violation.png">full size</a></p>

<h2 id="graphsandmatrices">Graphs and Matrices</h2>

<p>NDepend can help you understand codebase of virtually any size. NDepend has set of graph and matrix views which will help you find dependencies and problems in your code. Using search feature you can find and visualise complex hierarchies of dependent entities. For example you have some base entity and need to review its descendants.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-dependency-graph.gif" alt="finding classes implementing base class">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-dependency-graph.gif">full size</a></p>

<p>Or you need to BIN deploy an assembly and need to know which assemblies to include into the package: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-dependency-graph-depends.gif" alt="finding assemblies we depend on">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-dependency-graph-depends.gif">full size</a></p>

<p>NDepend is here to help if you do not have much time to read a lot of code just to be able to know where to insert your two lines bugfix.</p>

<p>Say, you have been assigned with a task which requires you to make some changes to some authentication related code. So you need to understand what code to change and where most of the code is located. You always can just search for <code>Auth</code> code inside Visual Studio, or even use Object Browser to locate relevant types, but it is much easier and informative to do with NDepend.</p>

<p>Just type <code>Auth</code> and have the heatmap of auth-related code. You can quickly see the core assembly, you can see where else are the methods, you can drill down to very obscure places in the code -  all of this from one UI.  </p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-finding-assembly-to-investigate.gif" alt="ndepend finding assembly to investigate" title=""> 
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-finding-assembly-to-investigate.gif">full size</a> </p>

<p>And I have not touched matrix analysis yet! Well, I will not dig into matrix view in this post, due to complex nature of this feature, but you can read more about it <a href="http://www.ndepend.com/Doc_Matrix.aspx">here</a> and here is very old, but still very helpful <a href="http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx">Hanselmann article</a> to help you understand the power of the matrix analysis feature.</p>

<h2 id="metrics">Metrics</h2>

<p>Using NDepend metrics you can easily spot code that needs refactoring. You have access to ready made queries that can filter out problematic code, and those queries can be edited to match your company standarts.</p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-refactoring-queries.png" alt="ndepend code refactoring queries">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-refactoring-queries.png">full size</a> </p>

<p>And here is how it works: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-finding-code-to-refactor.gif" alt="finding code to refactor">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-finding-code-to-refactor.gif">full size</a></p>

<h2 id="codequalitytrends">Code Quality Trends</h2>

<p>NDepend allows you to keep track of your code base quality metrics. Using NDepend Project Properties, you can define baseline project to keep your analysis results, which NDepend will use to build trends reports: <br>
<img src="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-trends.gif" alt="code quality trends">
<a href="http://cdn.rouslan.com/ghost-content/2014/06/ndepend-trends.gif">full size</a></p>

<h2 id="otherusesandwrapup">Other Uses And Wrap-Up</h2>

<p>In this flashy animateful blog post I tried to show off the features I liked the most. I honestly liked the matrix, but I do not have suitable project (which I can publicaly show) that would allow me to explain all the benefits matrix provides.</p>

<p>Another huge feature I have not mentioned in this post, is the ability to use NDepend as a part of your <a href="http://en.wikipedia.org/wiki/Continuous_integration">continuous integration process</a>. You can have your own set of rules to break the build and developer, who has broken the build will have no other way around it, other than fix the violating rule. Yes, you can have similar effect with FxCop or tools alike, but with NDepend you get almost an entire IDE to build your perfect set of rules. And it's pure awesome!</p>

<p>Above are the pros. Here is the list of cons:</p>

<p>1) it has kind of a steep learning curve <br>
2) sometimes mouseover popups are blocking you from seeing what you want <br>
3) it takes some time to figure out how to navigate out of analysed code jungles <br>
4) the price is much higher than your average iPhone app :) </p>

<p>I hope you enoyed it. Please let me know if you have any questions or would like some aspects of NDepend explained in future posts.</p>

<p>PS: I have used <a href="http://servicestack.net/">ServiceStack</a> open source project, to which I recently contributed a set of OAuth authentication providers. <a href="https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#v4021-release-notes">Check it out</a>!</p>]]></content:encoded></item><item><title><![CDATA[angular.min.js.map 403 error with ServiceStack]]></title><description><![CDATA[<p>Just a quick note on angular.min.js.map request which fails with 403 Forbidden error when served with ServiceStack host.</p>

<p>First of all, the above file is a Javascript <a href="https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit">source map file</a>, which browsers like Chrome can use to assist in debugging minified javascript source.</p>

<p>The minified file angular.</p>]]></description><link>http://rouslan.com/2014/05/25/angular-min-js-map-403-error-with-servicestack/</link><guid isPermaLink="false">ee560967-25a9-428f-892a-50188e3aaca9</guid><category><![CDATA[ServiceStack]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Sun, 25 May 2014 16:10:04 GMT</pubDate><content:encoded><![CDATA[<p>Just a quick note on angular.min.js.map request which fails with 403 Forbidden error when served with ServiceStack host.</p>

<p>First of all, the above file is a Javascript <a href="https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit">source map file</a>, which browsers like Chrome can use to assist in debugging minified javascript source.</p>

<p>The minified file angular.min.js has this:</p>

<pre><code class="language-javascript">//@ sourceMappingURL=angular.min.js.map
</code></pre>

<p>And the map file has to exist in the same location as the minified file.</p>

<p>ServiceStack host has to know about this to be able to respond to such requests. This is good because it does no allow some odd files to be retrieved therefore minifies the attack surface.</p>

<p>So, when you need to allow ServiceStack to respond with files, having whatever file extension and define proper mime type for it, use the snippet below. This has to go into the app host's Configure method override:</p>

<pre><code class="language-csharp">var hostConfig = new HostConfig  
{
        HandlerFactoryPath = "api/v1",
        MetadataRedirectPath = "/",
};
hostConfig.AllowFileExtensions.Add("map");  
SetConfig(hostConfig);

MimeTypes.ExtensionMimeTypes["map"] = "application/javascript";  
</code></pre>

<p>Enjoy!</p>]]></content:encoded></item><item><title><![CDATA[Importance of goal checking]]></title><description><![CDATA[<p>Interesting video showing how people blind walk to a certain point and cannot make it.</p>

<iframe width="640" height="360" src="//www.youtube.com/embed/MLIT647K0zE" frameborder="0" allowfullscreen></iframe>

<p>Just like in the video above, in our evryday life we often find ourserves distracted while doing those small steps day after day, thinking that we approach our goals. This video proves how important is</p>]]></description><link>http://rouslan.com/2014/05/04/importance-of-goal-checking/</link><guid isPermaLink="false">a5159254-b4d7-40c4-95c7-d2d01e2f9def</guid><category><![CDATA[english]]></category><category><![CDATA[goals]]></category><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Sun, 04 May 2014 18:19:04 GMT</pubDate><content:encoded><![CDATA[<p>Interesting video showing how people blind walk to a certain point and cannot make it.</p>

<iframe width="640" height="360" src="//www.youtube.com/embed/MLIT647K0zE" frameborder="0" allowfullscreen></iframe>

<p>Just like in the video above, in our evryday life we often find ourserves distracted while doing those small steps day after day, thinking that we approach our goals. This video proves how important is to have your goal always in your sight. So, it always is a good idea to stop for a moment, rise your head and make sure you are still on track.</p>

<p>Cheers!</p>]]></content:encoded></item><item><title><![CDATA[Sorting algorithm visualization]]></title><description><![CDATA[<p>Last evening I tried to explain my 13 y.o. daughter what is an algorithm. She seen some basic stuff at <a href="http://learn.code.org/hoc/16">code.org</a> already and had some misunderstanding what algorithm really is. So, again, I was trying to explain it with whiteboard and a marker, drawing steps of bubble sort.</p>]]></description><link>http://rouslan.com/2014/04/17/sorting-algorithm-visualization/</link><guid isPermaLink="false">9b6b6917-6e18-435c-b442-c3dfa2670427</guid><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Thu, 17 Apr 2014 05:51:00 GMT</pubDate><content:encoded><![CDATA[<p>Last evening I tried to explain my 13 y.o. daughter what is an algorithm. She seen some basic stuff at <a href="http://learn.code.org/hoc/16">code.org</a> already and had some misunderstanding what algorithm really is. So, again, I was trying to explain it with whiteboard and a marker, drawing steps of bubble sort. It was kinda boring for both of us, so I went on to find those famous <a href="http://www.sorting-algorithms.com/">sorting algorithm animations</a> and here is what I found:</p>

<iframe width="640" height="360" src="//www.youtube.com/embed/lyZQPjUT5B4" frameborder="0" allowfullscreen></iframe>

<p>This is simply brilliant! Here's <a href="http://algo-rythmics.ms.sapientia.ro/">where that video comes from</a> - they have covered those well know sort algorithms and even have the interactive section where one can either watch the turn-by-turn explanation, or try running the algorythm manually.</p>

<p>Check it out: <a href="http://algo-rythmics.ms.sapientia.ro/">http://algo-rythmics.ms.sapientia.ro/</a></p>

<p>Enjoy!</p>]]></content:encoded></item><item><title><![CDATA[nuget.config - Specify ‘packages’ Folder Location]]></title><description><![CDATA[<p>Unfortunately, the <a href="https://docs.nuget.org/docs/Release-Notes/NuGet-2.1#Specify_%e2%80%98packages%e2%80%99_Folder_Location">official way to specify 'packages' folder location</a> never worked for me. Every time I copy and paste the official snippet, it just does not work. I have no idea why, but when I use this snippet, everything <em>just works</em> as I want it to!   </p>

<pre><code>&lt;?xml version="1.</code></pre>]]></description><link>http://rouslan.com/2014/04/13/nuget-config-specify-packages-folder-location/</link><guid isPermaLink="false">eec67d91-3b99-4354-be68-3bfcb28cc692</guid><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Sun, 13 Apr 2014 19:38:06 GMT</pubDate><content:encoded><![CDATA[<p>Unfortunately, the <a href="https://docs.nuget.org/docs/Release-Notes/NuGet-2.1#Specify_%e2%80%98packages%e2%80%99_Folder_Location">official way to specify 'packages' folder location</a> never worked for me. Every time I copy and paste the official snippet, it just does not work. I have no idea why, but when I use this snippet, everything <em>just works</em> as I want it to!   </p>

<pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;  
&lt;settings&gt;  
    &lt;repositoryPath&gt;..\packages&lt;/repositoryPath&gt;
&lt;/settings&gt;  
</code></pre>

<p>Cheers!</p>]]></content:encoded></item><item><title><![CDATA[Playing games backwards]]></title><description><![CDATA[<p>Many games have a clear objective which is to achieve maximum score by following game rules. This is de facto, but turns out some games become deadly difficult if you reverse the objective. Try playing a Reversi exactly opposite, i.e. take as little cells as possible. </p>

<p>My personal record</p>]]></description><link>http://rouslan.com/2014/04/08/playing-games-backwards/</link><guid isPermaLink="false">ffa0a683-8bae-486c-9ada-a50ee2654e82</guid><dc:creator><![CDATA[Rouslan Grabar]]></dc:creator><pubDate>Tue, 08 Apr 2014 06:36:28 GMT</pubDate><content:encoded><![CDATA[<p>Many games have a clear objective which is to achieve maximum score by following game rules. This is de facto, but turns out some games become deadly difficult if you reverse the objective. Try playing a Reversi exactly opposite, i.e. take as little cells as possible. </p>

<p>My personal record was a game when I played black stones and every stone on the board was of white color. </p>

<p><img src="http://cdn.rouslan.com/ghost-content/2014/04/morocco-reversi-game-screenshot.png" alt=""></p>

<blockquote>
  <p>You get extra bragging rights if the layout of the winner stones resembles a finger gesture :) </p>
</blockquote>]]></content:encoded></item></channel></rss>