<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEUFR3gyfSp7ImA9WhRRFEk.&quot;"><id>tag:blogger.com,1999:blog-25856270</id><updated>2011-11-28T12:03:36.695+11:00</updated><title>bluepuyo</title><subtitle type="html">about software development</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://bluepuyo.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://bluepuyo.blogspot.com/" /><author><name>Puyo</name><uri>http://www.blogger.com/profile/15068578685922207921</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://bp0.blogger.com/_mkDEY75MnLA/SCV9Y_7KMTI/AAAAAAAAAJA/V2OfNlA28tA/S220/puyo-trans-64x64.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>4</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/atom+xml" href="http://feeds.feedburner.com/Bluepuyo" /><feedburner:info uri="bluepuyo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUMCQXgyfyp7ImA9WhdQEUU.&quot;"><id>tag:blogger.com,1999:blog-25856270.post-4741755931427029698</id><published>2010-03-03T23:19:00.005+11:00</published><updated>2011-08-13T07:11:00.697+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-13T07:11:00.697+10:00</app:edited><title>Make Apple Mail more like Gmail</title><content type="html">I like Gmail. I like its consolidated inbox/sent view. Whenever I use a mail client I set it up to copy sent items into my inbox (it usually defaults to a "Sent" folder) and use a threaded view in the inbox so that my messages are interleaved with those of others. I find this simpler to work with than a separate sent folder.

This wasn't possible with Apple Mail. It lets you "keep a copy of sent items" but it does not let you specify which mailbox to put the copy in. But I figured out a way to achieve the same thing using Smart Mailboxes. The idea is to set a condition to something simple that will catch &lt;em&gt;all&lt;/em&gt; messages.&lt;ol&gt;&lt;li&gt; Give it a name. I named mine "Mail"
&lt;li&gt; Click the Mailbox menu and select New Smart Mailbox...
&lt;li&gt; Select "Date Received" as the first part of the condition.
&lt;li&gt; Select "is after the date" as the second part.
&lt;li&gt; Leave the date as something in the past.
&lt;li&gt; Check the "Include messages from Sent" checkbox.
&lt;li&gt; Click OK.
&lt;/ol&gt;Having obviated the need to click on different mailboxes, I decided I could live without the sidebar. The little gripper at the bottom of the sidebar lets you completely remove the sidebar. You can get it back by clicking on the left-most pixel edge of the window and dragging it right again.

Also, I decided I didn't care what Mailbox my message was in, so I removed that column. View menu =&gt; Columns =&gt; Uncheck Mailbox.

There. Much simpler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25856270-4741755931427029698?l=bluepuyo.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aQli903kZbL3y8QnIedUpP0ZSDo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aQli903kZbL3y8QnIedUpP0ZSDo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aQli903kZbL3y8QnIedUpP0ZSDo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aQli903kZbL3y8QnIedUpP0ZSDo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bluepuyo/~4/eAdzLw8dbiw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bluepuyo.blogspot.com/feeds/4741755931427029698/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=25856270&amp;postID=4741755931427029698" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/4741755931427029698?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/4741755931427029698?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bluepuyo/~3/eAdzLw8dbiw/make-mailapp-more-like-gmail.html" title="Make Apple Mail more like Gmail" /><author><name>Puyo</name><uri>http://www.blogger.com/profile/15068578685922207921</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://bp0.blogger.com/_mkDEY75MnLA/SCV9Y_7KMTI/AAAAAAAAAJA/V2OfNlA28tA/S220/puyo-trans-64x64.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://bluepuyo.blogspot.com/2010/03/make-mailapp-more-like-gmail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcDQnw5cCp7ImA9WhdQEUU.&quot;"><id>tag:blogger.com,1999:blog-25856270.post-7986729751033822845</id><published>2008-05-12T10:43:00.012+10:00</published><updated>2011-08-13T07:21:13.228+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-13T07:21:13.228+10:00</app:edited><title>Marking Up Ruby Code for Blogs</title><content type="html">I jazzed up this blog a bit and redid the code highlighting because before I was using Vim's :ToHtml but the HTML it generated made me cry inside. I wrote this script to do it, which is derived from &lt;a href="http://blog.wolfman.com/articles/2006/05/26/howto-format-ruby-code-for-blogs"&gt;this one&lt;/a&gt;. Advantages over the linked script:&lt;ul&gt;&lt;li&gt;This version doesn't rely on dcop (KDE), so you can run it under any window manager you like. I run it under Xubuntu with Window Maker.&lt;/li&gt;
&lt;li&gt;This version doesn't rely on RIO so you have fewer gems to install.&lt;/li&gt;&lt;/ul&gt;&lt;pre class="ruby"&gt;&lt;span class="comment"&gt;#!/usr/bin/ruby -w&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;# ruby2html&lt;/span&gt;
&lt;span class="comment"&gt;# Copyright (C) 2008 Greg McIntyre&lt;/span&gt;
&lt;span class="comment"&gt;# All rights reserved.&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;# Takes Ruby code from the clipboard and replaces it with HTML marked up&lt;/span&gt;
&lt;span class="comment"&gt;# version of it.&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;#   ruby2html mycode.rb&lt;/span&gt;
&lt;span class="comment"&gt;#   # writes mycode.html&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;#   ruby2html&lt;/span&gt;
&lt;span class="comment"&gt;#   # replaces Ruby code in clipboard with HTML marked up version&lt;/span&gt;
&lt;span class="comment"&gt;# &lt;/span&gt;
&lt;span class="comment"&gt;# My version of this:&lt;/span&gt;
&lt;span class="comment"&gt;#   http://blog.wolfman.com/articles/2006/05/26/howto-format-ruby-code-for-blogs&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;# Requires:&lt;/span&gt;
&lt;span class="comment"&gt;#   sudo aptitude install xclip&lt;/span&gt;
&lt;span class="comment"&gt;#   sudo gem install syntax&lt;/span&gt;

&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rubygems&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;gem&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;syntax&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;syntax/convertors/html&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;size&lt;/span&gt; &lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
  &lt;span class="ident"&gt;code&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;read&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;])&lt;/span&gt;
&lt;span class="keyword"&gt;else&lt;/span&gt;
  &lt;span class="ident"&gt;code&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; `&lt;span class="ident"&gt;xclip&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;out`&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="ident"&gt;convertor&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Syntax&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Convertors&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;HTML&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;for_syntax&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;ruby&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;
&lt;span class="ident"&gt;convertor&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;tokenizer&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;set&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:expressions&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:highlight&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
&lt;span class="attribute"&gt;@code_html&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;convertor&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;convert&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;code&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
&lt;span class="attribute"&gt;@code_html&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;gsub!&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;^&amp;lt;pre&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;/,&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;pre class=&amp;quot;ruby&amp;quot;&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;

&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="attribute"&gt;@code_html&lt;/span&gt;

&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;size&lt;/span&gt; &lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
  &lt;span class="ident"&gt;fn&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{&lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;basename&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt;&lt;span class="normal"&gt; &lt;/span&gt;&lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;extname&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;]))&lt;/span&gt;}&lt;/span&gt;.html&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;open&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;fn&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;w&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;f&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
    &lt;span class="ident"&gt;f&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="attribute"&gt;@code_html&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;else&lt;/span&gt;
  &lt;span class="comment"&gt;# Put it back in the clipboard.&lt;/span&gt;
  &lt;span class="constant"&gt;IO&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;popen&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;xclip -in&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;w&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;f&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
    &lt;span class="ident"&gt;f&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="attribute"&gt;@code_html&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25856270-7986729751033822845?l=bluepuyo.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MynJiDLeRGUVKyCA9z51PuKOavE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MynJiDLeRGUVKyCA9z51PuKOavE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MynJiDLeRGUVKyCA9z51PuKOavE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MynJiDLeRGUVKyCA9z51PuKOavE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bluepuyo/~4/AD_IRqv3Ysk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bluepuyo.blogspot.com/feeds/7986729751033822845/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=25856270&amp;postID=7986729751033822845" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/7986729751033822845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/7986729751033822845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bluepuyo/~3/AD_IRqv3Ysk/marking-up-ruby-code-for-blogs.html" title="Marking Up Ruby Code for Blogs" /><author><name>Puyo</name><uri>http://www.blogger.com/profile/15068578685922207921</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://bp0.blogger.com/_mkDEY75MnLA/SCV9Y_7KMTI/AAAAAAAAAJA/V2OfNlA28tA/S220/puyo-trans-64x64.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://bluepuyo.blogspot.com/2008/05/marking-up-ruby-code-for-blogs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcDQnw4eCp7ImA9WhdQEUU.&quot;"><id>tag:blogger.com,1999:blog-25856270.post-8907674729991192733</id><published>2008-05-10T10:39:00.008+10:00</published><updated>2011-08-13T07:21:13.230+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-13T07:21:13.230+10:00</app:edited><title>Word Scrambler</title><content type="html">Apparently you can scramble the letters inside words, leaving the first and last letter intact, and still recognise the words. A lot of our word recognition in English comes from word length and the bounding letters. This is an old Ruby script I wrote that scrambles the interior letters in words.

Some examples:
&lt;pre&gt;$ ./scrambler.rb &lt; file.txt&lt;/pre&gt;
&lt;pre&gt;$ echo "I can still read this sentence despite the spelling being totally messed up." | ./scrambler.rb
I can stlil read this seenncte dsteipe the snleplig benig ttollay mseesd up.
&lt;/pre&gt;
&lt;pre class="ruby"&gt;&lt;span class="comment"&gt;#!/usr/bin/ruby -w&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;# Copyright (C) 2004 Greg McIntyre&lt;/span&gt;
&lt;span class="comment"&gt;# All rights reserved.&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;# Randomises letters inside words, leaving the first and last intact, creating&lt;/span&gt;
&lt;span class="comment"&gt;# scrambled sentences which are still readable because the human brain works&lt;/span&gt;
&lt;span class="comment"&gt;# like that.&lt;/span&gt;
&lt;span class="comment"&gt;#&lt;/span&gt;
&lt;span class="comment"&gt;# e.g.&lt;/span&gt;
&lt;span class="comment"&gt;# Reionasmds leertts isidne wrods, laivneg the frsit and last itcant, ctneirag&lt;/span&gt;
&lt;span class="comment"&gt;# scrlmeabd steneecns wihch are stlil radalbee bauesce the hmuan biran wkors&lt;/span&gt;
&lt;span class="comment"&gt;# like taht.&lt;/span&gt;

&lt;span class="constant"&gt;WORD&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;[&lt;span class="escape"&gt;\w&lt;/span&gt;]+&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;
&lt;span class="constant"&gt;LETTER&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;[A-Za-z]&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;

&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;scramble&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;string&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="ident"&gt;string&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;gsub&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;WORD&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
    &lt;span class="comment"&gt;# Collect indices of scramblable letters.&lt;/span&gt;
    &lt;span class="ident"&gt;indices&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;[]&lt;/span&gt;
    &lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;split&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/).&lt;/span&gt;&lt;span class="ident"&gt;each_with_index&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;character&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="ident"&gt;indices&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="ident"&gt;index&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="constant"&gt;LETTER&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;character&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="comment"&gt;# Remove 1st and last index.&lt;/span&gt;
    &lt;span class="ident"&gt;indices&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;shift&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="ident"&gt;indices&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;pop&lt;/span&gt;

    &lt;span class="comment"&gt;# Jumble the letters at these indices.&lt;/span&gt;
    &lt;span class="ident"&gt;indices&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="comment"&gt;# Swap the letter at this index with the letter at a&lt;/span&gt;
      &lt;span class="comment"&gt;# random index.&lt;/span&gt;
      &lt;span class="ident"&gt;swap_i&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;indices&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;rand&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;indices&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;size&lt;/span&gt;&lt;span class="punct"&gt;)]&lt;/span&gt;
      &lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;swap_i&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;swap_i&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="comment"&gt;# Evaluate to the word.&lt;/span&gt;
    &lt;span class="ident"&gt;word&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="keyword"&gt;while&lt;/span&gt; &lt;span class="ident"&gt;line&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;ARGF&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;gets&lt;/span&gt;
  &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="ident"&gt;scramble&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;line&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25856270-8907674729991192733?l=bluepuyo.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vu_1MUTskRV5FmcZyt0RY5sRai0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu_1MUTskRV5FmcZyt0RY5sRai0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vu_1MUTskRV5FmcZyt0RY5sRai0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu_1MUTskRV5FmcZyt0RY5sRai0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bluepuyo/~4/4msXvb35CFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bluepuyo.blogspot.com/feeds/8907674729991192733/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=25856270&amp;postID=8907674729991192733" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/8907674729991192733?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/8907674729991192733?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bluepuyo/~3/4msXvb35CFI/word-scrambler.html" title="Word Scrambler" /><author><name>Puyo</name><uri>http://www.blogger.com/profile/15068578685922207921</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://bp0.blogger.com/_mkDEY75MnLA/SCV9Y_7KMTI/AAAAAAAAAJA/V2OfNlA28tA/S220/puyo-trans-64x64.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://bluepuyo.blogspot.com/2008/05/word-scrambler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MHSHozeip7ImA9WxdRFks.&quot;"><id>tag:blogger.com,1999:blog-25856270.post-5271750455689626569</id><published>2007-07-10T11:50:00.002+10:00</published><updated>2008-06-05T22:37:19.482+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-05T22:37:19.482+10:00</app:edited><title>Ctags and Actionscript</title><content type="html">I used to apply a patch to &lt;a href="http://ctags.sourceforge.net/"&gt;Exuberant Ctags&lt;/a&gt; to get Actionscript jump-to-definition functionality working, however a co-worker pointed out the other day that you can define regular expressions in its configuration file and obviate the need to recompile it. Hurrah! No more software updates breaking my ctags binary!

This is my ~/.ctags showing its support for Actionscript (2 and 3):

&lt;pre&gt;--links=no
--langdef=ActionScript
--langmap=ActionScript:.as
--regex-ActionScript=/function[ \t]+([A-Za-z0-9_]+)[ \t]*\(/\1/f,function,functions/
--regex-ActionScript=/function[ \t]+(set|get)[ \t]+([A-Za-z0-9_]+)[ \t]*\(/\2/p,property,properties/
--regex-ActionScript=/interface[ \t]+[a-z0-9_.]*([A-Z][A-Za-z0-9_]+)/\1/i,interface,interfaces/
--regex-ActionScript=/class[ \t]+[a-z0-9_.]*([A-Z][A-Za-z0-9_]+)/\1/c,class,classes/&lt;/pre&gt;

Using this, you can hit the little build tags button in GVim or run

&lt;pre&gt;ctags -R .&lt;/pre&gt;

yourself to build your index (called "tags"). You can also throw in some standard libs source files:

&lt;pre&gt;ctags -R . "${FLEX_HOME}/frameworks/source"&lt;/pre&gt;

From within Vim I like to press "g" and click on a function, class or interface name to jump to its definition, or position the cursor over it and press "CTRL-]". Saves loads of time, especially since Actionscript files, like Java files, are heavily nested in often arbitrarily named packages. Nowadays I never really worry about where .as files are located. If in doubt, rebuild tags and jump to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25856270-5271750455689626569?l=bluepuyo.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fg6bgDBH9RznzHZnKqyWAOJltPg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fg6bgDBH9RznzHZnKqyWAOJltPg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fg6bgDBH9RznzHZnKqyWAOJltPg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fg6bgDBH9RznzHZnKqyWAOJltPg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Bluepuyo/~4/qtpgvq-ftE8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bluepuyo.blogspot.com/feeds/5271750455689626569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=25856270&amp;postID=5271750455689626569" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/5271750455689626569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25856270/posts/default/5271750455689626569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Bluepuyo/~3/qtpgvq-ftE8/i-used-to-apply-patch-to-exuberant.html" title="Ctags and Actionscript" /><author><name>Puyo</name><uri>http://www.blogger.com/profile/15068578685922207921</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://bp0.blogger.com/_mkDEY75MnLA/SCV9Y_7KMTI/AAAAAAAAAJA/V2OfNlA28tA/S220/puyo-trans-64x64.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://bluepuyo.blogspot.com/2007/07/i-used-to-apply-patch-to-exuberant.html</feedburner:origLink></entry></feed>

