<?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>Ruslan Ulanov's Codeshack</title>
	<atom:link href="http://ulanoff.com/blogs/codeshack/feed/" rel="self" type="application/rss+xml" />
	<link>http://ulanoff.com/blogs/codeshack</link>
	<description>The developer's notebook</description>
	<lastBuildDate>Tue, 29 Sep 2009 00:33:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Useful JavaScript Regular Expression Functions</title>
		<link>http://ulanoff.com/blogs/codeshack/2009/09/04/useful-javascript-regular-expression-functions/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2009/09/04/useful-javascript-regular-expression-functions/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 20:16:49 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=45</guid>
		<description><![CDATA[Here&#8217;s a few links for commonly used REGEXs..
10+ Useful JavaScript Regular Expression Functions to improve your web applications efficiency
[javascript]// check that an input string looks like a valid email address.
var isEmail_re = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
function isEmail (s) {
  return String(s).search (isEmail_re) != -1;
}[/javascript]
 
 
[javascript]// returns a string with everything but the digits removed. Could be used to [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a few links for commonly used REGEXs..</p>
<p><a title="Permanent Link to 10+ Useful JavaScript Regular Expression Functions to improve your web applications efficiency" rel="bookmark" href="http://ntt.cc/2008/05/10/over-10-useful-javascript-regular-expression-functions-to-improve-your-web-applications-efficiency.html">10+ Useful JavaScript Regular Expression Functions to improve your web applications efficiency</a></p>
<p>[javascript]// check that an input string looks like a valid email address.</p>
<p>var isEmail_re = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;<br />
function isEmail (s) {<br />
  return String(s).search (isEmail_re) != -1;<br />
}[/javascript]</p>
<p> <br />
 </p>
<p>[javascript]// returns a string with everything but the digits removed. Could be used to validate phone numbers, etc.</p>
<p>function getdigits (s) {<br />
  return s.replace (/[^\d]/g, “”);<br />
}<br />
[/javascript]</p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2009/09/04/useful-javascript-regular-expression-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regular Expressions in InstallScript</title>
		<link>http://ulanoff.com/blogs/codeshack/2009/07/20/regular-expressions-in-installscript/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2009/07/20/regular-expressions-in-installscript/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 19:16:35 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[Installer]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[InstallShield]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=42</guid>
		<description><![CDATA[If you&#8217;ve ever had to parse strings in InstallShield&#8217;s InstallScript, you&#8217;d know that a few of InstallShield&#8217;s built-in String Functions might not be enough. Regular Expressions are a way to go, but unfortunatelly Acresso didn&#8217;t implement them (yet?) in their product.
This post from Acresso Community might have a solution for you (at least until Acresso will figure out a [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever had to parse strings in InstallShield&#8217;s InstallScript, you&#8217;d know that a few of InstallShield&#8217;s built-in String Functions might not be enough. Regular Expressions are a way to go, but unfortunatelly Acresso didn&#8217;t implement them (yet?) in their product.</p>
<p>This post from Acresso Community might have a solution for you (at least until Acresso will figure out a way to implement RegEx natively in their products).</p>
<p><span id="more-42"></span></p>
<p><strong>Problems calling VBScript/COM objects from InstallScript</strong><br />
Dated: 07-14-2006, 11:17 AM</p>
<p>Can anyone tell whats wrong with this function?<br />
It is supposed to create an VBscript Regexp object and then test a string against the expression and return the result of the test (TRUE/FALSE).<br />
It always returns FALSE, even when it obviously should be TRUE &#8211; tested a simple expression. Am I missing something in how to call VBScript/COM objects and test return codes?</p>
<p>Code:</p>
<div>
<pre style="margin: 0px;width: 640px;height: 434px;text-align: left;border: 1px inset;padding: 6px">prototype BOOL ValidateString(STRING, STRING);
function BOOL ValidateString(szString,szPattern)
OBJECT oRegEx, oMatch;
BOOL MatchFound;
begin

	//try to create the RegEx object
	try
		set oRegEx = CreateObject("VBScript.RegExp");
	catch
		MessageBox("CreateObject Failed- "+ Err.Decription, SEVERE);
	endcatch;

	oRegEx.Pattern = szPattern;
	oRegEx.IgnoreCase = 0;
	oRegEx.Global = 1;  //set to 1 to find all matches in the string
			//set to 0 to find only the first match
	try
		set oMatch = oRegEx.Execute(szString);
	catch
		MessageBox("CreateObject Failed- "+ Err.Decription, SEVERE);
	endcatch;

	MatchFound = (oMatch.Count &gt; 0);
	return MatchFound;
end;</pre>
</div>
<p>Actually, that was a second attempt. The initial attempt was to call the Test method of REGEX directly, but that didn&#8217;t work either.</p>
<div>
<div class="smallfont">Code:</div>
<pre style="margin: 0px;width: 640px;height: 338px;text-align: left;border: 1px inset;padding: 6px">prototype BOOL ValidateString(STRING, STRING);
function BOOL ValidateString(szString,szPattern)
OBJECT oRegEx;
BOOL MatchFound;
begin

	//try to create the RegEx object
	try
		set oRegEx = CreateObject("VBScript.RegExp");
	catch
		MessageBox("CreateObject Failed- "+ Err.Decription, SEVERE);
	endcatch;

	oRegEx.Pattern = szPattern;
	oRegEx.IgnoreCase = 0;
	oRegEx.Global = 1;  //set to 1 to find all matches in the string
			//set to 0 to find only the first match
	MatchFound = oRegEx.Test(szString);
	return MatchFound;
end;</pre>
</div>
<p>This is being #included into a setup.rul in an InstallScriptMSI project.</p>
<div class="smallfont"> <strong>Solved it!!</strong><br />
Dated: 07-14-2006, 01:09 PM</div>
<hr size="1" /><!-- / icon and title --><!-- message --></p>
<div id="post_message_358149">Turns out I only needed to declare the Pattern variable as a &#8220;VARIANT&#8221;.<br />
Can be taken care of in the PROTOTYPE declaration:</p>
<div>
<div class="smallfont">Code:</div>
<pre style="margin: 0px;width: 640px;height: 34px;text-align: left;border: 1px inset;padding: 6px">prototype BOOL ValidateString(STRING, VARIANT);</pre>
</div>
<p>The second set of code works great as a regular expression tester if anyone else is looking for one. Use the above prototype and this code:</p>
<div>
<div class="smallfont">Code:</div>
<pre style="margin: 0px;width: 640px;height: 290px;text-align: left;border: 1px inset;padding: 6px">function BOOL ValidateString(szString,szPattern)
OBJECT oRegEx;
BOOL MatchFound;
begin

	//try to create the RegEx object
	try
		set oRegEx = CoCreateObject("VBScript.RegExp");
	catch
		MessageBox("CoCreateObject Failed- "+ Err.Decription, SEVERE);
	endcatch;
	oRegEx.Pattern = szPattern;
	oRegEx.IgnoreCase = 0;
	MatchFound = oRegEx.Test(szString);
	set oRegEx = NOTHING;
	return MatchFound;
end;</pre>
</div>
</div>
<p>The original forum thread started by user <a href="http://community.installshield.com/member.php?u=12978">Rincewind</a> could be found <a href="http://community.installshield.com/showthread.php?t=160858">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2009/07/20/regular-expressions-in-installscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>data Protocol &#8211; embed your data</title>
		<link>http://ulanoff.com/blogs/codeshack/2009/07/08/data-protocol-embed-your-data/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2009/07/08/data-protocol-embed-your-data/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 22:31:26 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[ie8]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=37</guid>
		<description><![CDATA[Recently, looking for a completely unrelated subject I discovered that IE8 now supports the data protocol.
What is a data protocol?
In a few words, it&#8217;s a way to embed any data (like GIF images, for example) into text documents such as HTML or CSS. So, instead of linking to an external file, you can do something like this:
HTML
[html]&#60;IMG
SRC=&#8217;data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAA [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, looking for a completely unrelated subject I discovered that IE8 now supports the <em>data</em> protocol.</p>
<h3>What is a data protocol?</h3>
<p>In a few words, it&#8217;s a way to embed any data (like GIF images, for example) into text documents such as HTML or CSS. So, instead of linking to an external file, you can do something like this:</p>
<h4>HTML</h4>
<p>[html]&lt;IMG<br />
SRC=&#8217;data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAA wAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfz gFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiO Spa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZ eGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81  M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7&#8242;<br />
ALT=&#8217;Larry&#8217;&gt;[/html]</p>
<p><span id="more-37"></span>The data protocol is not something new, it is dated all the way back to 1995, when it was proposed. And in 1998 it became known as RFC2397.</p>
<p>The following elements and/or attributes could make a use of the <em>data</em> protocol:</p>
<ul>
<li>object (images only)</li>
<li>img</li>
<li>input type=image</li>
<li>link</li>
<li>CSS declarations that accept a URL, such as background, backgroundImage, and so on.</li>
</ul>
<p>Let&#8217;s look at some examples:</p>
<h4>CSS</h4>
<p>[css].img { background: url(data:image/png;base64,iVBORw0KGgoAAAANSU hEUgAAAAIAAAACCAIAAAD91JpzAAAABnRSTlMAAAAAAABupgeRAAAABmJLR0QA%2FwD %2FAP%2BgvaeTAAAAEUlEQVR42mP4%2F58BCv7%2FZwAAHfAD%2FabwPj4AAAAASUVO RK5CYII%3D) fixed 1px 0; }[/css]</p>
<h4>JS</h4>
<p>[javascript]var img = new Image();<br />
img.style.width = &#8216;100px&#8217;;<br />
img.style.height = &#8216;100px&#8217;;<br />
img.src = &#8216;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCA IAAAD91JpzAAAABnRSTlMAAAAAAABupgeRAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAA AEUlEQVR42mP4%2F58BCv7%2FZwAAHfAD%2FabwPj4AAAAASUVORK5CYII%3D&#8217;;<br />
document.all.myBody.appendChild(img);[/javascript]</p>
<h3>Why would you want to use a data protocol?</h3>
<p>The most obvious reason could be the portability.</p>
<p>You might be familiar with the <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> add-on to Firefox and some other browsers. It allows you to write small bits of JavaScript to customize web pages with new features or change the look of the entire site alltogether. For example, you could write a script to add &#8220;Download&#8221; button to every movie on YouTube site. To make this button look like it &#8220;was there&#8221; you could create a little image and apply it to the button with a style. That image could be embedded in your JS file with a <em>data</em> protocol. This way you wouldn&#8217;t have to worry about packaging all your files in a ZIP archive and unpackaging them in the right location on the target system. All you have to download is a single JS file. Great, isn&#8217;t it?</p>
<h3>P.S.</h3>
<p>Please note that there are some limitations to keep in mind when dealing with <em>data</em> protocol. First, RFC1866 limits lengths of some attributes to 1024 characters, so if base64 encoded string is too long the object might appear broken in the browser. Second, to be on a safe side try to keep the entire base64 string on one line. Splitting it with line break/carriage return characters might break the data.</p>
<p>Also, most modern browsers (such as Firefox, Safari and Chrome) would support <em>data</em> protocol, but IE7 and older will not, so you might want to provide some alternative for the older browsers.</p>
<p>For more information visit the following sites:</p>
<ul>
<li>IETF: <a href="http://www.ietf.org/rfc/rfc2397.txt">RFC2397 &#8211; The &#8220;data&#8221; URL scheme</a>,</li>
<li>IETF: <a href="http://www.ietf.org/rfc/rfc1866.txt">RFC1866 &#8211; Hypertext Markup Language &#8211; 2.0</a></li>
<li>MSDN: <a href="http://msdn.microsoft.com/en-us/library/cc848897%28VS.85%29.aspx">data Protocol</a></li>
<li>Motobit: <a href="http://www.motobit.com/util/base64-decoder-encoder.asp">online base64 encoder/decoder</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2009/07/08/data-protocol-embed-your-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Login To Multi Accounts Simultaneously In Same Site Using IE8</title>
		<link>http://ulanoff.com/blogs/codeshack/2009/06/16/login-to-multi-accounts-simultaneously-in-same-site-using-ie8/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2009/06/16/login-to-multi-accounts-simultaneously-in-same-site-using-ie8/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 18:20:47 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[ie8]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=30</guid>
		<description><![CDATA[ How many of you have multiple accounts for same site, say Yahoo or Orkut  or some other email or networking site or forums, which you would like to browse simultaneously. One of the option available was to install different browsers and then log in into the same site using different ids. But with the [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin-left: 0px;margin-right: 0px;border: 0px" src="http://lh5.ggpht.com/_795ri80stYw/SgWZMZPKLcI/AAAAAAAAATc/SzoPZNOlOL0/ie8_logo%5B4%5D.gif?imgmax=800" border="0" alt="ie8_logo" width="191" height="30" align="right" /> How many of you have multiple accounts for same site, say Yahoo or Orkut  or some other email or networking site or forums, which you would like to browse simultaneously. One of the option available was to install different browsers and then log in into the same site using different ids. But with the <a href="http://www.sanzrao.com/2009/03/whats-new-in-internet-explorer-8.html">new features</a> of Internet Explorer 8 you can do this within IE8 itself.</p>
<p>To make use of this feature, instead of creating a new tab, select “New Session” from File menu. Thus each new session will have its own cookies which will allow you to browse same site with simultaneous multiple ids.</p>
<p>Source: <a href="http://www.sanzrao.com/2009/05/login-to-multi-accounts-simultaneously.html">http://www.sanzrao.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2009/06/16/login-to-multi-accounts-simultaneously-in-same-site-using-ie8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InstallShield Skinning</title>
		<link>http://ulanoff.com/blogs/codeshack/2009/02/20/installshield-skinning/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2009/02/20/installshield-skinning/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 21:20:37 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[Installer]]></category>
		<category><![CDATA[InstallShield]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=16</guid>
		<description><![CDATA[Ever wanted to get rid of the InstallShield branding on custom skins? Now you can! Just download the attached ZIP file and use the files in this ZIP to create your skins. It works just like the original skin toolkit.
Happy skinning&#8230;
Elmery

Source: Acresso Community forums.
Disclaimer: Neither I nor my employer endorse the practice of stealing IP. Please [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Ever wanted to get rid of the InstallShield branding on custom skins? Now you can! Just download the attached ZIP file and use the files in this ZIP to create your skins. It works just like the original skin toolkit.</p>
<p>Happy skinning&#8230;</p>
<p>Elmery</p></blockquote>
<p><span id="more-16"></span></p>
<p>Source: <a href="http://community.installshield.com/showthread.php?s=&amp;threadid=129033">Acresso Community forums</a>.</p>
<p>Disclaimer: Neither I nor my employer endorse the practice of stealing IP. Please respect the owner of the software and the hard labor of programmers behind the product. Put the reference to InstallShield somewhere in your custom skin.</p>
<p><a href="http://ulanoff.com/blogs/codeshack/files/2009/02/skindev.zip">skindev.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2009/02/20/installshield-skinning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Regular Expressions in YUI CellEditor</title>
		<link>http://ulanoff.com/blogs/codeshack/2009/01/28/using-regular-expressions-in-yui-celleditor/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2009/01/28/using-regular-expressions-in-yui-celleditor/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:35:42 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=15</guid>
		<description><![CDATA[Here&#8217;s a nice example of validating data in DataTable&#8217;s CellEditor using regular expressions.
http://www.satyam.com.ar/yui/2.6.0/invoice.html
]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a nice example of validating data in DataTable&#8217;s CellEditor using regular expressions.</p>
<p><a href="http://www.satyam.com.ar/yui/2.6.0/invoice.html">http://www.satyam.com.ar/yui/2.6.0/invoice.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2009/01/28/using-regular-expressions-in-yui-celleditor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cyr2Lat Slugs &#8211; WordPress Plugin</title>
		<link>http://ulanoff.com/blogs/codeshack/2008/12/10/cyr2lat-slugs/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2008/12/10/cyr2lat-slugs/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 00:41:30 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=13</guid>
		<description><![CDATA[На русском читайте ниже&#8230;
If you happen to write Word Press posts in one of the Cyrillic-based languages (i.e. Russian, Bulgarian, Ukrainian, Belarusian, etc.) and are using post&#8217;s title in Permalinks then you know that your post&#8217;s URL will become an unreadable mash of encoded characters (like %45%f0%&#8230;)
I got finally tired of changing encoded slugs to their latin [...]]]></description>
			<content:encoded><![CDATA[<p><a href="#russian">На русском читайте ниже&#8230;</a></p>
<p>If you happen to write Word Press posts in one of the Cyrillic-based languages (i.e. Russian, Bulgarian, Ukrainian, Belarusian, etc.) and are using post&#8217;s title in Permalinks then you know that your post&#8217;s URL will become an unreadable mash of encoded characters (like %45%f0%&#8230;)</p>
<p>I got finally tired of changing encoded slugs to their latin equivalents on my son&#8217;s blog, and started looking for ways to automate this process. The <a href="http://petko.bossakov.eu/wordpress-cyrillic-slugs-plugin/">Cyrillic Slugs</a> plug-in written by <a href="http://petko.bossakov.eu/">Petko Bossakov</a> was my only alternative at the time in WordPress plug-in repository. Unfortunatelly that plug-in didn&#8217;t work for me, since Cyrillic Slugs expects the page to be written in Windows-1251 encoding, and my blog uses WP&#8217;s default/recommended UTF-8. Hence Cyr2Lat Slugs plug-in was born.</p>
<p>Here&#8217;s a sample that illustrates what this plug-in does.</p>
<p>Before Cyr2Lat Slugs:</p>
<ol>
<li>You write a post with title &#8220;Пример заголовка&#8221;</li>
<li>WordPress creates permalink like this:<br />
http://www.myblog.com/2008/12/19/%d0%bf%d1%80%d…b2%d0%ba%d0%b0</li>
</ol>
<p>After Cyr2Lat Slugs:</p>
<ol>
<li>You write a post with title &#8220;Пример заголовка&#8221;</li>
<li>WordPress creates permalink like this:<br />
http://www.myblog.com/2008/12/19/primer-zagolovka</li>
</ol>
<p>Cyr2Lat Slugs is based on Petko&#8217;s original idea and uses one of his functions, but otherwise is written in a more contemporary, object-oriented fashion. It also uses <em>strtr</em> function instead of <em>str_replace</em> which should be much faster.</p>
<p><strong>Please note that you have to save post (click Save or Publish button) for slug conversion to take place!</strong></p>
<p><strong>Version:</strong> 1.0<br />
<strong>Requirements:</strong> WP 2.3+ (WP MU compatible)<br />
<strong>Author:</strong> <a href="http://ulanoff.com">Ruslan Ulanov</a><br />
<strong>License:</strong> <a href="http://gnu.org/licenses/gpl.txt">GPL</a></p>
<p><a href="http://ulanoff.com/dl/cyr2lat-slugs.zip">Download Cyr2Lat Slugs plug-in now.</a></p>
<p><strong>Installation:</strong></p>
<ol>
<li>Copy file cyr2lat-slugs.php to folder <em>wp-content/plugins/</em> on your server.</li>
<li>Activate Cyr2Lat Slugs in Plugins menu of your blog&#8217;s admin interface.</li>
<li>You&#8217;re done. There are no options to configure.</li>
</ol>
<p>Comments are welcome (moderated, no spam please).</p>
<p> <br />
<a name="russian">#</a><br />
<span style="color: #ff0000"><strong>*In Russian*</strong></span></p>
<p>Cyr2Lat Slugs это плагин для платформы Word Press, который переводит русские буквы в заголовке поста в латиницу (транслит), тем самым делая URL читаемым и доступным для поисковиков.</p>
<p>Продемонстрируем работу плагина Cyr2Lat Slugs на примере.</p>
<p>До установки Cyr2Lat Slugs:</p>
<ol>
<li>Вы пишете пост с заголовком &#8220;Пример заголовка&#8221;</li>
<li>WordPress создает для него пермалинк:<br />
http://www.myblog.com/2008/12/19/%d0%bf%d1%80%d…b2%d0%ba%d0%b0</li>
</ol>
<p>После установки Cyr2Lat Slugs:</p>
<ol>
<li>Вы пишете пост с заголовком &#8220;Пример заголовка&#8221;</li>
<li>WordPress создает для него пермалинк:<br />
http://www.myblog.com/2008/12/19/primer-zagolovka</li>
</ol>
<p><strong>Примечание: Пост необходимо сохранить (нажать кнопку Save или Publish), чтобы заголовок был переведен в латиницу!</strong></p>
<p><strong>Версия:</strong> 1.0<br />
<strong>Требования:</strong> WP 2.3+ (работает в WP MU)<br />
<strong>Автор:</strong> <a href="http://ulanoff.com">Руслан Уланов</a><br />
<strong>Лицензия:</strong> <a href="http://gnu.org/licenses/gpl.txt">GPL</a></p>
<p><a href="http://ulanoff.com/dl/cyr2lat-slugs.zip">Загрузить Cyr2Lat Slugs.</a></p>
<p><strong>Установка:</strong></p>
<ol>
<li>Скопируйте файл cyr2lat-slugs.php в папку <em>wp-content/plugins/</em> на сервере.</li>
<li>Активируйте Cyr2Lat Slugs в меню Plugins административного интерфейса вашего блога.</li>
<li>Готово. Больше ничего конфигурировать не надо.</li>
</ol>
<p>Комментарии приветствуются (но модерируются, для отсеивания спама).</p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2008/12/10/cyr2lat-slugs/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Mobile Web Best Practices 1.0</title>
		<link>http://ulanoff.com/blogs/codeshack/2008/08/07/mobile-web-best-practices-10/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2008/08/07/mobile-web-best-practices-10/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 19:30:40 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=12</guid>
		<description><![CDATA[The World Wide Web Consortium (W3C) has recently published a document called Mobile Web Best Practices 1.0.
This document specifies Best Practices for delivering Web content to mobile devices. The principal objective is to improve the user experience of the Web when accessed from such devices.
It&#8217;s a good step toward making the Web accessible to millions [...]]]></description>
			<content:encoded><![CDATA[<p>The World Wide Web Consortium (W3C) has recently published a document called <em>Mobile Web Best Practices 1.0</em>.</p>
<blockquote><p>This document specifies Best Practices for delivering Web content to mobile devices. The principal objective is to improve the user experience of the Web when accessed from such devices.</p></blockquote>
<p>It&#8217;s a good step toward making the Web accessible to millions of small screen devices, not blessed with a combination of iPhone&#8217;s hi-res LCD and a powerful Safari browser. <img src='http://ulanoff.com/blogs/codeshack/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The document is available from W3C&#8217;s web site <a href="http://www.w3.org/TR/2008/REC-mobile-bp-20080729/">http://www.w3.org/TR/2008/REC-mobile-bp-20080729/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2008/08/07/mobile-web-best-practices-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unlocker for &#8220;in use&#8221; files</title>
		<link>http://ulanoff.com/blogs/codeshack/2008/07/31/unlocker-for-in-use-files/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2008/07/31/unlocker-for-in-use-files/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 00:51:48 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=11</guid>
		<description><![CDATA[How many times have you had to completely reboot Windows to get Explorer or some other greed process to let go of a file you needed &#8230;
Unlocker really rocks.  It integrates into the right click menu and can show you what processes have a lock on a file.  You can shutdown the process (preferred) or simply unlock the [...]]]></description>
			<content:encoded><![CDATA[<p>How many times have you had to completely reboot Windows to get Explorer or some other greed process to let go of a file you needed &#8230;</p>
<p>Unlocker really rocks.  It integrates into the right click menu and can show you what processes have a lock on a file.  You can shutdown the process (preferred) or simply unlock the file.  Not only is it free, but the author provides a comparison matrix against 19 other utilities that unlock files and it is apparent he has put some thought into making his comprehensive!</p>
<p>Obviously you have to be circumspect about ending processes to release a file lock &#8211; but I&#8217;ve seen Windows Explorer hang on to a file until reboot when it isn&#8217;t really using it. </p>
<p><a href="http://ccollomb.free.fr/unlocker/" target="_blank">Visit Site</a></p>
<p>Source: <a href="http://desktopengineer.com">http://desktopengineer.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2008/07/31/unlocker-for-in-use-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MS Patterns &amp; Practices</title>
		<link>http://ulanoff.com/blogs/codeshack/2008/07/31/ms-patterns-practices/</link>
		<comments>http://ulanoff.com/blogs/codeshack/2008/07/31/ms-patterns-practices/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 00:41:12 +0000</pubDate>
		<dc:creator>Ruslan Ulanov</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://ulanoff.com/blogs/codeshack/?p=10</guid>
		<description><![CDATA[Microsoft has assembled a nice library of best practices for all sorts of applications from Web Applications and Services to Desktop and Mobile Applications.
Quoting the site&#8230;
Microsoft patterns &#38; practices was created to meet the demands of architects and application developers seeking guidance on how to apply Microsoft’s array of products and technologies to common application development [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft has assembled a nice library of best practices for all sorts of applications from Web Applications and Services to Desktop and Mobile Applications.</p>
<blockquote><p>Quoting the site&#8230;<br />
Microsoft patterns &amp; practices was created to meet the demands of architects and application developers seeking guidance on how to apply Microsoft’s array of products and technologies to common application development scenarios and technical challenges. Microsoft patterns &amp; practices are Microsoft’s proven recommendations for how to design, develop, deploy, and operate architecturally sound application for the Microsoft platform.</p></blockquote>
<p>Check it out in <a href="http://msdn.microsoft.com/en-us/practices/default.aspx">Microsoft patterns &amp; practices Developer Center</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ulanoff.com/blogs/codeshack/2008/07/31/ms-patterns-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
