<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		
		<title>Dmitry Dulepov</title>
		<link>http://dmitry-dulepov.com/</link>
		<description>A digitized look to the Universe</description>
		<language>en</language>
		<image>
			<title>Dmitry Dulepov</title>
			<url>http://dmitry-dulepov.com/typo3conf/ext/tt_news/ext_icon.gif</url>
			<link>http://dmitry-dulepov.com/</link>
			<width>18</width>
			<height>16</height>
			<description>A digitized look to the Universe</description>
		</image>
		<generator>TYPO3 - get.content.right</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		
		
		
		<lastBuildDate>Wed, 01 Jul 2009 16:34:00 +0300</lastBuildDate>
		
		
		<item>
			<title>Skype CPU usage</title>
			<link>http://dmitry-dulepov.com/article/skype-cpu-usage.html</link>
			<description>A small interesting fact: one animated image in the Skype chat window (the one with tongue out) raises Skype CPU usage from 5.5 to 11% (double!).
Nothing to do about it, just an interesting fact :)</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/skype-cpu-usage.html</guid>
			<content:encoded><![CDATA[<p>A small interesting fact: one animated image in the Skype chat window (the one with tongue out) raises Skype CPU usage from 5.5 to 11% (double!).</p>
<p>Nothing to do about it, just an interesting fact :)</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Wed, 01 Jul 2009 16:34:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Shortcut icon in a TYPO3 multidomain installation</title>
			<link>http://dmitry-dulepov.com/article/shortcut-icon-in-a-typo3-multidomain-installation.html</link>
			<description>Creating different shortcut icons for TYPO3 web sites sharing the same physical file space</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/shortcut-icon-in-a-typo3-multidomain-installation.html</guid>
			<content:encoded><![CDATA[<p>Creating a shortcut icon in the TYPO3 multidomain installation can be a tricky option. Modern browsers (like FireFox, for example), support a link tag that allows to place shortcut icons to pages. There can be transparent gif or png files. The syntax is simple: </p>
<p class="csc-frame-frame1">&lt;link rel=&quot;icon&quot; type=&quot;image/gif&quot; href=&quot;/fileadmin/icons/www.gif&quot; /&gt;</p>
<p>In TYPO3 you can add it through the normal <span class="inline-code">page.headerData</span> or <span class="inline-code">page.shortcutIcon</span> TypoScript.</p>
<p>Luck ends here. The most popular browser, Microsoft Internet Explorer does not recognize this tag, requires the file to be named <span class="inline-code">favicon.ico</span>, be placed in the root of the web site and supports only Windows proprietary icon file format (<span class="inline-code">.ico</span>). So you can hardly have different icons for the Internet Explorer without tricks.</p>
<h2>Creating icons</h2>
<p>Creating Windows icons is easy if you have ImageMagick installed. Just execute:</p>
<p class="csc-frame-frame1">convert www.gif www.ico</p>
<p>You can use any other tool but ImageMagick is probably the simplest, it converts without quality loss and preserves transparency.</p>
<h2>Tricking Internet Explorer to show different icons</h2>
<p>Next we have to trick Internet Explorer to receive different files for different sites that are physically located in the same file system space. As usual for such cases, <span class="inline-code">mod_rewrite</span> is our great friend. Assuming we have two icons for two domains, we use these rules in the virtual host configuration:</p>
<p class="csc-frame-frame1">&lt;LocationMatch &quot;^/favicon.ico$&quot;&gt;<br />&nbsp;&nbsp; &nbsp;RewriteEngine On<br />&nbsp;&nbsp; &nbsp;RewriteCond %{HTTP_HOST} ^www<br />&nbsp;&nbsp; &nbsp;RewriteRule .* /fileadmin/icons/www.ico [L]<br />&nbsp;&nbsp; &nbsp;RewriteCond %{HTTP_HOST} ^subdomain<br />&nbsp;&nbsp; &nbsp;RewriteRule .* /fileadmin/icons/subdomain.ico [L]<br />&lt;/LocationMatch&gt;</p>
<p>Note that we do not use 301 or 302 redirects. They do not work well with Internet Explorer. We have to do internal redirects.</p>
<p>This makes all requests to <span class="inline-code">favicon.ico</span> forwarded to proper real files.</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Tue, 30 Jun 2009 23:04:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Stolen content</title>
			<link>http://dmitry-dulepov.com/article/stolen-content.html</link>
			<description>Update: the stolen content is now removed from the offending site.
I was notified that a seo24.at web site republished my article about TYPO3 performance optimization as their own thus violating my copyright. Here is their copy and here is the original. Pity to see that there are still people like this one. The could have asked and got permission... (Continued on the web site)</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/stolen-content.html</guid>
			<content:encoded><![CDATA[<p><i>Update: the stolen content is now removed from the offending site.</i></p>
<p>I was notified that a seo24.at web site republished my article about TYPO3 performance optimization as their own thus violating my copyright. <span style="text-decoration: line-through;"><a title="Stolen article" rel="nofollow" target="_blank" href="http://www.seo24.at/8-tipps-fuer-ihren-typo3-internetauftritt/">Here is</a></span> their copy and <a href="http://dmitry-dulepov.com/article/eight-performance-tips-for-your-typo3-web-site.html" >here is</a> the original. Pity to see that there are still people like this one. The could have asked and got permission immediately. Now I have to ban them from republishing anything from this site... I like to share and promote the knowledge but I hate content stealing in any form.</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Wed, 24 Jun 2009 22:40:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>When TYPO3 gurus cannot help you</title>
			<link>http://dmitry-dulepov.com/article/when-typo3-gurus-cannot-help-you.html</link>
			<description>The worst problem when the project is subcontracted, is when the middle party thinks it knows the solution better than the expert they hire for the actual work.</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/when-typo3-gurus-cannot-help-you.html</guid>
			<content:encoded><![CDATA[<p>I am working with TYPO3 since year 2003. I worked for several agencies and individuals during this time. I am one of the best TYPO3 experts. This is what people say about me, not what I say about myself (I never really wanted to become a TYPO3 expert, it just happened).</p>
<p>I learned a lot of things while working for many people using TYPO3. Among others, there is one most important learned thing: most people <i>think</i> they know the right solution and they only ask TYPO3 experts (like me) to implement that solution. Typically they say: &quot;We want you to make this thing to work like that&quot;. They think that the problem will be solved and their own customer will be fully satisfied. They are wrong, of course.</p>
<p>Time goes, I implement what I was asked to implement precizely to the last dot. Their customer says that the solution is a complete crap. The company who ordered the solution to me says that I need to implement something else. Again, they decide on the solution themselves and refuse to let me know the original requirements of the customer. Ok, they are clients for me, so I do what they ask. Their customer is dissatisfied again. Now the company who orders my services starts to think who did wrong. Of course, they will blame me in such case. Usually I show them their own requirements and ask to point me where I screwed up. Of course, they fail to show it because I implemented everything exactly as I was asked.&nbsp;Finally they tell me what their customer wants. I ask a couple of questions and we all find that the solution could me much cheaper, faster and easier than they planned and asked me to make. But now they have to pay me for the already made work plus the new work! And most likely the customer will not come back to them again because they screwed up at least twice.</p>
<p>What's the idea behind all this?</p><div class="indent"><p><b>If you hire an expert, let him choose how to solve your problem</b>.</p></div><p> You may think you know how to solve it but it is not necessarily the best way. Pride is not the best thing in business and it is definitely not professional to hire a more competent person for mechanical work. Experts are there not to code you yet another workspaces tweak, they are to solve your initial problem using the most efficient, simple and bullet–proof way.</p>
<p>Don't use a brick of gold as a hummer! Tell me <b>what</b> you want to achieve, not <b>how</b> you <i>think</i> it can be achieved. I may give you a better solution because I am an expert. It is my job to give you a better solution when it comes to TYPO3. Have your client and charge him! But let me find a way to leave your client satisfied and your business growing! Be smart, not proud.</p>
<p>Don't say me how to do it, say me what your customer wants and I will solve it for you and him!</p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Sun, 14 Jun 2009 21:31:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Does gzip compression speed up or slow down your web site?</title>
			<link>http://dmitry-dulepov.com/article/does-gzip-compression-speed-up-or-slow-down-your-web-site.html</link>
			<description>Gzip compression can be useful or harmful. Using gzip may improve page loading time at the cost of increasing server load.</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/does-gzip-compression-speed-up-or-slow-down-your-web-site.html</guid>
			<content:encoded><![CDATA[<p>Gzip is a good way to make your web site faster. It may decrease the size of downlodable documents by half. This seriously speeds up the loading of the site because network delays affects the performance (and user satisfaction) most.</p>
<p>But there is a drawback of the gzip compression that many people do not realize.</p>
<p>In the early Apache 1.x days mod_gzip had a very nice feature: file cache for the compressed content. mod_deflate in&nbsp;Apache 2 does not have any caching for the compressed content. It means that downloading 500KB of ExtJS with compression means compression this file each time. If there is no client cache or mod_proxy, this becomes a major problem. It seriously increases the load on the server. Also it slows down the response time because the file has to be compressed each time. It is a serious issue to consider for large web sites. Even client caching is not a solution.</p>
<p>The solution that I use for such cases is a pre–compression of such files. Then I use a mod_rewrite checks and rules to rewrite requests to these files to their compressed versions. It speeds up the loading (by 1-2 seconds in case of ExtJS).</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Fri, 12 Jun 2009 10:13:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Developing from UI</title>
			<link>http://dmitry-dulepov.com/article/developing-from-ui.html</link>
			<description>Developing from UI to the internal implementation helps to create better user interfaces and increase customer's satisfaction</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/developing-from-ui.html</guid>
			<content:encoded><![CDATA[<p>How does the usual development of the product starts in the Open Source community? Typically there are some wishes (requirements in the best case). Next coding starts. When the code is more or less ready, development of the UI starts. The UI reflects internal technical implementation. In particular, this is how TYPO3 was built and how many TYPO3 extensions are still built today.</p>
<p>Recently I decided to change my development practices completely. Earlier I followed the traditional way: PHP implementation first, UI last. Now I do the opposite: UI first, PHP next.</p>
<p>The interesting consequences of this methods are:</p><ul><li>UI becomes more friendly to the user. This happens because the UI is not affected or limited by the underlying PHP implementation. User's satisfaction is a very important factor these days. Anyone can build the application these days. Those who can do it more friendly — win.</li><li>PHP implementation now serves the UI, not the opposite. It makes PHP code more structured because it becomes task–oriented. Also it speeds up the implementation time because I can develop task by task.</li></ul><p>When the UI uses ExtJS, such development tactics become even more efficient. For example, for the rest application I completely created the UI part using static JSON files for the sample data. Now I implement PHP part for each UI part. I implement only what is necessary for the UI, not what <i>could</i> be necessary. Simple, fast and effective.</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Thu, 11 Jun 2009 09:54:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Making custom ExtJS components using panels</title>
			<link>http://dmitry-dulepov.com/article/making-custom-extjs-components-using-panels.html</link>
			<description>One of the principles of the object–oriented programming says that the functionality should be encapsulated into a component and handled by the component. It helps to keep the functionality in one place and modify it easily or rewrite/replace it completely without affecting other parts of an application.
Since ExtJS is an object–oriented... (Continued on the web site)</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/making-custom-extjs-components-using-panels.html</guid>
			<content:encoded><![CDATA[<p>One of the principles of the object–oriented programming says that the functionality should be encapsulated into a component and handled by the component. It helps to keep the functionality in one place and modify it easily or rewrite/replace it completely without affecting other parts of an application.</p>
<p>Since ExtJS is an object–oriented JavaScript framework, the same principle should be used there.</p>
<p> Recently I had to create a numerous ExtJS components for one project. There are numerous ExtJS examples on the web, which show complex components but often they do not&nbsp;follow the encapsulation principle. I decided to make it the &quot;right way&quot; and I am going to show how.</p>
<h2>ExtJS panels in action</h2>
<p>ExtJS panels is the most generic way to display content in ExtJS. Panel can either show an HTML content or serve as a container for other items (such as grids, trees, charts, etc). Imagine you need to put a data view into the panel and next put the panel to a tab panel. This is how many example will suggest it to be:</p>
<p class="csc-frame-frame2">var tabPanel = ...;<br />var panel = new Ext.Panel({<br />&nbsp; &nbsp; ...<br />&nbsp;&nbsp;&nbsp; items: new Ext.DataView({<br />&nbsp; &nbsp; &nbsp; &nbsp; ...<br /> &nbsp; &nbsp; &nbsp; &nbsp; store: new Ext.data.JsonStore({<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...<br />&nbsp; &nbsp; &nbsp; &nbsp; }),<br /> &nbsp; &nbsp; &nbsp; &nbsp; tpl: new Ext.XTemplate(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '&lt;ul&gt;',<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '&lt;tpl for=&quot;.&quot;&gt;',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; '&lt;li&gt;{mydata}&lt;/li&gt;',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; '&lt;/tpl&gt;',<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '&lt;/ul&gt;',<br /> &nbsp; &nbsp; &nbsp; &nbsp; ),<br />&nbsp; &nbsp; &nbsp; &nbsp; ...<br />&nbsp; &nbsp; }),<br />&nbsp; &nbsp; ...<br />});<br />tabPanel.add(panel).show();</p>
<p>This works. However if you need to change the template or if the store has a lot of fields, the whole piece of code becomes huge and eventually unmaintaibable. It may spread over hundreds of lines.</p>
<p>How to make it better?</p>
<h2>ExtJS panels as a custom component</h2>
<p>The solution is to make a custom component from the ExtJS panel. For that we create a separate file (not a requirement but convenience) and place the following content there:</p>
<p class="csc-frame-frame2">Ext.onReady(function() {<br />&nbsp;&nbsp;&nbsp; Ext.namespace('example');<br /><br />&nbsp;&nbsp;&nbsp; example.MyComponent = Ext.extend(Ext.Panel, {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Put panel specific options here, for example:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoHeight: true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyBorder: false,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collapsible: true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cls: 'my-component',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collapsible: true<br />&nbsp;&nbsp;&nbsp; });<br />});</p>
<p>That isolates component–specific options inside the component. However it lacks the <span class="inline-code">DataView</span>. The reason for it is simple. When overriding panels, you can't set <span class="inline-code">items</span> property of the panel. ExtJS will override it in the <span class="inline-code">Panel</span> constructor with a <span class="inline-code">null</span> value. On order to create items you have to override the <span class="inline-code">initComponent</span> method like this:</p>
<p class="csc-frame-frame2">Ext.onReady(function() {<br />&nbsp;&nbsp;&nbsp; Ext.namespace('example');<br /><br />&nbsp;&nbsp;&nbsp; example.MyComponent = Ext.extend(Ext.Panel, {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Put panel specific options here, for example:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoHeight: true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyBorder: false,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collapsible: true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cls: 'my-component',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collapsible: true,<br /><br /><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Initializes the component.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initComponent: function() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.items = new Ext.DataView({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example.MyComponent.superclass.initComponent.call(this, arguments);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /></b>&nbsp;&nbsp;&nbsp; });<br />});</p>
<p>Notice that we must call parent class method in order to initialize the panel.</p>
<p>Now we encapsulated all component–specific options inside the component. Later if we decided to change <span class="inline-code">DataView</span> to <span class="inline-code">GridPanel</span>, we can do it easily inside a separate file without worrying about side effects on the rest of the application.</p>
<p><i>This is a first of my articles about ExtJS. I work with ExtJS much more than with TYPO3 these days and for some time will focus on ExtJS programming. If anyone has questions about ExtJS, you are welcome to <a href="http://dmitry-dulepov.com/contact.html" title="Opens internal link in current window" class="internal-link" >send</a> them to me and I will try to cover them on the blog.</i></p>]]></content:encoded>
			<category>ExtJS</category>
			
			
			<pubDate>Wed, 03 Jun 2009 10:05:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Macintosh vs Hackintosh</title>
			<link>http://dmitry-dulepov.com/article/macintosh-vs-hackintosh.html</link>
			<description>Why Hachintosh/PsyStar is not a Mac and will never be</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/macintosh-vs-hackintosh.html</guid>
			<content:encoded><![CDATA[<p>I heard an excitement about a Hackintosh project a couple of times last month. Hackintosh makes Mac OS X available for computers designed by vendors other than Apple.</p>
<p>I do not want to discuss legal or moral issues here. I think Apple has all rights to limit its software to its hardware. They are the owners, they have all rights to define license terms.</p>
<p>What remains mystery to me is why so many people are excited about using those other computers and notebooks to run Mac OS X?</p>
<p>Mac is not only Mac OS X, it is also hardware. Since I bought a Mac I never could find anything that looks better, works smoother and more pleasant. Everything in Mac is very well though, from size to the &quot;breathing&quot; tiny light and mil–colored shining Apple logo. I read at the Adobe site that Apple has created over 100 real prototypes before they released a MacBook. Can anybody compete with the company that puts so much effort to research if the usability and ergonomics? Can all these PsyStars  compete? Nope. Their products are ugly. Their products are surrogates. They will work for people who want a beautiful shiny Mac but cannot afford it. Those surrogates are not Macs! They do not make Hackintosh users Mac users.</p>
<p>This is why I cannot understand all this excitement about Hackintosh. Yes, it is fun as a software project but only like that. It is not worth anything else. It is not a Mac.</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Wed, 20 May 2009 19:25:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Slides from my talks at T3DD09</title>
			<link>http://dmitry-dulepov.com/article/slides-from-my-talks-at-t3dd09.html</link>
			<description>Below are slides from my talks at developer days. These are not a typical presentations with a lot of words on slides. In future I will also publish PDFs with texts explaning every slide.
Writing secure code
How to become a better programmer</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/slides-from-my-talks-at-t3dd09.html</guid>
			<content:encoded><![CDATA[<p>Below are slides from my talks at developer days. These are not a typical presentations with a lot of words on slides. In future I will also publish PDFs with texts explaning every slide.</p>
<p><a href="http://www.slideshare.net/dulepov/writing-secure-code?type=presentation" title="Writing secure code" target="_blank" >Writing secure code</a></p>
<p><a href="http://www.slideshare.net/dulepov/how-to-become-a-better-prgrammer?type=presentation" target="_blank" >How to become a better programmer</a></p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Sat, 16 May 2009 13:25:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Mute your next web site</title>
			<link>http://dmitry-dulepov.com/article/mute-your-next-web-site.html</link>
			<description>Why web site developers should mute the sound of thier sites by default</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/mute-your-next-web-site.html</guid>
			<content:encoded><![CDATA[<p>Did you ever happen to furiously mute the&nbsp;sound of your computer because of a web site making it?</p>
<p>It is near 9 a.m. in the morning. My wife worked late yesterday and she is still sleeping. I am reading my mails before I jump to work. The owner of the blogs that I read regularly contacted me privately and asked to subscribe to his newsletter. The blog is great and the value of the newsletter is great. So I subscribed.</p>
<p>The subscriptions happens through a 3<sup>rd</sup> party web site. It seems that this web site wants to be &quot;accessible&quot;. It is good to be accessible but they decided to read the text on the screen aloud (much louder than average) automatically. Thank you very much. My wife may be awoken now and I feel ashamed :(</p>
<p>Why do I write about it?</p>
<p>Very often technical people forget a very simple but the most important rule of a</p><div class="indent"><p><b>Normal people do not expect your web site to scream aloud.</b></p></div><p>It is a cool feeling when you solve a technical challenge. It is cool when you create a flashy animated flash site with a lot of music (&quot;flashy screaming flash&quot;<i></i>). Cool for you. But it is not cool for a visitor, who needs it now but has to wait for 5 or 10 minutes until the site loads. And it is not cool at all to force him to turn off his speaker in a hurry.</p><div class="indent"><p><b>Do not behave rude to the visitor!</b></p></div><p>The good alternative would be to propose a three versions of the site on the first page in the order of preference:</p><ul><li>Flash with sound</li><li>Flash with sound (muted)</li><li>HTML version</li></ul><p>Of course, not everyone can or want create several versions of the web site. At least do not be too rude and mute sound by default. There is no value in that electronic music that you play anyway. But many visitors will appreciate when you care about them (and their sleeping wives). You always can provide a control to enable sound, don't you? :)</p>
<p>Hope next time you will mute the sound of your web site by default.</p>]]></content:encoded>
			<category>HCI</category>
			
			
			<pubDate>Wed, 13 May 2009 09:16:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>How NOT to create a page browser</title>
			<link>http://dmitry-dulepov.com/article/how-not-to-create-a-page-browser.html</link>
			<description>A demo og the error in the iStockPhoto page browser</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/how-not-to-create-a-page-browser.html</guid>
			<content:encoded><![CDATA[<p>Page browser is a complex piece of code. It is often tricky to have it done. An example from the iStockPhoto below shows that clearly:</p>
<p class="align-center"><img src="http://dmitry-dulepov.com/fileadmin/article-images/errors/istockphoto-pagebrowser.png" height="229" width="520" alt="" /></p>
<p>Zero result but displaying 607 on 21 pages? Hmmmm. Something is wrong here.</p>
<p>If you want to avoid such errors in your TYPO3 extensions, pay attention to details and use my &quot;Universal page browser&quot; extension!</p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Tue, 12 May 2009 09:28:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Cleaning your Apple Mighty Mouse</title>
			<link>http://dmitry-dulepov.com/article/cleaning-your-apple-mighty-mouse.html</link>
			<description>How to fix an Apple Mighty Mouse and make sure that all buttons still work</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/cleaning-your-apple-mighty-mouse.html</guid>
			<content:encoded><![CDATA[<p>If you own an Apply Mighty Mouse (excellent mouse, by the way!), you can ran into the famous problem: mouse stops scrolling into one or more directions. I was able to fix it for some time by following Apple's advise to scroll the mouse on the paper (up side down). This helped for a while but today the mouse stopped worked completely.</p>
<p>If this happens to you, it is really easy to <a href="http://www.youtube.com/watch?v=Ap-Kt_9k3ME" title="Video instructions to clean the Apple Mighty Mouse" target="_blank" class="external-link-new-window" >disassemble and clean the mouse</a>. The only important missing detail in the linked video is about cables. If attach a green cable the wrong way, the mouse will still work but as a one button mouse. So if the right mouse button does not work for you, open the mouse again and turn the green cable 180°.</p>
<p>And my mouse did not require any superglue to hold the ring. The ring stays in place. Just to be sure that it does not fall in the least expected moment, I put a tiny bit of transparent scotch tape on it. This way I will not have to break superglue again if I ever need to clean it.</p>
<p>Happy cleaning!</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Mon, 11 May 2009 11:20:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>I make two talks at T3DD09: come!</title>
			<link>http://dmitry-dulepov.com/article/i-make-two-talks-at-t3dd09-come.html</link>
			<description>My talks at T3DD09 will be about security and becoming a better programmer. Come and listen!</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/i-make-two-talks-at-t3dd09-come.html</guid>
			<content:encoded><![CDATA[<p>&quot;TYPO3 developer days&quot; event, 2009 edition starts next week on Thursday. I will make two talks there:</p><ul><li>How to become a better programmer (Thursday, 15:15—16:15)</li><li>Writing secure code (Saturday, 16:30—17:30)</li></ul><p>The first talk is what I like most. It is tips from my own practice that I would like to share with other people. Following them will help you improve professionally. In the extreme case in will make you an exceptional programmer. I really like to give these tips away because I like when people around me are good in everything they do. So, come and listen how can you improve yourself, your career and your skills!</p>
<p>The second talk is a necessity. The number of security incidents in the TYPO3 is increasing and mostly due to trivial security issues. Therefore I'd like to show what they are and how to avoid them easily. This is very important for every extension programmer.</p>
<p>I have slides an narration ready. It will be also published as PDFs on this blog very soon after the talk.</p>
<p>Come and join me at T3DD09!</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Sun, 10 May 2009 21:45:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Google SEO recommendations</title>
			<link>http://dmitry-dulepov.com/article/google-seo-recommendations.html</link>
			<description>Google provides official paper about SEO techniques. Read more about it here.</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/google-seo-recommendations.html</guid>
			<content:encoded><![CDATA[<p>TYPO3 SEO becomes a hot topic. I covered several TYPO3 SEO topics on this blog. This time I want to share a link to Google's SEO paper that I accidentally found while checking a Google Webmaster central for the customer.</p>
<p>In this document Google shares tips about optimizing your pages. These are official recommendations. It means that are not only safe to use but also highly recommended for every web site. As a side note: I was happy to find that I use almost everything from this paper on this site.</p>
<p>The paper is very useful for anybody interested in SEO. Please, get it, read it and implement.</p>
<p><a href="http://www.google.com/webmasters/docs/search-engine-optimization-starter-guide.pdf" target="_blank" class="external-link-new-window" title="Google search engine optimization paper" onclick="javascript: pageTracker._trackPageview('/download/google-seo-pdf')">Download the Google SEO paper</a>.</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Fri, 08 May 2009 09:19:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>TYPO3 SEO: keywords from the TypoScript and a page </title>
			<link>http://dmitry-dulepov.com/article/typo3-seo-keywords-from-the-typoscript-and-a-page.html</link>
			<description>A nice TypoScript trick to get keywords from constants and page properties together in the meta tag</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/typo3-seo-keywords-from-the-typoscript-and-a-page.html</guid>
			<content:encoded><![CDATA[<p>I like TypoScript! It is a fantastic language. Almost everything is possible. For example, today I had to solve an interesting task. I have to show keywords on the page. Keywords shouls be taken from the page's &quot;Keywords&quot; field and appended by the content of a TypoScript constant. Any of these too could be empty and there should be no extra comma if one of parts is missing. If no keywords are set, there should be no keywords <span class="inline-code">meta</span> on the page. So there are four choices:</p><ul><li>no keywords at all (no <span class="inline-code">meta</span> tag)</li><li>keywords from the TypoScript only</li><li>keywords from the page only</li><li>keywords from both page and TypoScript</li></ul><p>All four cases must be handled properly.</p>
<p>Here is how I solved it:</p>
<p class="csc-frame-frame1">page.meta.keywords {<br />&nbsp;&nbsp;&nbsp; # Set 'current' value<br />&nbsp;&nbsp;&nbsp; setCurrent = {$meta.keywords}<br />&nbsp;&nbsp;&nbsp; # Set content to match current<br />&nbsp;&nbsp;&nbsp; current = 1<br />&nbsp;&nbsp;&nbsp; # Prepend page keywords<br />&nbsp;&nbsp;&nbsp; prepend = TEXT<br />&nbsp;&nbsp;&nbsp; prepend {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; data = page:keywords<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # if empty, return immediately<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; trim = 1<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; required = 1<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # wrap it<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; innerWrap {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # wrap only if {$meta.keywords} is not empty<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if.isTrue.current = 1<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # We must return a wrap pattern here<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; append = TEXT<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; append.value = |,<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}<br /><br /></p>
<p>This plan was like this:</p><ul><li>set one value</li><li>if that value is not empty and the second value is not empty, append a comma</li><li>if the second value is not empty, append it</li></ul><p>So far, so good. But there is no way to directly implement in TypoScript with a single property or two! Fortunately page.meta.keywords is a stdWrap. It means I have unlimited possibilities of testing for empty, appending, prepending or replacing values.</p>
<p>I decided to start from the most complex thing (#2 in the list above). How do I test that I need to put comma in between? Obviously I cannjot use properties such as <span class="inline-code">required</span> or <span class="inline-code">if</span> or <span class="inline-code">ifEmpty</span> because they test a single value. So I needed something that tests both values. I set to think and it came to me: if I assign the first value to the <span class="inline-code">current</span> property, I can test it later on while I generate the second value! This is what lines 3 and 5 of the TypoScript about do. The first line sets current value to the TypoScript constant value and the second sets content value to the current value.</p>
<p>Next I want to prepend the keywords from the page record. So I use <span class="inline-code">prepend</span> property, which is a cObject. I set its <span class="inline-code">data</span> property to keywords, trim it and check that it is not empty using the <span class="inline-code">required</span> property. If the value is empty, <span class="inline-code">prepend</span> will return empty value immediately and nothing will be prepended. Cool, right?</p>
<p>Next I must append a comma to the page keywords if and only if the TypoScript constant was not empty. For that I have to use <span class="inline-code">innerWrap</span>. Notice that I cannot use <span class="inline-code">stdWrap</span> property because it executes before the <span class="inline-code">required</span> and I need to wrap only after. Therefore I use <span class="inline-code">innerWrap</span>.</p>
<p><span class="inline-code">innerWrap</span> is a wrap and fortunately it is also a stdWrap. I use <span class="inline-code">if</span> property to check if <span class="inline-code">current</span> value is not empty. As you remember, this value is the value of the TypoScript constant we set earlier. If it is not empty, the <span class="inline-code">innerWrap</span> should be a wrap for the <span class="inline-code">prepend</span>.</p>
<p>Are you still with me?</p>
<p>To create such wrap I need to set the content of the <span class="inline-code">innerWrap</span> to a string. But I must do it after <span class="inline-code">if</span> is executed. So I can use <span class="inline-code">append</span>, <span class="inline-code">prepend</span> or some other content object there. It does not really matter. I ended up on <span class="inline-code">append</span>.</p>
<p>As a result all four choices above are covered. This is what I love TypoScript and TYPO3 for: you can do almost everything with pure TypoScript!</p>
<p>Can this TypoScript be optimized or written in some other way? Feel free to comment and improve it!</p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Thu, 07 May 2009 14:28:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Is Google Analytics reliable?</title>
			<link>http://dmitry-dulepov.com/article/is-google-analytics-reliable.html</link>
			<description>Google Analytics shows wrong data</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/is-google-analytics-reliable.html</guid>
			<content:encoded><![CDATA[<p>I have problems with Google Analytics. Looks like something is broken there.</p>
<p>I am checking a number of visitors on one site. I took yesterday (May 5, 2009) as a day to look at. <b>The graph shows a different number of visitors for the same day depending on the start day of the graph!</b> Have a look:</p>
<p class="align-center"><img src="http://dmitry-dulepov.com/fileadmin/article-images/google/ana-02.png" style="border: 1px solid rgb(64, 64, 64);" height="225" width="625" alt="" /></p>
<p class="align-center"><img src="http://dmitry-dulepov.com/fileadmin/article-images/google/ana-03.png" style="border: 1px solid rgb(64, 64, 64);" height="225" width="625" alt="" /></p>
<p class="align-center"><img src="http://dmitry-dulepov.com/fileadmin/article-images/google/ana-04.png" style="border: 1px solid rgb(64, 64, 64);" height="225" width="625" alt="" /></p>
<p>So I have 21325, 16914 and 5925 visitors&nbsp;for the same day. How is this possible? It seems to me that the number of visitors on May 5 can be only one number and it must not change if I change the starting date of the graph.</p>
<p>The same problem is with page views (another &quot;absolute&quot; metric) and visits.</p>
<p>Am I crazy or is this a error in Google Analytics?</p>]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Wed, 06 May 2009 10:37:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Magento book reviewed</title>
			<link>http://dmitry-dulepov.com/reviews/magento-beginners-guide-by-william-rice.html</link>
			<description>This is a revew of a book named "Magento: Beginner's Guide" by William Rice. If you are interested in building e–commerce solutions, consider buying this book! Read the review for details.</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/reviews/magento-beginners-guide-by-william-rice.html</guid>
			<content:encoded><![CDATA[]]></content:encoded>
			<category>Buzz</category>
			
			
			<pubDate>Mon, 04 May 2009 20:03:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>When do you need cHash in TYPO3</title>
			<link>http://dmitry-dulepov.com/article/when-do-you-need-chash-in-typo3.html</link>
			<description>Describes when to use and when not to use cHash in TYPO3</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/when-do-you-need-chash-in-typo3.html</guid>
			<content:encoded><![CDATA[<p>cHash is one of the most mysterious and misunderstood parameters in TYPO3. There are several articles about cHash on the web (including my own, see below) but it still remains a mystery.</p>
<p>cHash is important for proper caching in TYPO3. Therefore I decided to write when you need it and when not.</p>
<h2>When to use cHash</h2>
<p>You need cHash when:</p><ul><li> the content of the page depends on the parameter of the URL, and</li><li> you do not use conditions, and</li><li> you want the content to be cached</li></ul><p> This typically happens in extensions. The extension must produce links with cHash if its output depends on the URL and the extension is of <span class="inline-code">USER</span> type.</p>
<h2>When not to use cHash</h2>
<p>You do not need cHash if:</p><ul><li>you create a <span class="inline-code">USER_INT</span> (non–cached) extension</li><li>you generate different output using TypoScript conditions on the URL parameter</li><li>you limit pages or site content to various user groups</li></ul><p>In other words, care about cHash if you write PHP code. Forget cHash for the rest of TYPO3.</p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Tue, 28 Apr 2009 10:15:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>A new TYPO3 security web site</title>
			<link>http://dmitry-dulepov.com/article/a-new-typo3-security-web-site.html</link>
			<description>A new TYPO3 security web site is online. Marcus Krause is behind this site.</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/a-new-typo3-security-web-site.html</guid>
			<content:encoded><![CDATA[<p>There is a new <a href="http://secure.t3sec.info/" title="TYPO3 security web site and blog" target="_blank" class="external-link-new-window" >web site</a> dedicated to the TYPO3 security. It is created and managed by Marcus Krause, who is the most active TYPO3 security team member. Marcus is known for his strong position about security, his dedication to this work and attention to details.</p>
<p>I highly recommend this new site to anyone who is interested in TYPO3 security.</p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Mon, 27 Apr 2009 09:43:00 +0300</pubDate>
			
		</item>
		
		<item>
			<title>Still having fun? TS game final round has started!</title>
			<link>http://dmitry-dulepov.com/article/still-having-fun-ts-game-final-round-has-started.html</link>
			<description>So we are on the round 3! Many people did very well on both previous rounds. Everyone was able to see at least two problems, some counted 4, 5 or even more. Some of &quot;problems&quot; were not &quot;problems&quot; but &quot;possible enhancements&quot;.
I must tell that I decided to put a little catch in the game ;) The catch was a... (Continued on the web site)</description>
			<guid isPermaLink="true">http://dmitry-dulepov.com/article/still-having-fun-ts-game-final-round-has-started.html</guid>
			<content:encoded><![CDATA[<p>So we are on the round 3! Many people did very well on both previous rounds. Everyone was able to see at least two problems, some counted 4, 5 or even more. Some of &quot;problems&quot; were not &quot;problems&quot; but &quot;possible enhancements&quot;.</p>
<p>I must tell that I decided to put a little catch in the game ;) The catch was a &quot;print&quot; parameter. Many people immediately remembered that it is used in TemplaVoila and felt for this :) Now I have to tell that there is no TV involved! Original TS was said to be complete, so there is no TV. The output on the page is just a link to print version. Yes, not what you see daily but this is a game ;)</p>
<p>I must admit it is not possible to say who did best so far. You all show yourself as TYPO3 professionals. So, let's show this to the world!</p>
<p>Here is round 3 challenge: <b>make this TypoScript perfect</b>! Do whatever you can, do your best to make your TypoScript the best ever! If you just read this post, join us now and have fun with TYPO3!</p>
<p>I am sure you can!</p>
<p>P.S. <a href="http://lists.netfielders.de/pipermail/typo3-english/2009-April/060456.html" title="TypoScript error hunt, round 3" target="_blank" class="external-link-new-window" >Mailing list post</a> about the 3<sup>rd</sup> round.</p>]]></content:encoded>
			<category>TYPO3</category>
			
			
			<pubDate>Fri, 24 Apr 2009 21:29:00 +0300</pubDate>
			
		</item>
		
	</channel>
</rss>