<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8044172762034419597</atom:id><lastBuildDate>Fri, 18 Jun 2010 20:44:29 +0000</lastBuildDate><title>Regex Hero Blog</title><description>A blog dedicated to the &lt;a href="http://regexhero.net/"&gt;online .NET regular expression tester&lt;/a&gt; known as Regex Hero</description><link>http://blog.regexhero.net/</link><managingEditor>noreply@blogger.com (Steve Wortham)</managingEditor><generator>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RegexHeroBlog" /><feedburner:info uri="regexheroblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-612880888431517079</guid><pubDate>Sun, 13 Jun 2010 21:17:00 +0000</pubDate><atom:updated>2010-06-13T14:42:13.417-07:00</atom:updated><title>New 7-Day Trial</title><description>I've been lacking a good way for you guys to &lt;a href="http://regexhero.net/try/"&gt;try Regex Hero Pro&lt;/a&gt; before you buy, until now.  The new trial lasts 7 days and allows you to experience everything Regex Hero Pro has to offer, including code hinting.&lt;br /&gt;
&lt;br /&gt;
To start the trial all you have to do is &lt;a href="http://regexhero.net/user/"&gt;create a login&lt;/a&gt;.  Or if you already have a login, then the trial will automatically start the next time you visit &lt;a href="http://regexhero.net/"&gt;Regex Hero&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-612880888431517079?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=n6yfeC4YDHQ:oEcpSyHg79M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=n6yfeC4YDHQ:oEcpSyHg79M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=n6yfeC4YDHQ:oEcpSyHg79M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/n6yfeC4YDHQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/n6yfeC4YDHQ/new-7-day-trial.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/06/new-7-day-trial.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-3123092211593042607</guid><pubDate>Sat, 12 Jun 2010 21:51:00 +0000</pubDate><atom:updated>2010-06-12T14:54:24.097-07:00</atom:updated><title>Code Hinting for Replacement Groups</title><description>I was planning this one for awhile.  I just needed to set aside some hours to build it.&lt;br /&gt;
&lt;br /&gt;
Code hinting has been available for regular expressions for a couple months.  But now all pro users will see code hinting for the replace box as well...&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/Code-Hinting-Replace.png" alt="Code Hinting for Replacement Groups" /&gt;&lt;br /&gt;
&lt;br /&gt;
You can see the named groups ${LastName} and ${FirstName} at the top of the list.  My hope is that this will promote the use of named groups in regular expressions, rather than numbered groups.  I think named groups have a way of better expressing the intention of the regular expression and to be able to select them from a list is pretty awesome.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-3123092211593042607?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=wxT5KRWCWoI:u0HE29KKiVI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=wxT5KRWCWoI:u0HE29KKiVI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=wxT5KRWCWoI:u0HE29KKiVI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/wxT5KRWCWoI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/wxT5KRWCWoI/code-hinting-for-replacement-groups.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/06/code-hinting-for-replacement-groups.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-4570663913175603261</guid><pubDate>Sun, 16 May 2010 20:12:00 +0000</pubDate><atom:updated>2010-05-16T14:19:07.766-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>Selection Bug Fix when CrLf is Checked</title><description>I discovered yesterday that in some cases the wrong text is selected when you're stepping through the matches with the Previous/Next buttons.  Specifically it would happen when you're working with multiple lines of text and "CrLf marks a line ending" is checked.  I just now fixed the problem so it won't happen again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-4570663913175603261?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=8BWntUmHo08:DUoYvJwHfK4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=8BWntUmHo08:DUoYvJwHfK4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=8BWntUmHo08:DUoYvJwHfK4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/8BWntUmHo08" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/8BWntUmHo08/selection-bug-fix-when-crlf-is-checked.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/selection-bug-fix-when-crlf-is-checked.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-5793479092283604483</guid><pubDate>Sun, 16 May 2010 00:08:00 +0000</pubDate><atom:updated>2010-05-16T14:18:55.020-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>CPU, Memory, and Hard Drive Usage Improvements</title><description>I made a few improvements to the application this weekend.  I managed to find a more efficient way of doing a few things, eliminating unneeded steps during each regex matching cycle for real-time highlighting.  In so doing I've sped it up slightly.  &lt;br /&gt;
&lt;br /&gt;
I also found that I was calling the auto-save function a little too frequently so I tweaked the interval settings.  That should reduce memory and hard drive usage when working with large target strings.  &lt;br /&gt;
&lt;br /&gt;
And lastly I turned on GPU bitmap caching for several elements within the app.  GPU acceleration features in Silverlight are still minimal, but this is one thing I'm able to do that actually has some small performance benefits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-5793479092283604483?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=2-6eWcp6dbQ:1SfJBYxVS9o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=2-6eWcp6dbQ:1SfJBYxVS9o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=2-6eWcp6dbQ:1SfJBYxVS9o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/2-6eWcp6dbQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/2-6eWcp6dbQ/cpu-memory-and-hard-drive-performance.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/cpu-memory-and-hard-drive-performance.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-3772137351089131673</guid><pubDate>Sat, 15 May 2010 23:37:00 +0000</pubDate><atom:updated>2010-05-16T14:18:33.708-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Company / Business</category><category domain="http://www.blogger.com/atom/ns#">Branding / Marketing</category><title>New "Regex Hero Pro" Name, and a Lower Price</title><description>When I released "Regex Hero for Desktop" several months ago I had named it the way I did because I was inspired by &lt;a href="http://www.balsamiq.com/"&gt;Balsamiq Mockups for Desktop&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
In fact Regex Hero shares a lot in common with Balsamiq the way we both started.  I mean, obviously their app is a prototyping tool and mine is a regex tool.  But Regex Hero is supported and maintained by just one man (me), as was Balsamiq back in the day.  And they have a killer web app that thousands of people use, as do I. ;)&lt;br /&gt;
&lt;br /&gt;
However, I've come to realize that while I do admire Balsamiq and just about everything they do, my app is just not the same.  You see, Regex Hero is actually very usable on the web.  And when you buy it, you get an account and license key which then allows you to use all of the features all within the web version.  You can then &lt;i&gt;optionally&lt;/i&gt; install the desktop version and get all of those same features.&lt;br /&gt;
&lt;br /&gt;
So because the paid version can be run with the same feature sets inside or outside of the browser, calling it "Regex Hero for Desktop" is really a misnomer.  So I've renamed it, "Regex Hero Pro."  I think everyone understands that professional versions of an application are true supersets of the lesser version and I'm a little happier with this name.&lt;br /&gt;
&lt;br /&gt;
The other thing I had changed earlier this year was the price.  Originally I sold Regex Hero for $15.  After I added some functionality I upped the price to $20 in March.  But since that increase in price, sales have dwindled.  Pricing is hard, it turns out.  So I've set the price back to $15.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-3772137351089131673?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=9RRJOH1cKqo:nkw9mRHLdus:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=9RRJOH1cKqo:nkw9mRHLdus:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=9RRJOH1cKqo:nkw9mRHLdus:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/9RRJOH1cKqo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/9RRJOH1cKqo/new-regex-hero-pro-name-and-lower-price.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/new-regex-hero-pro-name-and-lower-price.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-3685407722638028905</guid><pubDate>Fri, 14 May 2010 21:24:00 +0000</pubDate><atom:updated>2010-05-14T14:47:11.396-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Silverlight 4 Adoption Rate Approaching 25%</title><description>A week before Silverlight 4 came out I added some Javascript to the &lt;a href="http://regexhero.net/tester/" target="_blank"&gt;tester&lt;/a&gt; page to track what version of Silverlight everyone was running and feed it into Google Analytics.&lt;br /&gt;
&lt;br /&gt;
Silverlight 4 is still very new of course but I think it is interesting how many Regex Hero users have already upgraded.  The adoption rate here is much higher than the stats from riastats.com would suggest (which of course spans a large variety of sites).&lt;br /&gt;
&lt;br /&gt;
Here's a screenshot from Google Analytics showing the breakdown of Silverlight versions on &lt;a href="http://regexhero.net/tester/" target="_blank"&gt;regexhero.net/tester/&lt;/a&gt; during the past 2 weeks:&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/Silverlight4-Adoption-Rate.png" alt="Silverlight 4 Adoption Rate" /&gt;&lt;br /&gt;
&lt;i&gt;"Silverlight 0" was my way of saying Silverlight is not installed.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Regex Hero is still built on Silverlight 3.  But I'm going to begin working on some major improvements to Regex Hero in the upcoming weeks.  Silverlight 4 is going to allow me to add some &lt;a href="http://blog.regexhero.net/2010/03/silverlight-4-coming-in-april-or-maybe.html"&gt;awesome features&lt;/a&gt; that I'm looking forward to.  And my plan at the moment is to launch the new Silverlight 4 version when the adoption rate surpasses 80%.  &lt;br /&gt;
&lt;br /&gt;
If you want to see the new version of Regex Hero make sure you get the &lt;a href="http://www.microsoft.com/getsilverlight/" target="_blank"&gt;latest version of Silverlight&lt;/a&gt;.  The sooner everyone upgrades the sooner I can launch. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-3685407722638028905?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=-dW_kGW43Io:ALhr8QE3abE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=-dW_kGW43Io:ALhr8QE3abE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=-dW_kGW43Io:ALhr8QE3abE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/-dW_kGW43Io" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/-dW_kGW43Io/silverlight-4-adoption-rate-approaching.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/silverlight-4-adoption-rate-approaching.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-5909479145853731085</guid><pubDate>Tue, 11 May 2010 03:03:00 +0000</pubDate><atom:updated>2010-05-12T20:41:41.280-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>New Video Lessons</title><description>I began a new series of video lessons explaining the basics of regular expressions.  I'm trying to be thorough in each lesson without talking about concepts that'll be learned in later lessons (a more difficult task than I expected).&lt;br /&gt;
&lt;br /&gt;
I have 3 so far, and I'll add to this list as I go:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://regexhero.net/videos/4/intro-to-regular-expressions"&gt;Introduction to Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://regexhero.net/videos/7/characters-explained"&gt;Regex Lesson 1: Characters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://regexhero.net/videos/5/quantifiers-explained"&gt;Regex Lesson 2: Quantifiers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://regexhero.net/videos/8/assertions-explained"&gt;Regex Lesson 3: Assertions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-5909479145853731085?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=8snrLZiqBBc:aY4DvYurgkE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=8snrLZiqBBc:aY4DvYurgkE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=8snrLZiqBBc:aY4DvYurgkE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/8snrLZiqBBc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/8snrLZiqBBc/new-video-lessons.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/new-video-lessons.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-5550922192522519544</guid><pubDate>Fri, 07 May 2010 00:36:00 +0000</pubDate><atom:updated>2010-05-10T20:07:14.159-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>More Code Hinting Bug Fixes</title><description>I discovered a couple of bugs with the code hinting this week.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;In some cases when you have constructs with a slash such as \d and \w at the beginning and end of an expression, then the code hinting for the parenthesis wouldn't work properly in the middle of the expression.&lt;/li&gt;
&lt;li&gt;If you type out the first few characters of an expression and then select it from the code hinting list, it wouldn't always put the caret in the right spot.  Again this was most often seen when typing in the middle of the expression.&lt;/li&gt;
&lt;/ol&gt;I'm glad to say that both of these issues are now fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-5550922192522519544?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=hT4qxkSV2OE:_XveqVm45pI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=hT4qxkSV2OE:_XveqVm45pI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=hT4qxkSV2OE:_XveqVm45pI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/hT4qxkSV2OE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/hT4qxkSV2OE/more-code-hinting-bug-fixes.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/more-code-hinting-bug-fixes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-6085040336536119976</guid><pubDate>Sun, 02 May 2010 17:11:00 +0000</pubDate><atom:updated>2010-05-10T20:07:05.380-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>Improvements to the Library</title><description>Ah yes, the library.  The library only has 13 regular expressions in it at the moment.  So I've been working on making it more compelling to contribute.&lt;br /&gt;
&lt;br /&gt;
A couple weeks ago I added a tagging system and incorporated a &lt;a href="http://regexhero.net/library/"&gt;faceted search engine&lt;/a&gt; for the library visible from the website.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/Library-Faceted-Search.PNG" alt="Library Faceted Search" /&gt;&lt;br /&gt;
&lt;br /&gt;
Only I have control over the tags for now as I'm still building out all of the interfaces.  But this is one way to filter the regular expressions that I'll be relying on heavily as the list grows.&lt;br /&gt;
&lt;br /&gt;
Then just this weekend I refined the list inside the tester itself (soon I'll add tags and sorting to this as well):&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/Public-Library-List.PNG" alt="Public Library" /&gt;&lt;br /&gt;
&lt;br /&gt;
And I built out a voting mechanism:&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/Library-Voting.PNG" alt="Library Voting" /&gt;&lt;br /&gt;
&lt;br /&gt;
The voting mechanism will only appear for regular expressions out of the public library that are not your own.  And it'll slide away after you vote.  This should make it much more convenient to vote, and hopefully more compelling for developers to contribute as a result.&lt;br /&gt;
&lt;br /&gt;
Coming up next I'll have a points and badges system in place.  You may notice a trend here.  These are all very StackOverflow-like community features.  I'm certainly not trying to compete with StackOverflow.  I mean, my site is not a Q&amp;A site.  But I do like the way they do quite a lot of things.  They've done a great job at making it fun to help people.  So I'm hoping to accomplish something similar.  In the end, the more quality regular expressions we have in the library, the more useful it'll be.  So I think it only makes sense for me to build out a good system to handle it.  And then I've been toying with the idea of creating a contest to encourage more community involvement.  Stay tuned for updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-6085040336536119976?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=3VxF5pMe7jM:8HuHXPu_ZO0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=3VxF5pMe7jM:8HuHXPu_ZO0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=3VxF5pMe7jM:8HuHXPu_ZO0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/3VxF5pMe7jM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/3VxF5pMe7jM/improvements-to-library.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/05/improvements-to-library.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-1987611631995316838</guid><pubDate>Mon, 12 Apr 2010 02:43:00 +0000</pubDate><atom:updated>2010-05-13T09:14:17.612-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Stopwatch Threshold Logging</title><description>&lt;p&gt;
Today's post is not related to regular expressions at all.  In fact it's not really related to &lt;a href="http://regexhero.net/"&gt;Regex Hero&lt;/a&gt; except that it potentially affects the website.  But I figure I'd write about it here anyway.&lt;/p&gt;
&lt;p&gt;
I've been diagnosing some intermittent web server performance issues for awhile now.  And in effort to gain some insight into which pages are slow and how often, I wrote a simple logger.&lt;/p&gt;
&lt;p&gt;
The idea is to time the ASP.NET page lifecycle from start to finish, and if it exceeds a certain threshold, then log it.  The advantage of this approach is that it's not going to waste processing time logging the stuff I don't care about.&lt;/p&gt;
&lt;p&gt;
If you're interesting in this for yourself and you're running ASP.NET all you'd have to do is add the following to your global.asax:&lt;/p&gt;
&lt;textarea readonly="true" rows="10" style="width: 90%"&gt;
private Stopwatch sw;
protected void Application_BeginRequest()
{   
  sw = new Stopwatch();
  sw.Start();
}

protected void Application_EndRequest() 
{
  sw.Stop();
  if (sw.ElapsedMilliseconds &gt; 500) // 500 ms threshold
  {
    try
    {
      StringBuilder sb = new StringBuilder();
      sb.AppendLine(DateTime.Now.ToUniversalTime().ToString());
      sb.AppendLine(Request.Path);
      sb.AppendLine(sw.ElapsedMilliseconds + " ms");
      sb.AppendLine(Environment.NewLine);
      System.IO.File.AppendAllText(Server.MapPath(@"~\App_Data\StopwatchLogger.txt"), sb.ToString());
    }
    catch
    {
    }
  } 
}
&lt;/textarea&gt;
&lt;p&gt;The &lt;strong&gt;Application_BeginRequest&lt;/strong&gt; and &lt;strong&gt;Application_EndRequest&lt;/strong&gt; events are the first and last events in the page lifecycle, respectively.  So this does a beautiful job of timing every single request throughout your web application, while only logging the slow stuff.&lt;/p&gt;
&lt;p&gt;
The result of a logged event might look like this:&lt;/p&gt;
&lt;pre&gt;4/10/2010 3:56:01 AM
/default.aspx
995 ms&lt;/pre&gt;
&lt;p&gt;
Super simple and to the point.  You could easily expand on this code if you wanted, adding get and post request variables, cookies or whatever might help you put this into context.&lt;/p&gt;
&lt;p&gt;
To test this initially I recommend setting the threshold to 1 ms just to make sure the logging works without throwing an error.  Once you verify that you can set it back to something more reasonable like 500 ms and let it do its thing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-1987611631995316838?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=vOL8AU_m-T4:rGfRXAqtKLE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=vOL8AU_m-T4:rGfRXAqtKLE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=vOL8AU_m-T4:rGfRXAqtKLE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/vOL8AU_m-T4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/vOL8AU_m-T4/stopwatch-threshold-logging.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/04/stopwatch-threshold-logging.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-3957108708439693097</guid><pubDate>Sun, 11 Apr 2010 20:41:00 +0000</pubDate><atom:updated>2010-04-11T21:09:12.682-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>Bugs fixed, Improved Efficiency, UI Tweaked, and Code Hinting Improved</title><description>&lt;h2&gt;Bug fixes&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;When you press the down arrow key the focus shifts to the code hinting box, but holding down the key wouldn't do anything unless you lift and press again.  Now as you press and hold the down arrow key, the selection will rapidly move down the list.&lt;/li&gt;
&lt;li&gt;The code hinting box wouldn't go away when you shift focus to the target string or click in the regular expression box.  Now it will.&lt;/li&gt;
&lt;li&gt;The app would throw unfriendly errors if you have disabled Isolated Storage.  Now it won't.&lt;/li&gt;
&lt;li&gt;The app would throw unfriendly errors occasionally when trying to step to a match that doesn't exist.  Now it won't.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Improved Efficiency&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;I've enabled output caching on the &lt;a href="http://regexhero.net/"&gt;home page&lt;/a&gt; as well as the &lt;a href="http://regexhero.net/tester/"&gt;tester&lt;/a&gt; to improve ASP.NET performance, if only slightly.&lt;/li&gt;
&lt;li&gt;I've combined three separate web service calls upon initialization to only one.  This will reduce the time it takes for the tester to recognize your login.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;UI Tweaks&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;I've changed the placement of the code hinting popup to line up perfectly with the regular expression above it, and I've changed the font to match.&lt;/li&gt;
&lt;li&gt;I've restricted the size of the code hinting box and made it scrollable by arrow keys.&lt;/li&gt;
&lt;li&gt;I added a subtle drop shadow to the code hinting box and dialog boxes.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Code Hinting Improvements&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;I added code hinting for all of the remaining constructs that have parenthesis.&lt;/li&gt;
&lt;li&gt;I added code hinting for the commonly used expressions that begin with a back slash such as &lt;b&gt;\n&lt;/b&gt;, &lt;b&gt;\r&lt;/b&gt;, &lt;b&gt;\s&lt;/b&gt;, etc.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-3957108708439693097?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=A-o27jANGgw:OYFrew0rJfI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=A-o27jANGgw:OYFrew0rJfI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=A-o27jANGgw:OYFrew0rJfI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/A-o27jANGgw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/A-o27jANGgw/bugs-fixed-improved-efficiency-ui.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/04/bugs-fixed-improved-efficiency-ui.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-2303251552765864356</guid><pubDate>Wed, 07 Apr 2010 17:55:00 +0000</pubDate><atom:updated>2010-04-15T16:06:29.845-07:00</atom:updated><title>Silverlight 4 release date confirmed: April 15th, 2010</title><description>What I had suspected is now confirmed.  Silverlight 4 will be launched along with Visual Studio 2010 on April 12th.  If you're in the Las Vegas area you can even &lt;a href="http://www.devconnections.com/shows/SP2010ASP/default.asp?s=142"&gt;register for the launch event&lt;/a&gt;.  Or you can &lt;a href="http://timheuer.com/blog/archive/2010/04/07/watch-silverlight-4-launch-live-with-channel-9-scottgu.aspx"&gt;watch it online&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I've talked before about how &lt;a href="http://blog.regexhero.net/2010/03/silverlight-4-coming-in-april-or-maybe.html"&gt;Silverlight 4 will affect Regex Hero&lt;/a&gt;.  So needless to say, I can hardly wait for it to 1.) be released and 2.) reach a large enough audience for me to make the switch.  I'm going to be keeping an eye on &lt;a href="http://www.riastats.com/"&gt;riastats.com&lt;/a&gt; for adoption rates.&lt;br /&gt;
&lt;br /&gt;
UPDATE:&lt;br /&gt;
So the official Silverlight 4 launch was broadcast live today.  And I learned that in fact the actual release date will be April 15th (Thursday).&lt;br /&gt;
&lt;br /&gt;
UPDATE #2:&lt;br /&gt;
Silverlight 4 is live!&lt;br /&gt;
&lt;br /&gt;
Get it here:&lt;br /&gt;
&lt;a href="http://www.microsoft.com/getsilverlight/get-started/install/"&gt;http://www.microsoft.com/getsilverlight/get-started/install/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-2303251552765864356?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=xOJp3gkUkf0:BJpofj0yemg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=xOJp3gkUkf0:BJpofj0yemg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=xOJp3gkUkf0:BJpofj0yemg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/xOJp3gkUkf0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/xOJp3gkUkf0/silverlight-4-to-be-released-april-12th.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/04/silverlight-4-to-be-released-april-12th.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-3883993980698833051</guid><pubDate>Sun, 04 Apr 2010 02:21:00 +0000</pubDate><atom:updated>2010-04-06T14:14:11.036-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>Major UI Overhaul</title><description>I was pretty proud of Regex Hero's simplicity in the beginning.  But I've built Regex Hero little pieces at a time for the past year.  As such, I've gone in a few different design directions and the usability has suffered a little.  I'm a programmer 1st, designer 4th.    That's no excuse, really.  If I was a more disciplined designer I wouldn't have let this happen.  But nothing in Silverlight development is final.  So I sat down this weekend to solve some of these UI problems, and solve them well.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;My Inspiration&lt;/h2&gt;&lt;a href="http://channel9.msdn.com/posts/NicFill/A-Conversation-with-Bill-Buxton-and-Albert-Shum-Microsofts-UX-Gurus/"&gt;Bill Buxton has talked about creating a common design language&lt;/a&gt; for an application.  What he's getting at it is that the design of your application should be consistent throughout so that when you explore a new section of the application you'll instinctively know how things work.  For instance, new dialog boxes, windows, and basic UI elements should always appear in a consistent, and therefore, predictable manner.  Likewise, the color scheme of tabs should be consistent so that you can easily know which tab is selected.  All of the tools the application has to offer should be grouped by function and should be easy for the user to find.  So be consistent.  It's such a simple design principle that even left-brained people like myself can grasp.&lt;br /&gt;
&lt;br /&gt;
Beyond this, there was a quote I came across a few months ago:&lt;br /&gt;
&lt;blockquote&gt;"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."&lt;br /&gt;
--  Antoine de Saint-Exuper&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Words to live by.  Every time I sit down, put on my turtle neck (not really), and do some design I think of this quote.  It's all about simplifying the interface as much as possible for the given functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;The Improvements&lt;/h2&gt;First, I added a file menu...&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/ToolsMenu.png" alt="Tools Menu" /&gt;&lt;br /&gt;
&lt;br /&gt;
The menu contains the following:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="float: left; padding: 0 10px;"&gt;&lt;b&gt;File&lt;/b&gt;&lt;br /&gt;
New&lt;br /&gt;
Open...&lt;br /&gt;
Save&lt;br /&gt;
Save as...&lt;br /&gt;
&lt;/div&gt;&lt;div style="float: left; padding: 0 10px;"&gt;&lt;b&gt;Tools&lt;/b&gt;&lt;br /&gt;
Public Library&lt;br /&gt;
.NET Regex Reference&lt;br /&gt;
Generate .NET Code&lt;br /&gt;
Benchmark&lt;br /&gt;
Permalink&lt;br /&gt;
&lt;/div&gt;&lt;div style="float: left; padding: 0 10px;"&gt;&lt;b&gt;Help&lt;/b&gt;&lt;br /&gt;
About&lt;br /&gt;
&lt;/div&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;
&lt;br /&gt;
Everyone understands the ubiquitous file menu, so why fight it?  The "New" and "Save" buttons offer completely new functionality.  "New" will clear out the regular expression, target string, and replace text boxes for you so you can start fresh.  "Save" will save your regular expression in a single click.  And then the "New" and "Open..." commands will prompt you asking if you'd like to save your changes.  All of this functionality is based on how Notepad works, even down to the wording of the dialog boxes.  Oh yes, I took inspiration from Notepad as well.&lt;br /&gt;
&lt;br /&gt;
By adding this menu I've also made the decision to remove some of the oddly placed buttons and links scattered through the application.  For example, the buttons for .NET Regex Reference and Generate .NET Code are gone since they're now in the menu above.  The same goes for the Benchmark and Permalink links that were on the right hand side of the app.  It's a tough decision to simply remove buttons altogether but it does give me the ability to group all of these things by functionality and hopefully make everything easier to find and work with as a result.&lt;br /&gt;
&lt;br /&gt;
By removing the Permalink and Benchmark links from the right-hand side I've also removed a purpose from the right-hand panel.  For instance, instead of the Benchmark UI appearing in the right-hand panel, it now covers up the target string box just like everything else.  This has allowed me to do a lot more with the Benchmarking feature thanks to the extra space:&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/RecentBenchmarks.png" alt="Recent Benchmarks" /&gt;&lt;br /&gt;
&lt;br /&gt;
The iterations per second concept is something that's been around a long time.   And it is a useful term of measure so I've made that the prominent statistic.  But I've also added a recent benchmarks section so that you can watch your progress as you tune and tweak your regular expression.&lt;br /&gt;
&lt;br /&gt;
I also moved the error box 5 pixels downward so it won't cover up the last line of the regular expression box.  And then I made the Grid splitter control 2 pixels thicker so it's easier to get your mouse cursor on it.&lt;br /&gt;
&lt;br /&gt;
I think that about sums it up.  Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-3883993980698833051?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=GVA_W14b75M:oxTEGLdtSpo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=GVA_W14b75M:oxTEGLdtSpo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=GVA_W14b75M:oxTEGLdtSpo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/GVA_W14b75M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/GVA_W14b75M/major-ui-overhaul.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/04/major-ui-overhaul.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-5853220484698006096</guid><pubDate>Sun, 28 Mar 2010 21:42:00 +0000</pubDate><atom:updated>2010-04-08T21:58:37.922-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Introducing Code Hinting for Regular Expressions</title><description>It's been a long time in the making but code hinting is here, and I'm pretty excited about it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://regexhero.net/videos/2/code-hinting-phone"&gt;&lt;img src="http://regexhero.net/images/screenshots/Regex-Code-Hinting.png" alt="Regex Code Hinting" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I've created a short &lt;a href="http://regexhero.net/videos/2/code-hinting-phone"&gt;code hinting demo&lt;/a&gt; that shows it off a bit.  This feature is available only to &lt;a href="https://regexhero.net/buy/"&gt;licensed users&lt;/a&gt;.  If you're a licensed user and you open up the &lt;a href="http://regexhero.net/tester/"&gt;tester&lt;/a&gt; now you'll see hints appear as you start typing an open parenthesis "(", bracket "[" or brace "{".&lt;br /&gt;
&lt;br /&gt;
I took a lot of inspiration from Intellisense.  In particular, I based my design off of the Intellisense in Expression Blend.  I like the look &amp; feel of Expression Blend.  But the regular expression language is so different than anything Intellisense is used for.  So functionality-wise I was on my own.  &lt;br /&gt;
&lt;br /&gt;
I knew one thing I didn't want.  I didn't want the code hinting to aggressively autocomplete.  In other words, Intellisense in Visual Studio will sometimes autocomplete whatever you're typing at the time, sometimes adding code that you don't even want.  That's a side effect of their complex algorithm that's normally pretty good.  However, the regular expression syntax is tricky.  And I have this theory.  Most people can't write regular expressions as quickly and easily as .NET.  So attempting aggressive auto-completion doesn't make much sense when the user may not know what they're looking for until they see it in the description.  I fear that if Regex Hero tries too hard to predict what you're going to type before you type it then it'll inevitably make mistakes.  &lt;br /&gt;
&lt;br /&gt;
So I've made it impossible for the code hinting to do anything you don't want it to.  You literally have to select the pattern from the list to add it to your regular expression.  You can do that either by using the arrow keys to move to it and hitting enter or tab to select it, or by double clicking the pattern.  I think this still makes the code hinting easy to use, but without all the fuss of accidental code modification.  In my humble opinion, the end result is pretty awesome.  It's a beautiful addition that allows you to be even more productive.  And if it saves you from having to look up something in the reference then I've done my job.&lt;br /&gt;
&lt;br /&gt;
I still want to add a few patterns to the mix and make it work with replacement patterns as well.  But for now I think it's ready for primetime and I'd love to hear your thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-5853220484698006096?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=eydNyAYVz-c:8hP0MspDkXw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=eydNyAYVz-c:8hP0MspDkXw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=eydNyAYVz-c:8hP0MspDkXw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/eydNyAYVz-c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/eydNyAYVz-c/introducing-code-hinting-for-regular.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/03/introducing-code-hinting-for-regular.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-4734557586814165308</guid><pubDate>Sat, 27 Mar 2010 20:43:00 +0000</pubDate><atom:updated>2010-03-27T13:51:33.472-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Proper Off-Site Backups Have Been Configured</title><description>When the site was hosted with Orcs Web they would backup the server for me as a part of their managed hosting.  Now that I'm with Liquid Web and I've opted not to use their $100/month Guardian backup service, backups are on me.  &lt;br /&gt;
&lt;br /&gt;
So today I set up a database backup maintenance plan.  Every night the server will create full backups for every database in SQL and save the backups to the extra (backup) hard drive in the server.  I've got the backups configured to expire after 14 days.  Essentially what this means is that I'll have quick restore capability for any day up to 2 weeks in the past.  &lt;br /&gt;
&lt;br /&gt;
But that's really not enough.  So in addition to this I've signed up for &lt;a href="http://mozy.com/pro/"&gt;MozyPro&lt;/a&gt; off-site backup.  I've used MozyHome on my home computer for the past year and I've been pleased with their service.  The MozyPro service is slightly more expensive than MozyHome.  But MozyHome will not run on a server, so MozyPro it is.&lt;br /&gt;
&lt;br /&gt;
I configured MozyPro to backup nightly just after the database backups occur.  So every night the latest database backup files will be uploaded to Mozy's servers.  In addition to that, the files that make up the websites themselves are also backed up to Mozy.  The cool thing about the MozyPro service is automatic file versioning.  They'll actually store 30 days worth of versions of every file that's backed up.&lt;br /&gt;
&lt;br /&gt;
There are a bunch of ways one could go with backups.  I came up with this scheme because it's  simple, cheap, easily recoverable, and highly redundant.  It was easy to set up too.  I did all of this in about an hour.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-4734557586814165308?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=peOCDWvpKwk:JCAvD6UIXgY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=peOCDWvpKwk:JCAvD6UIXgY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=peOCDWvpKwk:JCAvD6UIXgY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/peOCDWvpKwk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/peOCDWvpKwk/proper-off-site-backups-have-been.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/03/proper-off-site-backups-have-been.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-4577490868523605790</guid><pubDate>Fri, 19 Mar 2010 21:57:00 +0000</pubDate><atom:updated>2010-03-30T08:11:00.237-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Code Hinting for Regular Expressions : The Theory</title><description>I haven't heard much feedback on my &lt;a href="http://blog.regexhero.net/2010/01/sneak-peek-code-hinting.html"&gt;code hinting&lt;/a&gt; post in January, perhaps because the first demo is not too impressive.  And in fact I haven't been able to work on it as much as I wanted.  But I'm still thinking about it and planning the user interface.  There's still a lot to do to make this as well polished as Intellisense is in Visual Studio or Expression Blend.  In fact I'm drawing more inspiration from the Expression Blend interface, but that's another story.&lt;br /&gt;
&lt;br /&gt;
When I first started on this I knew that I needed to parse the regular expression on the fly and display the hints based on the text next to the caret.  I begun by researching parsing theory.  Now, I know what you're thinking.  Why bother?  Why not just use regular expressions?  Well, I knew that &lt;a href="http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454"&gt;regular expressions are ill-suited to parse HTML&lt;/a&gt;, and I thought that they may not be the best choice for parsing themselves, either.  The reason I thought this, it turns out, was completely valid.  Regular expressions are designed to parse regular languages.  The regular expression syntax, however, is a &lt;a href="http://en.wikipedia.org/wiki/Context-sensitive_grammar"&gt;context-sensitive language&lt;/a&gt; as listed in &lt;a href="http://en.wikipedia.org/wiki/Chomsky_hierarchy"&gt;Chomsky's hierarchy&lt;/a&gt;.  Beyond that I was somewhat lost when reading the complex labyrinth of articles on Wikipedia related to parsing theory, seemingly requiring a PhD to comprehend.  But I was now equipped with some crucial knowledge with which I could write a parsing algorithm.&lt;br /&gt;
&lt;br /&gt;
As I've often done, I wrote this algorithm completely from scratch so that I can understand it completely.  After I wrote it and verified that it worked I determined that what I came up with is an &lt;a href="http://en.wikipedia.org/wiki/Embedded_pushdown_automaton"&gt;embedded pushdown automaton&lt;/a&gt; capable of parsing &lt;a href="http://en.wikipedia.org/wiki/Mildly_context-sensitive_grammar"&gt;mildly context sensitive languages&lt;/a&gt;.  Perfect.&lt;br /&gt;
&lt;br /&gt;
Essentially what this comes down to is that my algorithm is sophisticated enough to show the proper hints in the proper contexts.  For example if you're starting a regular expression with a beginning parenthesis "(" then I should show a list of every possible construct that begins with a parenthesis: groups, lookarounds, comments, etc.  But a beginning parenthesis "(" does not have the same meaning inside a bracket expression "[]".  That's because a bracket expression follows its own rules.  Secondly my algorithm is forward-looking and holds a memory as it parses from left-to-right, making it obscenely efficient for this task.  Even with a huge 500+ character regular expression it'll know exactly what context the regular expression is in wherever the caret is at the time.  And it'll do this in under 10 ms, faster than the human eye could even see it.  This is almost too fast for your own good, but that's OK.  I'm encouraged by how well it's working more than ever.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for updates.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;UPDATE:  &lt;a href="http://blog.regexhero.net/2010/03/introducing-code-hinting-for-regular.html"&gt;Code hinting has been released!&lt;/a&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-4577490868523605790?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=22_7z76IFxs:LttNbp2_EAY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=22_7z76IFxs:LttNbp2_EAY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=22_7z76IFxs:LttNbp2_EAY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/22_7z76IFxs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/22_7z76IFxs/code-hinting-for-regular-expressions.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/03/code-hinting-for-regular-expressions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-1624050374607613972</guid><pubDate>Fri, 19 Mar 2010 21:27:00 +0000</pubDate><atom:updated>2010-03-20T14:44:35.413-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Silverlight 4 Coming in April, or Maybe Sooner</title><description>The exact release date has not been announced.  But Visual Studio 2010 RTM is coming out in April and I think it's safe to assume that Silverlight 4 will be released no later than that.&lt;br /&gt;
&lt;br /&gt;
Each release of Silverlight has brought massive improvements over the previous version.  And once again, Silverlight 4 does not disappoint.  There is a long list of improvements but the ones that I think that will affect Regex Hero are as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;RichTextBox&lt;/b&gt;&lt;br /&gt;
My plan is to use this in place of all 4 major textboxes in Regex Hero.  The new RichTextBox has built-in multiple undos &amp; redos, so I can ditch my home-brewed code.  It should be nice to use for syntax highlighting for the regular expressions I intend to create.  It also has a built-in API to determine the pixel position of the text.  I should be able to use this API and build a new highlighting scheme based off of it.  This should do a couple things.  First, I should be able to finally fix the problem I had with the ScrollViewer and ridiculously wide sections of text not scrolling properly with the highlighting.  Secondly, I believe I'll finally be able to enable word wrapping and still have working highlighting.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Right-click support and custom context menus&lt;/b&gt;&lt;br /&gt;
Finally, I'll be able to create context menus with Cut, Copy, &amp; Paste for the textboxes in the application.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mouse wheel support&lt;/b&gt;&lt;br /&gt;
Oh yes, you'll be able to use the mouse wheel to scroll the text boxes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Improved XAML parser&lt;/b&gt;&lt;br /&gt;
This should improve the start-up time of Regex Hero, if only marginally.&lt;br /&gt;
&lt;br /&gt;
Like I said, there's much more in this release but these are the things I'm looking forward to most.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-1624050374607613972?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=xhV47Urj3B0:dSijRPix7T0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=xhV47Urj3B0:dSijRPix7T0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=xhV47Urj3B0:dSijRPix7T0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/xhV47Urj3B0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/xhV47Urj3B0/silverlight-4-coming-in-april-or-maybe.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/03/silverlight-4-coming-in-april-or-maybe.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-6510202716240912661</guid><pubDate>Tue, 02 Mar 2010 02:34:00 +0000</pubDate><atom:updated>2010-03-01T18:34:26.838-08:00</atom:updated><title>C# Code Generation Bug Fix and Improved "Jump To" Functionality</title><description>There was a bug in the C# code generation involving improperly escaped quotes.  I'm using the string literal syntax with the @ sign.  And when you do that, quotes are no longer escaped with \".  Instead, it works more like VB with double quotes "" where the first quote escapes the second.  I overlooked this but a fellow user of Regex Hero pointed this out to me today (thanks Jason).  And after a small code change it works properly now.&lt;br /&gt;
&lt;br /&gt;
Secondly, I made a small improvement to the universal match count / group count / stepper control in Regex Hero.  The up/down buttons will normally select a match and scroll to it.  But when there's only 1 match, then the up/down buttons are disabled.  So in the event that there's only 1 match you can now click the text that says "1 match" and that will select and scroll to the match.  It's a simple change but I think it helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-6510202716240912661?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=ViCjWCT0hw8:gTnS0XtsfT8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=ViCjWCT0hw8:gTnS0XtsfT8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=ViCjWCT0hw8:gTnS0XtsfT8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/ViCjWCT0hw8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/ViCjWCT0hw8/c-code-generation-bug-fix-and-improved.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/03/c-code-generation-bug-fix-and-improved.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-3972755994750337311</guid><pubDate>Sun, 28 Feb 2010 00:25:00 +0000</pubDate><atom:updated>2010-02-28T13:17:03.370-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Upgrade Complete : Behold the Speed</title><description>So the server migration is complete.  I ran into a couple problems along the way that were all related to server configuration.  &lt;br /&gt;
&lt;br /&gt;
But this new &lt;a href="http://blog.regexhero.net/2010/02/upgrading-to-dedicated-server.html"&gt;dedicated server&lt;/a&gt; seems pretty nice.  And it should completely resolve the performance problems the site has been experiencing the past few weeks.&lt;br /&gt;
&lt;br /&gt;
While I was at it I also moved the blog to &lt;a href="http://blog.regexhero.net/"&gt;blog.regexhero.net&lt;/a&gt; so it can be hosted by Blogger.  I did that because Blogger will soon be canceling their FTP service that I was using.  Apparently there's only a small percentage of Blogger users who used that service.  Anyway, making the switch does mean that I'm able to use some nice features I wasn't able to before.  For example, you'll now see a list of categories in the right-hand navigation.  It's such a simple thing but that's something I've wanted for a long time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-3972755994750337311?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=N652QjQ3-68:WeHjGSaiQcM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=N652QjQ3-68:WeHjGSaiQcM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=N652QjQ3-68:WeHjGSaiQcM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/N652QjQ3-68" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/N652QjQ3-68/upgrade-complete-behold-speed.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/02/upgrade-complete-behold-speed.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-1782678540470805674</guid><pubDate>Fri, 26 Feb 2010 17:21:00 +0000</pubDate><atom:updated>2010-02-27T12:11:06.079-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Upgrading to a Dedicated Server</title><description>The virtual dedicated server this site is on hasn't really been working out for me.  The site can be sporadically and inexplicably slow at times.  I mean, inexcusably slow.  A virtual dedicated server is supposed to be designed for someone like me -- a control freak who doesn't want to break the bank.  But when the other customers on the host machine are calculating the next largest prime number while simultaneously rendering Avatar 2, then no amount of virtual separation will eliminate those slowdowns.&lt;br /&gt;
&lt;br /&gt;
So for a little more than twice the price, I ordered a dedicated server from &lt;a href="http://www.liquidweb.com/"&gt;Liquid Web&lt;/a&gt; last night.  And they finished setting it up this morning.  The server has a dual-core AMD processor, 2GB RAM, two 250GB SATA hard drives w/ RAID 1, one 250GB SATA secondary drive, Windows Server 2008, and SQL Server 2008 Web Edition.  It's in a facility with a ridiculous amount of network and power redundancy.  So it should be good.&lt;br /&gt;
&lt;br /&gt;
This weekend I'll be migrating the sites over and all of the speed problems should be solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-1782678540470805674?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=NjUMESwR-gk:1nzHN0bDgpI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=NjUMESwR-gk:1nzHN0bDgpI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=NjUMESwR-gk:1nzHN0bDgpI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/NjUMESwR-gk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/NjUMESwR-gk/upgrading-to-dedicated-server.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/02/upgrading-to-dedicated-server.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-5961892028135595400</guid><pubDate>Sun, 07 Feb 2010 15:46:00 +0000</pubDate><atom:updated>2010-02-27T11:52:05.574-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>Upgraded to Silverlight 3 and Created the Desktop Version</title><description>Silverlight 3 was a substantial upgrade over Silverlight 2.  The biggest feature, by far, was the introduction of Silverlight's out-of-browser capabilities, essentially allowing you to install a Silverlight app on your desktop.  A beauty part of this feature is that since it's still running in Silverlight, it'll work on both a PC and a Mac.  Cross-platform development has never been so easy.&lt;br /&gt;
&lt;br /&gt;
This has allowed me to create a new version which can be installed on your desktop in two clicks.  This desktop version is available only to licensed users.  &lt;br /&gt;
&lt;br /&gt;
So if you've already bought Regex Hero you should now see a link on the right hand side of the screen:&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/InstallLink.png" alt="Install on your Desktop" /&gt;&lt;br /&gt;
&lt;br /&gt;
Click that and you'll get this dialog box:&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/InstallDialog.png" alt="Install Dialog" /&gt;&lt;br /&gt;
&lt;br /&gt;
And then once you click OK, you're done.  Shortcut icons will be placed appropriately.  And the desktop version looks like this:&lt;br /&gt;
&lt;img src="http://regexhero.net/images/screenshots/DesktopVersion.png" alt="Desktop Version" /&gt;&lt;br /&gt;
&lt;br /&gt;
If after installing you want to uninstall you can do so by right-clicking inside the application and simply clicking "Remove this application..."&lt;br /&gt;
&lt;br /&gt;
There are a couple nice things about the desktop version.  It is very fast to load since it resides on your desktop.  However, at the same time, it's good about keeping itself up to date.  Every time you start the application it'll automatically check for and download any available updates asynchronously.  And then the next time you start the application those updates will automatically be applied in a matter of milliseconds.  The whole process is completely transparent so you're never bothered with annoying "available update" alerts.&lt;br /&gt;
&lt;br /&gt;
In addition to this new desktop version, I also made a few changes to Regex Hero.  The previous match / next match (up/down) buttons will now actually select the text of the match you're on.  So you can literally click the down button and then begin typing and you'll replace whatever was highlighted.  In addition to that, these buttons will also scroll to the match if it's off the screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-5961892028135595400?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=0tJdVjJCKfU:QOGFQWddljM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=0tJdVjJCKfU:QOGFQWddljM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=0tJdVjJCKfU:QOGFQWddljM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/0tJdVjJCKfU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/0tJdVjJCKfU/upgraded-to-silverlight-3-and-created.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/02/upgraded-to-silverlight-3-and-created.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-2196194676806298078</guid><pubDate>Sun, 31 Jan 2010 23:41:00 +0000</pubDate><atom:updated>2010-02-27T12:10:49.409-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Sneak Peek: Code Hinting</title><description>In my opinion this is the coolest feature since Regex Hero first launched.  Soon this will be making its way into the paid version.&lt;br /&gt;
&lt;br /&gt;
&lt;object width="550" height="413"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9115920&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=9115920&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="413"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
I still have some more work to do to perfect it.  I want to make it a little more intelligent.  And of course I need to provide tool tips for everything.  Once that's done this should be a very helpful addition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-2196194676806298078?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=E0sJCjqDt84:eIV1qxungAQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=E0sJCjqDt84:eIV1qxungAQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=E0sJCjqDt84:eIV1qxungAQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/E0sJCjqDt84" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/E0sJCjqDt84/sneak-peek-code-hinting.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/01/sneak-peek-code-hinting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-4632110143886980896</guid><pubDate>Tue, 26 Jan 2010 02:14:00 +0000</pubDate><atom:updated>2010-02-27T12:10:41.591-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><title>Improper Highlighting Bug Fixed</title><description>Apparently I introduced a bug with the last major update to Regex Hero.  The multi-threading I put in place had a few problems.  On rare occasions you'd see highlighting that made no sense at all.&lt;br /&gt;
&lt;br /&gt;
I'm doing multi-threaded auto-saving, multi-threaded benchmarking, and even multi-threaded initialization in Regex Hero.  But I need to set aside more time to figure out a way to do multi-threading for the real-time highlighting more reliably.&lt;br /&gt;
&lt;br /&gt;
For now I had to revert back to the old way of doing things.  It may not be fast when dealing with massive amounts of text.  But at least it's reliable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-4632110143886980896?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=AsgY_2iD_4I:aaT2l44rdeA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=AsgY_2iD_4I:aaT2l44rdeA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=AsgY_2iD_4I:aaT2l44rdeA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/AsgY_2iD_4I" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/AsgY_2iD_4I/improper-highlighting-bug-fixed.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/01/improper-highlighting-bug-fixed.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-1239608112307093682</guid><pubDate>Sun, 24 Jan 2010 20:13:00 +0000</pubDate><atom:updated>2010-02-27T12:10:32.678-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>Account Recovery with OpenID</title><description>I made some improvements to the login system this weekend.   The biggest improvement is the new ability to recover an account when you can't login through your primary OpenID provider.  I asked a &lt;a href="http://stackoverflow.com/questions/1758399/what-if-the-user-cant-log-in-with-their-openid/" rel="nofollow" target="_blank"&gt;question on StackOverflow&lt;/a&gt; a couple months ago about how this should be implemented.  This is something I've been meaning to do for awhile but on Friday there was a sense of urgency as there were some peculiar issues with MyOpenID.com occasionally preventing you from authenticating.&lt;br /&gt;
&lt;br /&gt;
So I made a video to explain OpenID as well as the new account recovery feature:&lt;br /&gt;
&lt;br /&gt;
&lt;object width="550" height="413"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8952535&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=8952535&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="413"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
I am pretty happy with the way things turned out at this point.  I've been using OpenID logins on Regex Hero for several months now.  The excellent &lt;a href="http://www.dotnetopenauth.net/" rel="nofollow" target="_blank"&gt;DotNetOpenAuth&lt;/a&gt; project has simplified things from my end tremendously.  And now that this account recovery feature is in place I can sleep a little easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-1239608112307093682?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=NkY9xRixoMI:w3vofFcwizI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=NkY9xRixoMI:w3vofFcwizI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=NkY9xRixoMI:w3vofFcwizI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/NkY9xRixoMI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/NkY9xRixoMI/using-openid-on-regex-hero.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/01/using-openid-on-regex-hero.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8044172762034419597.post-5319464069235919365</guid><pubDate>Sun, 17 Jan 2010 23:46:00 +0000</pubDate><atom:updated>2010-02-27T12:10:24.354-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Release Announcements</category><category domain="http://www.blogger.com/atom/ns#">Development / Technical</category><title>New Videos Section, Improved Responsiveness, and Better Memory Efficiency</title><description>&lt;b&gt;Videos&lt;/b&gt;&lt;br /&gt;
After I created the new &lt;a href="http://regexhero.net/library/"&gt;library&lt;/a&gt; section which allows voting and comments I now have some very useful pieces to build upon.  So this weekend I created a new &lt;a href="http://regexhero.net/videos/"&gt;videos&lt;/a&gt; section to complement the library.  To start off with I created a video to demonstrate the process of writing a &lt;a href="http://regexhero.net/videos/learn/1-strong-password"&gt;Strong Password Regular Expression&lt;/a&gt;.  I decided to host the videos myself and use a &lt;a href="http://slvideoplayer.codeplex.com/" target="_blank" rel="nofollow"&gt;Silverlight video player&lt;/a&gt;.  The player I used is open-source and very slick.  I made a few modifications to it for my own use.  I primarily worked on the media controls auto-hiding behavior and I think I finally have it the way I want it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Improved Responsiveness&lt;/b&gt;&lt;br /&gt;
While that would ordinarily be a productive weekend, I've been meaning to make a couple technical improvements to the &lt;a href="http://regexhero.net/tester/"&gt;tester&lt;/a&gt; for some time now.  The first issue is a general slowness when you're dealing with a huge target string with real-time highlighting on.  The trouble is that the application has to run the regular expression, calculate the positions to highlight, and update the GUI after every keypress.  Ordinarily this would be very responsive.  However, when the target string is over 100,000 characters long or so you might start to notice it slow down and even prevent you from typing as fast as you'd like.  So I've added some multi-threading to the app utilizing a BackgroundWorker.  I had to write this very carefully to get the most out of it, but I think it's working quite well.  The benefit here is that the real-time highlighting won't slow your typing nearly as much as it did before.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Better Memory Efficiency&lt;/b&gt;&lt;br /&gt;
Lastly, I made yet another update to my undo/redo system.  I've talked before about how I had to implement my own multiple undos/redos for Regex Hero because Silverlight didn't ship with that feature.  Well, in order to improve efficiency I've made a small change to the way it works.  It'll now add undo history on the KeyUp event.  This means that if you hold down Enter, for example, to create a bunch of line breaks then the undo history will not record every line break individually.  Instead, it'll only record the history after you release the key.  This is hard to measure because it depends so much on your typing habits, but this should reduce memory consumption significantly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8044172762034419597-5319464069235919365?l=blog.regexhero.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=BIqgZN0EyBo:BYOxeBEUrjk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RegexHeroBlog?a=BIqgZN0EyBo:BYOxeBEUrjk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RegexHeroBlog?i=BIqgZN0EyBo:BYOxeBEUrjk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RegexHeroBlog/~4/BIqgZN0EyBo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/RegexHeroBlog/~3/BIqgZN0EyBo/new-videos-section-improved.html</link><author>noreply@blogger.com (Steve Wortham)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.regexhero.net/2010/01/new-videos-section-improved.html</feedburner:origLink></item></channel></rss>
