<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Stefantsov WebCraft</title>
	<atom:link href="https://stefantsov.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://stefantsov.com</link>
	<description>PHP with .NET background.</description>
	<lastBuildDate>Thu, 11 May 2017 14:13:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.4</generator>
	<item>
		<title>Editing content in WordPress with Polylang</title>
		<link>https://stefantsov.com/editing-content-in-wordpress-with-polylang/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Thu, 11 May 2017 14:10:18 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[polylang]]></category>
		<category><![CDATA[translation]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://stefantsov.com/?p=1313</guid>

					<description><![CDATA[After you log into WordPress which has Polylang multi-language plugin installed, you will see controls to create content in different locales: &#160; &#160; In Polylang, post of different language is a separate posts entity in database, with different meta. For Polylang to know that few different posts/pages are same page in different languages, pages must [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>After you log into WordPress which has Polylang multi-language plugin installed, you will see controls to create content in different locales:</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/polylang-list-of-pages-wordpress-1.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1323" src="https://stefantsov.com/wp-content/uploads/2017/05/polylang-list-of-pages-wordpress-1-720x375.png" alt="" width="720" height="375" srcset="https://stefantsov.com/wp-content/uploads/2017/05/polylang-list-of-pages-wordpress-1-720x375.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-list-of-pages-wordpress-1-384x200.png 384w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-list-of-pages-wordpress-1-320x167.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-list-of-pages-wordpress-1.png 1355w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>In Polylang, post of different language is a separate <code>posts</code> entity in database, with different meta. For Polylang to know that few different posts/pages are same page in different languages, pages must be linked using Polylang interface.</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/wordpress-polylang-language-link-interface.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1316" src="https://stefantsov.com/wp-content/uploads/2017/05/wordpress-polylang-language-link-interface-720x590.png" alt="" width="720" height="590" srcset="https://stefantsov.com/wp-content/uploads/2017/05/wordpress-polylang-language-link-interface-720x590.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/wordpress-polylang-language-link-interface-244x200.png 244w, https://stefantsov.com/wp-content/uploads/2017/05/wordpress-polylang-language-link-interface-320x262.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/wordpress-polylang-language-link-interface.png 861w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<p>Here you can see, page <code>Quotes</code> has one translation: to Russian. Russian page is named <code>Котировки</code>.</p>
<p>You have three options when using Polylang <code>Languages</code> controls:</p>
<p><strong>1.</strong> You may open existing page of other language to edit it, by pressing <code>pencil</code> to the right of the language flag.</p>
<p><strong>2.</strong> You may create new page for other language, by pressing <code>plus sign</code> to the right of the language flag.</p>
<p><strong>3.</strong> <strong>This one is not obvious:</strong> you may start typing page name, and Polylang will try to find it. This way you can tell Polylang it&#8217;s same page, but in another language.</p>
<p>&nbsp;</p>
<p>Don&#8217;t forget to <code><strong>Publish</strong></code> / <code><strong>Update</strong></code> current item after you have made any changes!</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/remember-to-update-and-publish-wordpress-post-or-page.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1318" src="https://stefantsov.com/wp-content/uploads/2017/05/remember-to-update-and-publish-wordpress-post-or-page-720x590.png" alt="" width="720" height="590" srcset="https://stefantsov.com/wp-content/uploads/2017/05/remember-to-update-and-publish-wordpress-post-or-page-720x590.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/remember-to-update-and-publish-wordpress-post-or-page-244x200.png 244w, https://stefantsov.com/wp-content/uploads/2017/05/remember-to-update-and-publish-wordpress-post-or-page-320x262.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/remember-to-update-and-publish-wordpress-post-or-page.png 861w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<hr />
<p>&nbsp;</p>
<p>So that was the theory. This is how your workflow could look like:</p>
<p><strong>1.</strong> Find a page you want to translate, open it. Click <code>Edit page</code>.</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/wordpress-edit-page.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1319" src="https://stefantsov.com/wp-content/uploads/2017/05/wordpress-edit-page-720x590.png" alt="" width="720" height="590" srcset="https://stefantsov.com/wp-content/uploads/2017/05/wordpress-edit-page-720x590.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/wordpress-edit-page-244x200.png 244w, https://stefantsov.com/wp-content/uploads/2017/05/wordpress-edit-page-320x262.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/wordpress-edit-page.png 861w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<p><strong>2.</strong> Look if it already has a translation for your language. Create new page, or edit existing one by clicking <code>pencil</code> or <code>plus sign</code>.</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/polylang-create-or-edit-translation.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1320" src="https://stefantsov.com/wp-content/uploads/2017/05/polylang-create-or-edit-translation-720x590.png" alt="" width="720" height="590" srcset="https://stefantsov.com/wp-content/uploads/2017/05/polylang-create-or-edit-translation-720x590.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-create-or-edit-translation-244x200.png 244w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-create-or-edit-translation-320x262.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-create-or-edit-translation.png 861w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<blockquote><p><strong>Tip:</strong> Use middle mouse button! It will open link in new tab, this will help you simultaneously open current page, and a new one!</p></blockquote>
<p>&nbsp;</p>
<p><strong>3.</strong> Publish your translated content.</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/polylang-publish-content-in-new-language.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1325" src="https://stefantsov.com/wp-content/uploads/2017/05/polylang-publish-content-in-new-language-720x606.png" alt="" width="720" height="606" srcset="https://stefantsov.com/wp-content/uploads/2017/05/polylang-publish-content-in-new-language-720x606.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-publish-content-in-new-language-238x200.png 238w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-publish-content-in-new-language-320x269.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-publish-content-in-new-language.png 1204w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<p>Congratulations! You have translated the page!</p>
<p>You may check if it was done correctly, by going back to original page, and changing current site language with language selector. Site should automatically open your translated version.</p>
<p><a href="https://stefantsov.com/wp-content/uploads/2017/05/polylang-can-automatically-link-other-language-pages.png" data-rel="lightbox-gallery-wcmqS0vP" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1326" src="https://stefantsov.com/wp-content/uploads/2017/05/polylang-can-automatically-link-other-language-pages-720x539.png" alt="" width="720" height="539" srcset="https://stefantsov.com/wp-content/uploads/2017/05/polylang-can-automatically-link-other-language-pages-720x539.png 720w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-can-automatically-link-other-language-pages-267x200.png 267w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-can-automatically-link-other-language-pages-320x240.png 320w, https://stefantsov.com/wp-content/uploads/2017/05/polylang-can-automatically-link-other-language-pages.png 883w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>&nbsp;</p>
<p>Well done!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Change wBounce display status with a filter</title>
		<link>https://stefantsov.com/wbounce-display-filter/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Wed, 20 Jan 2016 13:38:26 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[pull request]]></category>
		<category><![CDATA[wbounce]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1303</guid>

					<description><![CDATA[wBounce is already an excellent powerful WordPress plugin. It is used to display popups on website, but do it smart: only bother visitor once he is about to leave anyway. When he moved mouse out of active window, probably aiming to (X) close it. Here is how I use it, quite successfully: (watch live example here) [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://wordpress.org/plugins/wbounce/" target="_blank">wBounce</a> is already an excellent powerful WordPress plugin. It is used to display popups on website, but do it smart: only bother visitor once he is about to leave anyway. When he moved mouse out of active window, probably aiming to (X) close it.</p>
<p>Here is how I use it, quite successfully: (<a href="http://dima.stefantsov.com/tools/" target="_blank">watch live example here</a>)</p>
<p><a href="http://stefantsov.com/wp-content/uploads/2016/01/wbounce-how-to-use.png" rel="attachment wp-att-1304" data-rel="lightbox-gallery-t01NSB75" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-large wp-image-1304" src="http://stefantsov.com/wp-content/uploads/2016/01/wbounce-how-to-use-720x586.png" alt="wbounce how to use" width="720" height="586" srcset="https://stefantsov.com/wp-content/uploads/2016/01/wbounce-how-to-use-720x586.png 720w, https://stefantsov.com/wp-content/uploads/2016/01/wbounce-how-to-use-246x200.png 246w, https://stefantsov.com/wp-content/uploads/2016/01/wbounce-how-to-use-320x260.png 320w, https://stefantsov.com/wp-content/uploads/2016/01/wbounce-how-to-use.png 1138w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p>It have brought me 500% more email subscribers than a sidebar widget. While wBounce is highly effective, it&#8217;s not as hateful as other effective marketing methods. For my own sites, I choose wBounce. Highly recommend it!</p>
<p>&nbsp;</p>
<p>But sometimes you don&#8217;t want to show a popup. It can be disabled manually for each post, and after <a href="https://github.com/kevinweber/wbounce/pull/7" target="_blank">this pull request</a> it can also be disabled <code>(or enabled, if that's what you want)</code> dynamically with a filter.</p><pre class="crayon-plain-tag">add_filter('wbounce_test_if_status_is_off', 'd_wbounce_test_if_status_is_off');
function d_wbounce_test_if_status_is_off($isoff)
{
    // If it's disabled manually - let it be.
    // If it's enabled, disable it when hide_metrika is set.
    return $isoff || (function_exists('get_field') &amp;&amp; get_field("hide_metrika"));
}</pre><p>If it&#8217;s hidden, keep it hidden. If post has <code>hide_metrika</code> meta set to <code>true</code>, then hide wBounce as well.</p>
<p>Now you can dynamically hide/show wBounce on your pages with any conditions you like!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RegisterClient overview</title>
		<link>https://stefantsov.com/registerclient-overview/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Thu, 31 Dec 2015 03:46:30 +0000</pubDate>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[sockets]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1298</guid>

					<description><![CDATA[This is an overview of RegisterClient software I wrote for SMP. Interface is in Russian. Descriptions and snapshots are stored in XML files. There is also RegisterServer, runs on the camera hardware itself: pretty simple program in C, using sockets. Not worth mentioning. &#160;]]></description>
										<content:encoded><![CDATA[<p>This is an overview of RegisterClient software I wrote for <a href="http://stefantsov.com/smp/">SMP</a>.</p>
<p>Interface is in Russian. Descriptions and snapshots are stored in XML files.</p>
<p>There is also RegisterServer, runs on the camera hardware itself: pretty simple program in C, using sockets. Not worth mentioning.</p>
<p>&nbsp;</p>
<p><iframe width="640" height="360" src="https://www.youtube.com/embed/CGHhx9mwiBI?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Add post meta to AnsPress with Add Meta Tags plugin</title>
		<link>https://stefantsov.com/add-post-meta-to-anspress-with-add-meta-tags-plugin/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Fri, 18 Dec 2015 06:41:34 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[add meta tags]]></category>
		<category><![CDATA[anspress]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1216</guid>

					<description><![CDATA[For better SEO, you want to have proper meta description , open graph tags on every page of your site. That includes AnsPress Q&#38;A pages. It doesn&#8217;t work out of the box, but it&#8217;s easy to implement. Install AnsPress, this tutorial is about it. Install Add Meta Tags, a great plugin that can generate almost any meta schema [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>For better SEO, you want to have proper <code>meta description</code> , <code>open graph</code> tags on every page of your site. That includes <strong>AnsPress Q&amp;A</strong> pages.</p>
<p>It doesn&#8217;t work out of the box, but it&#8217;s easy to implement.</p>
<ol>
<li>Install <a href="https://wordpress.org/plugins/anspress-question-answer/" target="_blank">AnsPress</a>, this tutorial is about it.</li>
<li>Install <a href="https://wordpress.org/plugins/add-meta-tags/" target="_blank">Add Meta Tags</a>, a great plugin that can generate almost any meta schema there is.</li>
<li>(optional) Install <a href="https://wordpress.org/plugins/code-snippets/" target="_blank">Code Snippets</a> and you won&#8217;t have to edit your <code>functions.php</code>. Any piece of code you can just save in wordpress backend.</li>
<li>Set Add Meta Tag the way you like<br />
<a href="http://stefantsov.com/wp-content/uploads/2015/12/add-meta-tags-anspress-meta-configuration.png" rel="attachment wp-att-1218" data-rel="lightbox-gallery-t6Q9U92U" data-rl_title="" data-rl_caption="" title=""><img class="alignnone wp-image-1218 size-full" src="http://stefantsov.com/wp-content/uploads/2015/12/add-meta-tags-anspress-meta-configuration.png" alt="add meta tags anspress meta configuration" width="703" height="450" srcset="https://stefantsov.com/wp-content/uploads/2015/12/add-meta-tags-anspress-meta-configuration.png 703w, https://stefantsov.com/wp-content/uploads/2015/12/add-meta-tags-anspress-meta-configuration-312x200.png 312w, https://stefantsov.com/wp-content/uploads/2015/12/add-meta-tags-anspress-meta-configuration-320x205.png 320w" sizes="(max-width: 703px) 100vw, 703px" /></a><br />
and so on, there are many more options.</li>
<li>Add the following snippet to your <code>functions.php</code> or Code Snippets:<br />
<pre class="crayon-plain-tag">add_action('wp', 'd_anspress_amt_fix');
function d_anspress_amt_fix()
{
    // Only make changes when inside AnsPress.
    if (!function_exists('is_anspress') || !is_anspress()) {
        return;
    }


    add_filter('amt_exclude_schemaorg_metadata', '__return_true');
    add_filter('amt_exclude_dublin_core_metadata', '__return_true');

    // Feed AMT with real question-post.
    if (is_question()) {
        add_filter('amt_get_queried_object', function(){ return get_post(get_question_id(), OBJECT); });
    }
}</pre><br />
(details on why this snippet is required <a href="https://github.com/gnotaras/wordpress-add-meta-tags/issues/10" target="_blank">here</a>)</li>
<li>It works, congratulations!<br />
See a live example here: <a href="http://dima.stefantsov.com/qa/" target="_blank">http://dima.stefantsov.com/qa/</a>.</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tools</title>
		<link>https://stefantsov.com/tools/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Fri, 20 Nov 2015 23:57:29 +0000</pubDate>
				<category><![CDATA[Other]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1204</guid>

					<description><![CDATA[UPD: this list is outdated. For the new up-to-date version use this link (russian descriptions). Here is a list of tools I&#8217;m using for work and fun. I hope it will be useful to you. If you think you know something even better, you are welcome to throw your links at me in the comments. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>UPD:</strong> this list is outdated. For the new up-to-date version use <strong><a href="http://dima.stefantsov.com/tools/">this link</a></strong> (russian descriptions).</p>
<hr />
<p>Here is a list of tools I&#8217;m using for work and fun. I hope it will be useful to you. If you think you know something even better, you are welcome to throw your links at me in the comments.</p>
<h2>TOOLS I USE EVERY DAY</h2>
<p><a href="http://www.ghisler.com/" target="_blank"><strong>Total Commander</strong></a> &#8211; always opened fullscreen. Never ever using Explorer. If you want to be a power user, you must use some file manager. Total Commander is, like, the best.</p>
<p><a href="http://www.google.com/chrome" target="_blank"><strong>Google Chrome</strong></a> &#8211; best web browser. Fastest. Does not need to be introduced.</p>
<ul>
<li><a href="https://chrome.google.com/webstore/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom" target="_blank"><strong>AdBlock</strong></a> &#8211; Google Chrome browser extension. No more ads. You are welcome.</li>
<li><strong><a href="https://chrome.google.com/webstore/detail/google-mail-checker/mihcahmgecmbnbcchbopgniflfhgnkff" target="_blank">Google Mail Checker</a></strong> &#8211; shows me when there&#8217;s new mail.</li>
<li><a href="https://chrome.google.com/webstore/detail/pocket-formerly-read-it-l/niloccemoadcdkdjlinkgdfekeahmflj" target="_blank"><strong>Pocket</strong></a> &#8211; formerly Read It Later. This extension allows me to &#8220;bookmark&#8221; pages to read them later. They are automatically downloaded to my cellphone, so I can read them in offline mode.</li>
</ul>
<p><strong><a href="http://www.autohotkey.com/" target="_blank">AutoHotkey</a></strong> &#8211; this thing is in my Startup folder. Whenever anything need to be automated, AutoHotkey is the way to go. For example, right now it is in change of sounds volume binds, taking screenshots, auto-replacing certain clipboard strings etc.</p>
<p><a href="https://bitbucket.org/DimaStefantsov/commandlinetimer" target="_blank"><strong>CommandLineTimer</strong></a> &#8211; my own project. Whenever I need to do something later, I use this command line timer.</p>
<p><a id="slickrun" href="http://www.bayden.com/SlickRun/" target="_blank"><strong>SlickRun</strong></a> &#8211; I would not be able to use my PC without it. Pressing a hotkey brings up a &#8220;command line&#8221;, which can also execute additional smart commands. For example, when I enter &#8220;l table&#8221;, it will open translation of this word to Russian; and vice versa. If I type &#8220;timer 2h&#8221;, it starts CommandLineTimer that will pop up in 2 hours. And so on. A must have tool.</p>
<p><a href="http://www.skype.com/" target="_blank"><strong>Skype</strong></a> &#8211; a network messenger, VoIP, video calls. Even though this software itself is not very good, it is very popular, and it have really great quality sound engine in it.</p>
<p><a href="http://www.aimp.ru/" target="_blank"><strong>AIMP</strong></a> &#8211; good audio player. I have been using Winamp for more than 10 years. Now that it&#8217;s no longer being developed (and I believe I had some problems with it), AIMP is great replacement. Everything works right out of the box.</p>
<p><a href="http://www.flos-freeware.ch/notepad2.html" target="_blank"><strong>Notepad2</strong></a> &#8211; the best notepad. I use it for everything text-related. It also have syntax highlighting. Very lightweight, easy and powerful.</p>
<p><a href="http://www.syntevo.com/smartgithg/" target="_blank"><strong>SmartGit/Hg</strong></a> &#8211; the best VCS client. Supports not just Git and Hg, but also Svn. It magically pulls entire SVN repository and allows you to work locally with it as it was Git. And then you can commit it back to Svn. It&#8217;s compare tool is also the best I have seen, but that&#8217;s probably a matter of taste. I strongly recommend it!</p>
<p><a href="http://www.visualstudio.com/" target="_blank"><strong>Visual Studio</strong></a> &#8211; I think you have already heard about this one. If you are coding .NET, this is the IDE to use.</p>
<ul>
<li><a href="http://www.jetbrains.com/resharper/" target="_blank"><strong>ReSharper</strong></a> &#8211; empowers Visual Studio. Adds powerful refactorings, navigation, on-the-fly decompilation etc. A must have.</li>
<li><a href="http://visualstudiogallery.msdn.microsoft.com/f5007932-0720-492b-8a51-631d5265f6b7" target="_blank"><strong>VSGesture</strong></a> &#8211; a nice addon to have. I usually use it&#8217;s multiple strikes gesture to close all opened windows.</li>
</ul>
<p><a href="http://en.wikipedia.org/wiki/SQL_Server_Management_Studio" target="_blank"><strong>SQL Server Management Studio</strong></a> &#8211; a little sister of Visual Studio. I run SQL code there.</p>
<p><a href="http://s.stefantsov.com/stefantsov.com-2015/punto%20switcher.html" target="_blank"><strong>Punto Switcher</strong></a> &#8211; a keylogger, a tool to convert texts typed in wrong keyboard layout. Program have it&#8217;s bad sides, but I don&#8217;t see good alternatives at the moment.</p>
<p><a href="http://www.acdsee.com/" target="_blank"><strong>ACDSee 3.1</strong></a> &#8211; I&#8217;m using same old version I was running during win95/98 times. It&#8217;s blazing fast, and does everything one can want from image viewer. Even have some basic editing/resizing built in.</p>
<p><a href="http://www.openoffice.org/" target="_blank"><strong>Open Office</strong></a> &#8211; a free alternative to MS Office. It just works. I don&#8217;t care.</p>
<p><a href="http://keepass.info/" target="_blank"><strong>KeePass</strong></a> &#8211; a safe place to keep your strong passwords.</p>
<p><a href="http://www.truecrypt.org/" target="_blank"><strong>TrueCrypt</strong></a> &#8211; encrypt your PC.</p>
<p><a href="http://www.rarlab.com/" target="_blank"><strong>WinRAR</strong></a> &#8211; great archiver. Have been using it for about 15 years already, it was always invaluable and perfect.</p>
<h2>SITUATIONAL TOOLS</h2>
<p><a href="http://www.red-gate.com/products/dotnet-development/reflector/" target="_blank"><strong>.NET Reflector</strong></a> &#8211; this one is not free, but it worth it. Shows you the source code of any .net library or application. You can also change it on the fly as well.</p>
<p><a href="http://msdn.microsoft.com/en-us/library/aa309387(v=vs.71).aspx" target="_blank"><strong>Ildasm</strong></a> &#8211; IL disassembler by Microsoft.</p>
<p><a href="http://www.microsoft.com/web/webmatrix/" target="_blank"><strong>WebMatrix</strong></a> &#8211; another IDE from Microsoft. I use it to publish my CMS sites. It&#8217;s publishing capabilities are excellent.</p>
<p><a href="http://www.cpuid.com/softwares/cpu-z.html" target="_blank"><strong>CPU-Z</strong></a> &#8211; shows detailed info about your current hardware.</p>
<p><a href="http://www.kwakkelflap.com/fping.html" target="_blank"><strong>fping</strong></a> &#8211; a better ping tool.</p>
<p><a href="http://www.9bis.net/kitty/" target="_blank"><strong>KiTTY</strong></a> &#8211; a fork of PuTTY. Best telnet client. Now with transparency and other useful features.</p>
<p><a href="http://www.linqpad.net/" target="_blank"><strong>LINQPad</strong></a> &#8211; quickly run some C# code, query database with LINQ or Lambda methods, look at the resulting SQL query, and much much more. Lightweight application, paid version have intellisense.</p>
<p><a href="http://writemonkey.com/" target="_blank"><strong>WriteMonkey</strong></a> &#8211; I have found this program to be the best place to write text into. I mostly use it for SEO purposes, when I have to sit down and generate fixed amount of some text.</p>
<p><a href="http://download.cnet.com/SPI-Port-Forward/3000-2651_4-10764348.html" target="_blank"><strong>SPI Port Forward</strong></a> &#8211; it&#8217;s home site is not available, but this tool still works. I&#8217;ve used it to make local Visual Studio web server available over local network.</p>
<p><a href="http://technet.microsoft.com/en-us/sysinternals/bb896653" target="_blank"><strong>Process Explorer</strong></a> &#8211; powerful task manager from sysinternals.</p>
<p><a href="http://technet.microsoft.com/en-us/sysinternals/bb896645" target="_blank"><strong>Process Monitor</strong></a> &#8211; combines two legacy utilities: FileMon and RegMon. This program will show you EVERYTHING any application is doing in your system. What files it is accessing, what registry paths are being read or modified. Just make sure you are filtering out much enough, otherwise data will overwhelm you.</p>
<p><a href="http://sourceforge.net/projects/sqlitebrowser/" target="_blank"><strong>SQLite Database Browser</strong></a> &#8211; obviously, will browse SQLite databases. I wrote about using it<a title="Editing Skype history / messages / database" href="http://s.stefantsov.com/stefantsov.com-2015/editing-skype-history-messages-database.html" target="_blank">here</a>.</p>
<p><strong><a href="http://www.videolan.org/vlc/index.html" target="_blank">VLC media player</a></strong> &#8211; whatever I want from a video player, this player have. Using different subtitles files, different audio tracks, running separate audio track synchronized with main video file, streaming video &#8211; it does everything. It just works. Check it out.</p>
<p><a href="http://technet.microsoft.com/en-us/sysinternals/bb897434" target="_blank"><strong>ZoomIt</strong></a> &#8211; one more excellent tool from sysinternals. Easy way to zoom into any part of screen, draw on your screen etc. Useful for presenting.</p>
<p><a href="http://www.pendrivelinux.com/" target="_blank"><strong>Universal USB Installer</strong></a> &#8211; whenever I have bootable image I want to put on a flash drive, I just run this program, feed it the image, and click the &#8220;go&#8221; button. So far, it always worked.</p>
<p><a href="http://www.utorrent.com/" target="_blank"><strong>uTorrent</strong></a> &#8211; BitTorrent client. It have lots of ads lately, and each update it tries to install a crapware with it, so be careful. But once before it was the best torrent client. I&#8217;m still using it.</p>
<p><a href="http://www.ks-soft.net/ip-tools.eng/index.htm" target="_blank"><strong>IP-Tools</strong></a> &#8211; collection of network tools.</p>
<p><a href="https://www.dropbox.com/" target="_blank"><strong>Dropbox</strong></a> &#8211; your hard drive in the cloud. Sync through all your devices and computers. Microsoft SkyDrive sucks. Google Drive is nothing special. Some time ago I would say Wuala is the way to go, but it just have too many problems. If only Wuala was as smooth as Dropbox&#8230;</p>
<p><strong><a href="http://www.photoshop.com/" target="_blank">Photoshop</a></strong> &#8211; world famous graphical package. Can be useful to crop images from time to time 😉</p>
<p><a href="http://www.adobe.com/products/audition.html" target="_blank"><strong>Audition</strong></a> &#8211; powerful audio suite from Adobe. Record multiple tracks, apply filters, etc.</p>
<p><a href="http://www.techsmith.com/camtasia.html" target="_blank"><strong>Camtasia Studio</strong></a> &#8211; capture screen video and audio. Like Fraps, but much better. Can edit video as well.</p>
<p><a href="http://www.techsmith.com/snagit.html" target="_blank"><strong>SnagIt</strong></a> &#8211; a powerful tool to take screenshots. For example, it can take a long single screenshot of multi-page document.</p>
<p><strong><a href="http://en.wikipedia.org/wiki/Derive_(computer_algebra_system)" target="_blank">Derive 6</a> </strong>&#8211; mathematical software. Solve equations, draw graphics. Now discontinued, but I still occasionally use it.</p>
<p><a href="http://www.aptuner.com/" target="_blank"><strong>AP Tuner</strong></a> &#8211; this program helps me tune my guitar.</p>
<p><strong><a href="http://www.vmware.com/products/workstation/" target="_blank">VMware Workstation</a></strong> &#8211; virtual machines. Run any OS right inside your Windows. Useful for doing dangerous things, or for testing different operating systems.</p>
<h2>WEB SERVICES</h2>
<p><a href="https://mail.google.com/" target="_blank"><strong>Gmail</strong></a> &#8211; ever since I first tried gmail, I&#8217;ve never looked back at TheBat and others. Gmail is simply The Best. It have beaten spam. UI is responsive, clean, easy to use. If you are still using other public email, like yahoo or hotmail, you should seriously give gmail a try. You will love it.</p>
<p><a href="https://workflowy.com/" target="_blank"><strong>Workflowy</strong></a> &#8211; best (web) tool to make lists. I use it for my improvised GTD system. It suffer from lack of proper/any Android offline client, but otherwise it&#8217;s perfect.</p>
<p><a href="http://www.twitch.tv/" target="_blank"><strong>Twitch.tv</strong></a> &#8211; live streams. Most of streams are PC games.</p>
<p><a href="https://www.cloudflare.com/" target="_blank"><strong>Cloudflare</strong></a> &#8211; great CDN. Plug your site into Cloudflare and it will automatically benefit from a dozen of improvements.</p>
<p><a href="https://www.addthis.com/" target="_blank"><strong>AddThis</strong></a> &#8211; best +1, Like, Share, etc. buttons provider. Not only it provide statistics, but it knows which social networks each of your visitors uses and can offer him to &#8220;like&#8221; your page with user&#8217;s favorite service. Offers lots of other features.</p>
<p><a href="http://feedburner.google.com/" target="_blank"><strong>Feedburner</strong></a> &#8211; helps your visitors to subscribe to your RSS feed. Looks like it&#8217;s not developed anymore and may be discontinued any time, but it&#8217;s best free service out there I was able to find.</p>
<p><a href="https://www.google.com/analytics" target="_blank"><strong>Google Analytics</strong></a> &#8211; let you know more about your visitors. Real-time analytics is nice.</p>
<p><a href="https://metrika.yandex.com/" target="_blank"><strong>Yandex.Metrika</strong></a> &#8211; I&#8217;m using russian version, and I like it more than Google Analytics. It&#8217;s free. This is my primary audience monitoring tool.</p>
<p><a href="http://www.google.com/adwords/" target="_blank"><strong>Google AdWords</strong></a> &#8211; advertise yourself on Google.</p>
<p><a href="https://direct.yandex.ru/" target="_blank"><strong>Yandex.Direct</strong></a> &#8211; Yandex have good advertising platform as well.</p>
<p><a href="https://www.pingdom.com/" target="_blank"><strong>Pingdom</strong></a> &#8211; popular network availability monitoring tool and more. Have free plan.</p>
<p><a href="http://tools.pingdom.com/fpt/" target="_blank"><strong>Pingdom Pagetest</strong></a> &#8211; analyze a webpage by url.<br />
<a href="http://www.webpagetest.org/" target="_blank"><strong>WebPagetest</strong></a> &#8211; I like this one the most.<br />
<a href="http://gtmetrix.com/" target="_blank"><strong>GTmetrix</strong></a> &#8211; but I always use all three of them. Get tips on how to improve your web page. Compare your page to popular websites.</p>
<p><a href="https://asafaweb.com/" target="_blank"><strong>ASafaWeb</strong></a> &#8211; scan your website, get tips on how to improve it and make it more secure.</p>
<p><a href="http://www.woorank.com/" target="_blank"><strong>Woorank</strong></a> &#8211; can give you some tips on improving your website.</p>
<p><a href="http://useragentstring.com/" target="_blank"><strong>User Agent String.Com</strong></a> &#8211; elaborates/explaines user agent string.</p>
<p><a href="https://webmaster.yandex.ru/spellcheck.xml" target="_blank"><strong>Yandex.Spellcheck</strong></a> &#8211; spell check a webpage.</p>
<p><a href="http://json2csharp.com/" target="_blank"><strong>json2csharp</strong></a> &#8211; paste in json text, get C# classes generated.</p>
<p><a href="http://aspnetresources.com/tools/machineKey" target="_blank"><strong>&lt;machineKey&gt; Generator</strong></a> &#8211; can generate you a machine key fro your web.config.</p>
<p><a href="http://www.similarweb.com/" target="_blank"><strong>SimilarWeb</strong></a> &#8211; you will be surprised how much this service knows about your site. Or about a site of your competitor 😉</p>
<p><a href="http://disqus.com/" target="_blank"><strong>Disqus</strong></a> &#8211; best commenting solution out there. You can see it in action at the bottom of this page.</p>
<h2>LIBRARIES</h2>
<p><a href="http://highlightjs.org/" target="_blank"><strong>highlight.js</strong></a> &#8211; excellent source code highlighting engine, I&#8217;m using it on this site.<br />
<a href="http://www.wardenier.com/sub/syntax-highlighting/" target="_blank"><strong>TinyMCE hljs</strong></a> &#8211; highlight.js implementation for TinyMCE. Using it on this site.</p>
<p><a href="http://requestreduce.org/" target="_blank"><strong>RequestReduce</strong></a> &#8211; put .dll in /bin/ folder of your asp.net website, add a line to web.config; your .css and .js files are automatically minified and bundled.</p>
<p><a href="http://www.asp.net/entity-framework" target="_blank"><strong>Entity Framework</strong></a> &#8211; MS ORM for .NET.</p>
<p><a href="http://nlog-project.org/" target="_blank"><strong>NLog</strong></a> &#8211; powerful, easy, up-to-date logging framework for .NET.</p>
<p><a href="http://james.newtonking.com/json" target="_blank"><strong>Json.NET</strong></a> &#8211; JSON framework for .NET.</p>
<p><a href="http://dotnetopenauth.net/" target="_blank"><strong>DotNetOpenAuth</strong></a> &#8211; I had a few problems with it, but it still sounds like best OpenID/OAuth library for .net at the moment.</p>
<p><a href="http://signalr.net/" target="_blank"><strong>SignalR</strong></a> &#8211; allows you to not just call your server C# methods from JS, but to call client JS in real time from server C# code. A library for realtime communication between client and server.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fixing ERR_CONTENT_DECODING_FAILED in Apache+PHP</title>
		<link>https://stefantsov.com/fixing-err_content_decoding_failed-in-apachephp/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Wed, 15 Jul 2015 02:29:22 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php.ini]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1169</guid>

					<description><![CDATA[Sometimes 3rd party PHP code just refuses to launch. Actually, it happens quite often. If you have just copied it and it worked &#8211; it&#8217;s a good sign. This time it wasn&#8217;t the case. After going through all the initial steps, it looked like it should work, but instead of usual runtime errors this PHP [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Sometimes 3rd party PHP code just refuses to launch. Actually, it happens quite often. If you have just copied it and it worked &#8211; it&#8217;s a good sign. This time it wasn&#8217;t the case.</p>
<p>After going through all the initial steps, it looked like it should work, but instead of usual runtime errors this PHP application, running on Apache 2.4.9 &amp; PHP 5.5.12, started showing this:</p>
<p><a href="http://stefantsov.com/wp-content/uploads/2015/07/ERR_CONTENT_DECODING_FAILED.png" rel="attachment wp-att-1170" data-rel="lightbox-gallery-BbPZXooo" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-full wp-image-1170" src="http://stefantsov.com/wp-content/uploads/2015/07/ERR_CONTENT_DECODING_FAILED.png" alt="ERR_CONTENT_DECODING_FAILED" width="867" height="432" srcset="https://stefantsov.com/wp-content/uploads/2015/07/ERR_CONTENT_DECODING_FAILED.png 867w, https://stefantsov.com/wp-content/uploads/2015/07/ERR_CONTENT_DECODING_FAILED-401x200.png 401w, https://stefantsov.com/wp-content/uploads/2015/07/ERR_CONTENT_DECODING_FAILED-320x159.png 320w, https://stefantsov.com/wp-content/uploads/2015/07/ERR_CONTENT_DECODING_FAILED-720x359.png 720w" sizes="(max-width: 867px) 100vw, 867px" /></a></p>
<p>ERR_CONTENT_DECODING_FAILED<br />
Error 330 (net::ERR_CONTENT_DECODING_FAILED): Unknown error.</p>
<p>Google Chrome&#8217;s Developer tools &#8211;&gt; Network looked empty for quite some time, but after a really long wait here is what I&#8217;ve got:</p>
<p><a href="http://stefantsov.com/wp-content/uploads/2015/07/google-developer-tools-apache-php-330-timeout-compress-gzip.png" rel="attachment wp-att-1171" data-rel="lightbox-gallery-BbPZXooo" data-rl_title="" data-rl_caption="" title=""><img class="alignnone size-full wp-image-1171" src="http://stefantsov.com/wp-content/uploads/2015/07/google-developer-tools-apache-php-330-timeout-compress-gzip.png" alt="google developer tools apache php 330 timeout compress gzip" width="826" height="493" srcset="https://stefantsov.com/wp-content/uploads/2015/07/google-developer-tools-apache-php-330-timeout-compress-gzip.png 826w, https://stefantsov.com/wp-content/uploads/2015/07/google-developer-tools-apache-php-330-timeout-compress-gzip-335x200.png 335w, https://stefantsov.com/wp-content/uploads/2015/07/google-developer-tools-apache-php-330-timeout-compress-gzip-320x191.png 320w, https://stefantsov.com/wp-content/uploads/2015/07/google-developer-tools-apache-php-330-timeout-compress-gzip-720x430.png 720w" sizes="(max-width: 826px) 100vw, 826px" /></a></p>
<p>Quick googling explains that this error is shown when HTTP response headers claim that the content is gzip encoded, but it isn&#8217;t. Other sources say that this may happen when plain-text content is added before/after encoded content. So proposed solution is to disable content compression.</p>
<p>There are different examples, it mostly involve writing something like</p><pre class="crayon-plain-tag">SetEnv force-no-vary
SetEnv downgrade-1.0</pre><p>or</p><pre class="crayon-plain-tag">SetEnv no-gzip 1</pre><p>to your .htaccess file. I was still getting same error, it made no difference for me.</p>
<h2>What helped</h2>
<p>Adding <code>zlib.output_compression = On</code> to <code>php.ini</code> helped me. Issue was solved.</p>
<h2>Likely source of issue</h2>
<p>I am not certain where and how compression was forced to be enabled (this is a big black box legacy PHP sources), but I have noticed it only throws this ERR_CONTENT_DECODING_FAILED exception when there are debug errors on the page.</p>
<p>Literally, setting <code>display_errors = Off</code> in <code>php.ini</code> fixes the issue as well. In my case it was some E_STRICT messages, so setting <code>error_reporting = E_ALL &amp; ~E_STRICT</code> there to disable displaying E_STRICT errors works too.</p>
<p>Now when this behavior doesn&#8217;t look like some random magic, I feel like I&#8217;m in control again, therefore I may sleep well. It works.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welcome The Great Russian Firewall</title>
		<link>https://stefantsov.com/welcome-the-great-russian-firewall/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Sat, 24 May 2014 20:27:19 +0000</pubDate>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[wtf]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1159</guid>

					<description><![CDATA[I have just found that my site stefantsov.com can not be opened from Russia. Since I&#8217;m not doing anything bad, this was a surprise for me. After digging a bit, thanks to +Fedor, I was able to find the reason behind the blocking.For stefantsov.com I&#8217;m using Cloudflare CDN to deliver resources faster all around the [&#8230;]]]></description>
										<content:encoded><![CDATA[<section class="uBlogsy_post_body">I have just found that my site stefantsov.com can not be opened from Russia. Since I&#8217;m not doing anything bad, this was a surprise for me. After digging a bit, thanks to <a href="http://vk.com/qreeek" target="_blank">+Fedor</a>, I was able to find the reason behind the blocking.For stefantsov.com I&#8217;m using Cloudflare CDN to deliver resources faster all around the world, reduce server bandwidth, get some free optimizations, etc. Cloudflare effectively hides my real IP, delivering all content itself. Currently site&#8217;s IP resolves to <a href="http://who.is/whois-ip/ip-address/141.101.116.129" target="_blank">141.101.116.129</a>: CLOUDFLARE-EU. In russian blacklist there is <a href="http://reestr.rublacklist.net/rec/7090/" target="_blank">some hentai site</a>, that is using Cloudflare as well, resolves to same IP address. It got blocked few days ago, which effectively blocks my site as well.gl hf gg wp no re, да здравствует великий российский файрвол, guys.<br />
[Random In Soviet Russia joke]</p>
<p><img src="http://stefantsov.com/wp-content/uploads/2014/05/stefantsov-blocked-firewall.jpg" alt="Stefantsov Blocked Firewall" width="540" height="960" /></p>
</section>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Google Night Walk in Marseille, France</title>
		<link>https://stefantsov.com/google-night-walk-in-marseille-france/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Sat, 05 Apr 2014 20:22:41 +0000</pubDate>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[google]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1154</guid>

					<description><![CDATA[This is a great piece of art, a nightwalk through the savannah of the night Marseille. This is done using Google Street View engine, but greatly enriched by music, sounds and annotations. You will usually encounter images like this: One of many sights of the night Marseille You may love it, you may hate it, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This is a great piece of art, a nightwalk through the savannah of the night Marseille. This is done using Google Street View engine, but greatly enriched by music, sounds and annotations.</p>
<p>You will usually encounter images like this:</p>
<div class="img-with-text"><a href="http://g.co/nightwalk" target="_blank"><img title="One of many sights of the night Marseille" src="http://stefantsov.com/wp-content/uploads/2014/04/google-nightwalk-marsielle-france-art.jpg" alt="Google Nightwalk Marseille France Art" width="640" height="474" /></a>One of many sights of the night Marseille</div>
<p>You may love it, you may hate it, but it will not leave you indifferent. Like promised in the very beginning, it will show you the soul of the city. Take a <a href="http://g.co/nightwalk" target="_blank">night walk with Google in Marseille, France</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Umbraco 7 MVC performance</title>
		<link>https://stefantsov.com/umbraco-7-mvc-performance/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Thu, 13 Mar 2014 20:20:30 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[umbraco]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1144</guid>

					<description><![CDATA[Performance always interests me. Now, when I host my sites in Cloud, it interests me even more. Better performance = less money spent. My current setup: Windows Server 2012 Standard, IIS 8.0, SQL Server 2012 Express, 2 GHz core, 1.5 GB RAM, Umbraco 7.0.3. I have tried first two google pages of &#8220;website online stress [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Performance always interests me. Now, when I host my sites in Cloud, it interests me even more. Better performance = less money spent.</p>
<p>My current setup: Windows Server 2012 Standard, IIS 8.0, SQL Server 2012 Express, 2 GHz core, 1.5 GB RAM, Umbraco 7.0.3. I have tried first two google pages of &#8220;website online stress testing tools&#8221; and it&#8217;s variations, the best and the only leader there is <a href="https://www.blitz.io/" target="_blank">https://www.blitz.io/</a>, nothing changed here since <a title="Boosting Umbraco with Cache" href="http://s.stefantsov.com/stefantsov.com-2015/boosting-umbraco-with-cache.html">my previous article</a>. Really great tool.</p>
<p>So, my results (really approximate):</p>
<ul>
<li>~50 requests / sec takes a 2GHz core</li>
<li>~100 requests / sec takes 10 Mbps</li>
<li>~200 MB RAM per each Umbraco instance (less than 1000 nodes)</li>
</ul>
<p>More specifics:<br />
I&#8217;m testing it on a simple Umbraco site, with less than 1000 nodes. It only have uBlogsy package installed, and my custom .dll with few extensions. Page I&#8217;m testing is 2nd level deep in Layout, it have about 10 Partials, but every one of them is CachedPartial with 60 seconds cache time (more than enough for the test). Uncached part of page contains moderate amount of logic. In real world you can&#8217;t expect all the code to be 100% optimized and always be perfect. Code happens. But if I remove that code, I get up to 160 hits / second:</p>
<div class="img-with-text"><img title="Content-only page with no logic at all, this is unlikely to happen in real life" src="http://stefantsov.com/wp-content/uploads/2014/03/content-only-nologic-page_640x5701.png" alt="Content-only page with no logic at all" width="640" height="570" />Content-only page with no logic at all, this is unlikely to happen in real life</div>
<p>&nbsp;</p>
<p>Here is how same page with absolutely no logic looks when I set my cloud PC to have 2x 2GHz cores (twice as much CPU power):</p>
<div class="img-with-text"><img title="Same content page with no logic as above, but this time with 2x cores of 2GHz" src="http://stefantsov.com/wp-content/uploads/2014/03/content-only-nologic-page-2-cores_636x5121.png" alt="Content page with no logic, 2 cores" width="636" height="512" />Same content page with no logic as above, but this time with 2x cores of 2GHz</div>
<p>&nbsp;</p>
<p>Back to real life. Page with moderate amount of logic. How will it act on 10 cores?</p>
<div class="img-with-text"><img title="Windows Server 2012 Task Manager during stress test, 10x 2GHz cores" src="http://stefantsov.com/wp-content/uploads/2014/03/server-task-manager-10-cores_640x5801.png" alt="Server Task Manager 10 Cores" width="640" height="580" />Windows Server 2012 Task Manager during stress test, 10x 2GHz cores</div>
<p>&nbsp;</p>
<div class="img-with-text"><img title="Stress test image for page with logic, server is 10x 2GHz cores" src="http://stefantsov.com/wp-content/uploads/2014/03/10-core-moderate-logic-page_639x5121.png" alt="10 Core Moderate Logic Page" width="639" height="512" />Stress test image for page with logic, server is 10x 2GHz cores</div>
<p>You can see, Umbraco scales pretty much linear.</p>
<p>Whether this numbers big or not is up to you to decide. Most sites won&#8217;t ever experience this many visitors anyway: 50 hits per second translates into up to ~4 000 000 views per day.<br />
And it scales linear with CPU: want 40 000 000 views per day? Throw 9 more cores and you are fine. Want 4 000 000 000 views per day (do such numbers even exist?) and your server can&#8217;t scale that high? Scale horizontally: add few more servers and do a load balancing. I&#8217;ve never seen this myself, but Umbraco claims it supports load balancing and it works well. Exciting video about Umbraco serving Red Bull Stratos project, how they did it:</p>
<p><iframe src="http://stream.umbraco.org/v.ihtml?source=share&amp;photo%5fid=8315762" width="625" height="352" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"></iframe></p>
<p>&nbsp;</p>
<p>One more trick to serve many static pages at once: OutputCache. With Umbraco MVC is is really easy to enable and it gives more than 10 times boost. Here is image for 1x 2GHz core and OutputCache enabled:</p>
<div class="img-with-text"><img title="Umbraco 7.0.3 MVC with [OutputCache] attribute specified on hijacked route controller action. Server side." src="http://stefantsov.com/wp-content/uploads/2014/03/umbraco-output-cache-performant-server_640x5801.png" alt="Umbraco Output Cache Performant Server" width="640" height="580" />Umbraco 7.0.3 MVC with [OutputCache] attribute specified on hijacked route controller action. Server side.</div>
<p>&nbsp;</p>
<div class="img-with-text"><img title="[OutputCache] stress test results. 1x 2GHz CPU core." src="http://stefantsov.com/wp-content/uploads/2014/03/umbraco-output-cache-performant-stress-test_638x5121.png" alt="Umbraco Output Cache Performant Stress Test" width="638" height="512" />[OutputCache] stress test results. 1x 2GHz CPU core.</div>
<p>&nbsp;</p>
<p>Now this is what I call good performance! Important thing to remember here is network bandwidth. This example alone was generating more than 70 Mbps of outgoing traffic. And stress test is not requesting any resources like CSS, JS or images. If you are about to have this much real users, you&#8217;d be using much more bandwidth!</p>
<p class="no-margin">Code:</p>
<p></p><pre class="crayon-plain-tag">&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; UBlogsyDeckspageController : Umbraco.Web.Mvc.RenderMvcController
{
    [OutputCache(Duration = &lt;span class=&quot;number&quot;&gt;60&lt;/span&gt;)]
    &lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; ActionResult Index(RenderModel model)
    {
        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;base&lt;/span&gt;.Index(model);
    }
}</pre><p>This is <a href="https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/custom-controllers.md" target="_blank">Umbraco route hijacking</a>. In short words, you create a controller class with name that starts with your Document Type alias and ends with &#8220;Controller&#8221;. It&#8217;s Index action is called to display page of this document type. Do whatever you like with it. In our case, apply OutputCache attribute.</p>
<p>Also, like mentioned in comments to <a href="http://www.attackmonkey.co.uk/blog/2013/10/using-route-hijacking-to-enable-page-caching-in-umbraco" target="_blank">this article</a>, one could take a look at <a href="https://github.com/moonpyk/mvcdonutcaching" target="_blank">Donut Caching</a>, here is a <a href="http://www.devtrends.co.uk/blog/donut-output-caching-in-asp.net-mvc-3" target="_blank">nice article on MVC Donut Caching</a>. It promises to solve caching problems for pages that have changing parts (like Logged In user partial). Would love to hear about successful Donut Cahing use cases on Umbraco.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>jStepper: convenient numeric input text plugin</title>
		<link>https://stefantsov.com/jstepper-convenient-numeric-input-text-plugin/</link>
		
		<dc:creator><![CDATA[Dima Stefantsov]]></dc:creator>
		<pubDate>Sat, 01 Mar 2014 20:16:06 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<guid isPermaLink="false">http://stefantsov.com/?p=1138</guid>

					<description><![CDATA[jStepper is a nice and really useful jQuery plugin that, once applied to a text input, only allows digits or numbers to be entered in it. Setting it up as easy as [crayon-5ea04ff106f39234953970/] Look at jStepper in action at Hearthstone Calculator tool I&#8217;ve made recently. Here is the code that I&#8217;m using for hscalc: [crayon-5ea04ff106f44927056151/] [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://plugins.jquery.com/jstepper/" target="_blank">jStepper</a> is a nice and really useful jQuery plugin that, once applied to a text input, only allows digits or numbers to be entered in it.</p>
<p>Setting it up as easy as</p><pre class="crayon-plain-tag">$(&lt;span class=&quot;string&quot;&gt;&quot;.txtTesting&quot;&lt;/span&gt;).jStepper({minValue:&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;, maxValue:&lt;span class=&quot;number&quot;&gt;23&lt;/span&gt;, minLength:&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;});</pre><p><strong>Look at jStepper in action</strong> at <a href="http://s.stefantsov.com/hscalc.com/" target="_blank">Hearthstone Calculator</a> tool I&#8217;ve made recently. Here is the code that I&#8217;m using for hscalc:</p><pre class="crayon-plain-tag">$text.jStepper({
    minValue: minValue,
    maxValue: maxValue,
    allowDecimals: &lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;,
    decimalSeparator: &lt;span class=&quot;string&quot;&gt;&quot;.&quot;&lt;/span&gt;,
    onStep: &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;params&quot;&gt;(objTextField, bDirection, bLimitReached)&lt;/span&gt; {&lt;/span&gt;
        $slider.slider(&lt;span class=&quot;string&quot;&gt;&quot;value&quot;&lt;/span&gt;, objTextField.val());
        updateAfterValuesChanged();
    }
});</pre><p><a href="http://jstepper.emkay.dk/" target="_blank">jStepper homepage</a> is handy, you can see all the options and apply them right away.</p>
<p>Not much else to be said. This tool just works, as intended. You would also like to know that author behind it, <a href="https://plus.google.com/u/0/108624457536656302111/about" target="_blank">+Martin Kruse</a>, is nice and helpful guy. Collaborated well on a little bug I had for my corner case, accepted my pull request.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
